diff --git a/404.html b/404.html new file mode 100644 index 0000000..5c88aa6 --- /dev/null +++ b/404.html @@ -0,0 +1,38 @@ + + + + + + + + + jmeter-dotnet-dsl + + + + +

404

That's a Four-Oh-Four.
Take me home
+ + + diff --git a/assets/404.html-550677cc.js b/assets/404.html-550677cc.js new file mode 100644 index 0000000..2bbe7b9 --- /dev/null +++ b/assets/404.html-550677cc.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app-36a3af56.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/404.html-60b35caa.js b/assets/404.html-60b35caa.js new file mode 100644 index 0000000..7a25b17 --- /dev/null +++ b/assets/404.html-60b35caa.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data}; diff --git a/assets/abstracta-logo-63bce99b.png b/assets/abstracta-logo-63bce99b.png new file mode 100644 index 0000000..ea946ec Binary files /dev/null and b/assets/abstracta-logo-63bce99b.png differ diff --git a/assets/app-36a3af56.js b/assets/app-36a3af56.js new file mode 100644 index 0000000..529e315 --- /dev/null +++ b/assets/app-36a3af56.js @@ -0,0 +1,770 @@ +const Wu="modulepreload",Ku=function(e){return"/jmeter-dotnet-dsl/"+e},Mi={},qt=function(t,n,r){if(!n||n.length===0)return t();const a=document.getElementsByTagName("link");return Promise.all(n.map(o=>{if(o=Ku(o),o in Mi)return;Mi[o]=!0;const i=o.endsWith(".css"),s=i?'[rel="stylesheet"]':"";if(!!r)for(let u=a.length-1;u>=0;u--){const f=a[u];if(f.href===o&&(!i||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${s}`))return;const c=document.createElement("link");if(c.rel=i?"stylesheet":Wu,i||(c.as="script",c.crossOrigin=""),c.href=o,document.head.appendChild(c),i)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())};function Do(e,t){const n=Object.create(null),r=e.split(",");for(let a=0;a!!n[a.toLowerCase()]:a=>!!n[a]}const Ee={},Tn=[],dt=()=>{},qu=()=>!1,Yu=/^on[^a-z]/,wr=e=>Yu.test(e),zo=e=>e.startsWith("onUpdate:"),Re=Object.assign,Ho=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Vu=Object.prototype.hasOwnProperty,he=(e,t)=>Vu.call(e,t),ee=Array.isArray,Ln=e=>Ca(e)==="[object Map]",Tl=e=>Ca(e)==="[object Set]",oe=e=>typeof e=="function",ge=e=>typeof e=="string",jo=e=>typeof e=="symbol",ke=e=>e!==null&&typeof e=="object",Ll=e=>ke(e)&&oe(e.then)&&oe(e.catch),Il=Object.prototype.toString,Ca=e=>Il.call(e),Gu=e=>Ca(e).slice(8,-1),Rl=e=>Ca(e)==="[object Object]",Bo=e=>ge(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,tr=Do(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Sa=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Xu=/-(\w)/g,xt=Sa(e=>e.replace(Xu,(t,n)=>n?n.toUpperCase():"")),Ju=/\B([A-Z])/g,yn=Sa(e=>e.replace(Ju,"-$1").toLowerCase()),Aa=Sa(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ba=Sa(e=>e?`on${Aa(e)}`:""),cr=(e,t)=>!Object.is(e,t),Ua=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Zu=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Qu=e=>{const t=ge(e)?Number(e):NaN;return isNaN(t)?e:t};let Fi;const co=()=>Fi||(Fi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function xr(e){if(ee(e)){const t={};for(let n=0;n{if(n){const r=n.split(tf);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Je(e){let t="";if(ge(e))t=e;else if(ee(e))for(let n=0;nge(e)?e:e==null?"":ee(e)||ke(e)&&(e.toString===Il||!oe(e.toString))?JSON.stringify(e,$l,2):String(e),$l=(e,t)=>t&&t.__v_isRef?$l(e,t.value):Ln(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,a])=>(n[`${r} =>`]=a,n),{})}:Tl(t)?{[`Set(${t.size})`]:[...t.values()]}:ke(t)&&!ee(t)&&!Rl(t)?String(t):t;let et;class sf{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=et,!t&&et&&(this.index=(et.scopes||(et.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=et;try{return et=this,t()}finally{et=n}}}on(){et=this}off(){et=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Fl=e=>(e.w&Xt)>0,Dl=e=>(e.n&Xt)>0,uf=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=l)&&s.push(c)})}else switch(n!==void 0&&s.push(i.get(n)),t){case"add":ee(e)?Bo(n)&&s.push(i.get("length")):(s.push(i.get(mn)),Ln(e)&&s.push(i.get(fo)));break;case"delete":ee(e)||(s.push(i.get(mn)),Ln(e)&&s.push(i.get(fo)));break;case"set":Ln(e)&&s.push(i.get(mn));break}if(s.length===1)s[0]&&mo(s[0]);else{const l=[];for(const c of s)c&&l.push(...c);mo(Uo(l))}}function mo(e,t){const n=ee(e)?e:[...e];for(const r of n)r.computed&&zi(r);for(const r of n)r.computed||zi(r)}function zi(e,t){(e!==ct||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function df(e,t){var n;return(n=sa.get(e))==null?void 0:n.get(t)}const mf=Do("__proto__,__v_isRef,__isVue"),jl=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(jo)),pf=Ko(),hf=Ko(!1,!0),vf=Ko(!0),Hi=gf();function gf(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ve(this);for(let o=0,i=this.length;o{e[t]=function(...n){Un();const r=ve(this)[t].apply(this,n);return Wn(),r}}),e}function bf(e){const t=ve(this);return Ze(t,"has",e),t.hasOwnProperty(e)}function Ko(e=!1,t=!1){return function(r,a,o){if(a==="__v_isReactive")return!e;if(a==="__v_isReadonly")return e;if(a==="__v_isShallow")return t;if(a==="__v_raw"&&o===(e?t?Nf:ql:t?Kl:Wl).get(r))return r;const i=ee(r);if(!e){if(i&&he(Hi,a))return Reflect.get(Hi,a,o);if(a==="hasOwnProperty")return bf}const s=Reflect.get(r,a,o);return(jo(a)?jl.has(a):mf(a))||(e||Ze(r,"get",a),t)?s:$e(s)?i&&Bo(a)?s:s.value:ke(s)?e?_n(s):kr(s):s}}const yf=Bl(),_f=Bl(!0);function Bl(e=!1){return function(n,r,a,o){let i=n[r];if(Mn(i)&&$e(i)&&!$e(a))return!1;if(!e&&(!la(a)&&!Mn(a)&&(i=ve(i),a=ve(a)),!ee(n)&&$e(i)&&!$e(a)))return i.value=a,!0;const s=ee(n)&&Bo(r)?Number(r)e,Pa=e=>Reflect.getPrototypeOf(e);function Rr(e,t,n=!1,r=!1){e=e.__v_raw;const a=ve(e),o=ve(t);n||(t!==o&&Ze(a,"get",t),Ze(a,"get",o));const{has:i}=Pa(a),s=r?qo:n?Go:ur;if(i.call(a,t))return s(e.get(t));if(i.call(a,o))return s(e.get(o));e!==a&&e.get(t)}function Nr(e,t=!1){const n=this.__v_raw,r=ve(n),a=ve(e);return t||(e!==a&&Ze(r,"has",e),Ze(r,"has",a)),e===a?n.has(e):n.has(e)||n.has(a)}function $r(e,t=!1){return e=e.__v_raw,!t&&Ze(ve(e),"iterate",mn),Reflect.get(e,"size",e)}function ji(e){e=ve(e);const t=ve(this);return Pa(t).has.call(t,e)||(t.add(e),Tt(t,"add",e,e)),this}function Bi(e,t){t=ve(t);const n=ve(this),{has:r,get:a}=Pa(n);let o=r.call(n,e);o||(e=ve(e),o=r.call(n,e));const i=a.call(n,e);return n.set(e,t),o?cr(t,i)&&Tt(n,"set",e,t):Tt(n,"add",e,t),this}function Ui(e){const t=ve(this),{has:n,get:r}=Pa(t);let a=n.call(t,e);a||(e=ve(e),a=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return a&&Tt(t,"delete",e,void 0),o}function Wi(){const e=ve(this),t=e.size!==0,n=e.clear();return t&&Tt(e,"clear",void 0,void 0),n}function Mr(e,t){return function(r,a){const o=this,i=o.__v_raw,s=ve(i),l=t?qo:e?Go:ur;return!e&&Ze(s,"iterate",mn),i.forEach((c,u)=>r.call(a,l(c),l(u),o))}}function Fr(e,t,n){return function(...r){const a=this.__v_raw,o=ve(a),i=Ln(o),s=e==="entries"||e===Symbol.iterator&&i,l=e==="keys"&&i,c=a[e](...r),u=n?qo:t?Go:ur;return!t&&Ze(o,"iterate",l?fo:mn),{next(){const{value:f,done:d}=c.next();return d?{value:f,done:d}:{value:s?[u(f[0]),u(f[1])]:u(f),done:d}},[Symbol.iterator](){return this}}}}function Dt(e){return function(...t){return e==="delete"?!1:this}}function Sf(){const e={get(o){return Rr(this,o)},get size(){return $r(this)},has:Nr,add:ji,set:Bi,delete:Ui,clear:Wi,forEach:Mr(!1,!1)},t={get(o){return Rr(this,o,!1,!0)},get size(){return $r(this)},has:Nr,add:ji,set:Bi,delete:Ui,clear:Wi,forEach:Mr(!1,!0)},n={get(o){return Rr(this,o,!0)},get size(){return $r(this,!0)},has(o){return Nr.call(this,o,!0)},add:Dt("add"),set:Dt("set"),delete:Dt("delete"),clear:Dt("clear"),forEach:Mr(!0,!1)},r={get(o){return Rr(this,o,!0,!0)},get size(){return $r(this,!0)},has(o){return Nr.call(this,o,!0)},add:Dt("add"),set:Dt("set"),delete:Dt("delete"),clear:Dt("clear"),forEach:Mr(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Fr(o,!1,!1),n[o]=Fr(o,!0,!1),t[o]=Fr(o,!1,!0),r[o]=Fr(o,!0,!0)}),[e,n,t,r]}const[Af,Pf,Of,Tf]=Sf();function Yo(e,t){const n=t?e?Tf:Of:e?Pf:Af;return(r,a,o)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?r:Reflect.get(he(n,a)&&a in r?n:r,a,o)}const Lf={get:Yo(!1,!1)},If={get:Yo(!1,!0)},Rf={get:Yo(!0,!1)},Wl=new WeakMap,Kl=new WeakMap,ql=new WeakMap,Nf=new WeakMap;function $f(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Mf(e){return e.__v_skip||!Object.isExtensible(e)?0:$f(Gu(e))}function kr(e){return Mn(e)?e:Vo(e,!1,Ul,Lf,Wl)}function Yl(e){return Vo(e,!1,Cf,If,Kl)}function _n(e){return Vo(e,!0,Ef,Rf,ql)}function Vo(e,t,n,r,a){if(!ke(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=a.get(e);if(o)return o;const i=Mf(e);if(i===0)return e;const s=new Proxy(e,i===2?r:n);return a.set(e,s),s}function In(e){return Mn(e)?In(e.__v_raw):!!(e&&e.__v_isReactive)}function Mn(e){return!!(e&&e.__v_isReadonly)}function la(e){return!!(e&&e.__v_isShallow)}function Vl(e){return In(e)||Mn(e)}function ve(e){const t=e&&e.__v_raw;return t?ve(t):e}function Gl(e){return ia(e,"__v_skip",!0),e}const ur=e=>ke(e)?kr(e):e,Go=e=>ke(e)?_n(e):e;function Xo(e){Yt&&ct&&(e=ve(e),Hl(e.dep||(e.dep=Uo())))}function Jo(e,t){e=ve(e);const n=e.dep;n&&mo(n)}function $e(e){return!!(e&&e.__v_isRef===!0)}function fe(e){return Xl(e,!1)}function Zo(e){return Xl(e,!0)}function Xl(e,t){return $e(e)?e:new Ff(e,t)}class Ff{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ve(t),this._value=n?t:ur(t)}get value(){return Xo(this),this._value}set value(t){const n=this.__v_isShallow||la(t)||Mn(t);t=n?t:ve(t),cr(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:ur(t),Jo(this))}}function Q(e){return $e(e)?e.value:e}const Df={get:(e,t,n)=>Q(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const a=e[t];return $e(a)&&!$e(n)?(a.value=n,!0):Reflect.set(e,t,n,r)}};function Jl(e){return In(e)?e:new Proxy(e,Df)}class zf{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Xo(this),()=>Jo(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Hf(e){return new zf(e)}function Oa(e){const t=ee(e)?new Array(e.length):{};for(const n in e)t[n]=Zl(e,n);return t}class jf{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return df(ve(this._object),this._key)}}class Bf{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Uf(e,t,n){return $e(e)?e:oe(e)?new Bf(e):ke(e)&&arguments.length>1?Zl(e,t,n):fe(e)}function Zl(e,t,n){const r=e[t];return $e(r)?r:new jf(e,t,n)}class Wf{constructor(t,n,r,a){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new Wo(t,()=>{this._dirty||(this._dirty=!0,Jo(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=r}get value(){const t=ve(this);return Xo(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Kf(e,t,n=!1){let r,a;const o=oe(e);return o?(r=e,a=dt):(r=e.get,a=e.set),new Wf(r,a,o||!a,n)}function Vt(e,t,n,r){let a;try{a=r?e(...r):e()}catch(o){Er(o,t,n)}return a}function ot(e,t,n,r){if(oe(e)){const o=Vt(e,t,n,r);return o&&Ll(o)&&o.catch(i=>{Er(i,t,n)}),o}const a=[];for(let o=0;o>>1;dr(Ue[r])yt&&Ue.splice(t,1)}function Gf(e){ee(e)?Rn.push(...e):(!At||!At.includes(e,e.allowRecurse?sn+1:sn))&&Rn.push(e),ec()}function Ki(e,t=fr?yt+1:0){for(;tdr(n)-dr(r)),sn=0;sne.id==null?1/0:e.id,Xf=(e,t)=>{const n=dr(e)-dr(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function tc(e){po=!1,fr=!0,Ue.sort(Xf);const t=dt;try{for(yt=0;ytge(g)?g.trim():g)),f&&(a=n.map(Zu))}let s,l=r[s=Ba(t)]||r[s=Ba(xt(t))];!l&&o&&(l=r[s=Ba(yn(t))]),l&&ot(l,e,6,a);const c=r[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,ot(c,e,6,a)}}function nc(e,t,n=!1){const r=t.emitsCache,a=r.get(e);if(a!==void 0)return a;const o=e.emits;let i={},s=!1;if(!oe(e)){const l=c=>{const u=nc(c,t,!0);u&&(s=!0,Re(i,u))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!o&&!s?(ke(e)&&r.set(e,null),null):(ee(o)?o.forEach(l=>i[l]=null):Re(i,o),ke(e)&&r.set(e,i),i)}function La(e,t){return!e||!wr(t)?!1:(t=t.slice(2).replace(/Once$/,""),he(e,t[0].toLowerCase()+t.slice(1))||he(e,yn(t))||he(e,t))}let He=null,rc=null;function ua(e){const t=He;return He=e,rc=e&&e.type.__scopeId||null,t}function ze(e,t=He,n){if(!t||e._n)return e;const r=(...a)=>{r._d&&rs(-1);const o=ua(t);let i;try{i=e(...a)}finally{ua(o),r._d&&rs(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Wa(e){const{type:t,vnode:n,proxy:r,withProxy:a,props:o,propsOptions:[i],slots:s,attrs:l,emit:c,render:u,renderCache:f,data:d,setupState:g,ctx:_,inheritAttrs:w}=e;let x,p;const v=ua(e);try{if(n.shapeFlag&4){const C=a||r;x=lt(u.call(C,C,f,o,g,d,_)),p=l}else{const C=t;x=lt(C.length>1?C(o,{attrs:l,slots:s,emit:c}):C(o,null)),p=t.props?l:Zf(l)}}catch(C){ar.length=0,Er(C,e,1),x=ne(tt)}let k=x;if(p&&w!==!1){const C=Object.keys(p),{shapeFlag:N}=k;C.length&&N&7&&(i&&C.some(zo)&&(p=Qf(p,i)),k=Zt(k,p))}return n.dirs&&(k=Zt(k),k.dirs=k.dirs?k.dirs.concat(n.dirs):n.dirs),n.transition&&(k.transition=n.transition),x=k,ua(v),x}const Zf=e=>{let t;for(const n in e)(n==="class"||n==="style"||wr(n))&&((t||(t={}))[n]=e[n]);return t},Qf=(e,t)=>{const n={};for(const r in e)(!zo(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function ed(e,t,n){const{props:r,children:a,component:o}=e,{props:i,children:s,patchFlag:l}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return r?qi(r,i,c):!!i;if(l&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function ac(e,t){t&&t.pendingBranch?ee(e)?t.effects.push(...e):t.effects.push(e):Gf(e)}function oc(e,t){return ei(e,null,t)}const Dr={};function it(e,t,n){return ei(e,t,n)}function ei(e,t,{immediate:n,deep:r,flush:a,onTrack:o,onTrigger:i}=Ee){var s;const l=Ml()===((s=Ne)==null?void 0:s.scope)?Ne:null;let c,u=!1,f=!1;if($e(e)?(c=()=>e.value,u=la(e)):In(e)?(c=()=>e,r=!0):ee(e)?(f=!0,u=e.some(C=>In(C)||la(C)),c=()=>e.map(C=>{if($e(C))return C.value;if(In(C))return un(C);if(oe(C))return Vt(C,l,2)})):oe(e)?t?c=()=>Vt(e,l,2):c=()=>{if(!(l&&l.isUnmounted))return d&&d(),ot(e,l,3,[g])}:c=dt,t&&r){const C=c;c=()=>un(C())}let d,g=C=>{d=v.onStop=()=>{Vt(C,l,4)}},_;if(zn)if(g=dt,t?n&&ot(t,l,3,[c(),f?[]:void 0,g]):c(),a==="sync"){const C=Xd();_=C.__watcherHandles||(C.__watcherHandles=[])}else return dt;let w=f?new Array(e.length).fill(Dr):Dr;const x=()=>{if(v.active)if(t){const C=v.run();(r||u||(f?C.some((N,q)=>cr(N,w[q])):cr(C,w)))&&(d&&d(),ot(t,l,3,[C,w===Dr?void 0:f&&w[0]===Dr?[]:w,g]),w=C)}else v.run()};x.allowRecurse=!!t;let p;a==="sync"?p=x:a==="post"?p=()=>Xe(x,l&&l.suspense):(x.pre=!0,l&&(x.id=l.uid),p=()=>Ta(x));const v=new Wo(c,p);t?n?x():w=v.run():a==="post"?Xe(v.run.bind(v),l&&l.suspense):v.run();const k=()=>{v.stop(),l&&l.scope&&Ho(l.scope.effects,v)};return _&&_.push(k),k}function rd(e,t,n){const r=this.proxy,a=ge(e)?e.includes(".")?ic(r,e):()=>r[e]:e.bind(r,r);let o;oe(t)?o=t:(o=t.handler,n=t);const i=Ne;Dn(this);const s=ei(a,o.bind(r),n);return i?Dn(i):hn(),s}function ic(e,t){const n=t.split(".");return()=>{let r=e;for(let a=0;a{un(n,t)});else if(Rl(e))for(const n in e)un(e[n],t);return e}function fa(e,t){const n=He;if(n===null)return e;const r=$a(n)||n.proxy,a=e.dirs||(e.dirs=[]);for(let o=0;o{e.isMounted=!0}),Ar(()=>{e.isUnmounting=!0}),e}const rt=[Function,Array],sc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:rt,onEnter:rt,onAfterEnter:rt,onEnterCancelled:rt,onBeforeLeave:rt,onLeave:rt,onAfterLeave:rt,onLeaveCancelled:rt,onBeforeAppear:rt,onAppear:rt,onAfterAppear:rt,onAppearCancelled:rt},od={name:"BaseTransition",props:sc,setup(e,{slots:t}){const n=ai(),r=ad();let a;return()=>{const o=t.default&&cc(t.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const w of o)if(w.type!==tt){i=w;break}}const s=ve(e),{mode:l}=s;if(r.isLeaving)return Ka(i);const c=Yi(i);if(!c)return Ka(i);const u=ho(c,s,r,n);vo(c,u);const f=n.subTree,d=f&&Yi(f);let g=!1;const{getTransitionKey:_}=c.type;if(_){const w=_();a===void 0?a=w:w!==a&&(a=w,g=!0)}if(d&&d.type!==tt&&(!ln(c,d)||g)){const w=ho(d,s,r,n);if(vo(d,w),l==="out-in")return r.isLeaving=!0,w.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},Ka(i);l==="in-out"&&c.type!==tt&&(w.delayLeave=(x,p,v)=>{const k=lc(r,d);k[String(d.key)]=d,x._leaveCb=()=>{p(),x._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=v})}return i}}},id=od;function lc(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ho(e,t,n,r){const{appear:a,mode:o,persisted:i=!1,onBeforeEnter:s,onEnter:l,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:d,onAfterLeave:g,onLeaveCancelled:_,onBeforeAppear:w,onAppear:x,onAfterAppear:p,onAppearCancelled:v}=t,k=String(e.key),C=lc(n,e),N=(b,F)=>{b&&ot(b,r,9,F)},q=(b,F)=>{const H=F[1];N(b,F),ee(b)?b.every(X=>X.length<=1)&&H():b.length<=1&&H()},L={mode:o,persisted:i,beforeEnter(b){let F=s;if(!n.isMounted)if(a)F=w||s;else return;b._leaveCb&&b._leaveCb(!0);const H=C[k];H&&ln(e,H)&&H.el._leaveCb&&H.el._leaveCb(),N(F,[b])},enter(b){let F=l,H=c,X=u;if(!n.isMounted)if(a)F=x||l,H=p||c,X=v||u;else return;let P=!1;const R=b._enterCb=$=>{P||(P=!0,$?N(X,[b]):N(H,[b]),L.delayedLeave&&L.delayedLeave(),b._enterCb=void 0)};F?q(F,[b,R]):R()},leave(b,F){const H=String(e.key);if(b._enterCb&&b._enterCb(!0),n.isUnmounting)return F();N(f,[b]);let X=!1;const P=b._leaveCb=R=>{X||(X=!0,F(),R?N(_,[b]):N(g,[b]),b._leaveCb=void 0,C[H]===e&&delete C[H])};C[H]=e,d?q(d,[b,P]):P()},clone(b){return ho(b,t,n,r)}};return L}function Ka(e){if(Sr(e))return e=Zt(e),e.children=null,e}function Yi(e){return Sr(e)?e.children?e.children[0]:void 0:e}function vo(e,t){e.shapeFlag&6&&e.component?vo(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function cc(e,t=!1,n){let r=[],a=0;for(let o=0;o1)for(let o=0;oRe({name:e.name},t,{setup:e}))():e}const Nn=e=>!!e.type.__asyncLoader;function zr(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:a=200,timeout:o,suspensible:i=!0,onError:s}=e;let l=null,c,u=0;const f=()=>(u++,l=null,d()),d=()=>{let g;return l||(g=l=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),s)return new Promise((w,x)=>{s(_,()=>w(f()),()=>x(_),u+1)});throw _}).then(_=>g!==l&&l?l:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),c=_,_)))};return de({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return c},setup(){const g=Ne;if(c)return()=>qa(c,g);const _=v=>{l=null,Er(v,g,13,!r)};if(i&&g.suspense||zn)return d().then(v=>()=>qa(v,g)).catch(v=>(_(v),()=>r?ne(r,{error:v}):null));const w=fe(!1),x=fe(),p=fe(!!a);return a&&setTimeout(()=>{p.value=!1},a),o!=null&&setTimeout(()=>{if(!w.value&&!x.value){const v=new Error(`Async component timed out after ${o}ms.`);_(v),x.value=v}},o),d().then(()=>{w.value=!0,g.parent&&Sr(g.parent.vnode)&&Ta(g.parent.update)}).catch(v=>{_(v),x.value=v}),()=>{if(w.value&&c)return qa(c,g);if(x.value&&r)return ne(r,{error:x.value});if(n&&!p.value)return ne(n)}}})}function qa(e,t){const{ref:n,props:r,children:a,ce:o}=t.vnode,i=ne(e,r,a);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const Sr=e=>e.type.__isKeepAlive;function sd(e,t){uc(e,"a",t)}function ld(e,t){uc(e,"da",t)}function uc(e,t,n=Ne){const r=e.__wdc||(e.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(Ia(t,r,n),n){let a=n.parent;for(;a&&a.parent;)Sr(a.parent.vnode)&&cd(r,t,n,a),a=a.parent}}function cd(e,t,n,r){const a=Ia(t,e,r,!0);Ra(()=>{Ho(r[t],a)},n)}function Ia(e,t,n=Ne,r=!1){if(n){const a=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;Un(),Dn(n);const s=ot(t,n,e,i);return hn(),Wn(),s});return r?a.unshift(o):a.push(o),o}}const Nt=e=>(t,n=Ne)=>(!zn||e==="sp")&&Ia(e,(...r)=>t(...r),n),fc=Nt("bm"),Ye=Nt("m"),ud=Nt("bu"),fd=Nt("u"),Ar=Nt("bum"),Ra=Nt("um"),dd=Nt("sp"),md=Nt("rtg"),pd=Nt("rtc");function hd(e,t=Ne){Ia("ec",e,t)}const dc="components";function wt(e,t){return gd(dc,e,!0,t)||e}const vd=Symbol.for("v-ndc");function gd(e,t,n=!0,r=!1){const a=He||Ne;if(a){const o=a.type;if(e===dc){const s=Yd(o,!1);if(s&&(s===t||s===xt(t)||s===Aa(xt(t))))return o}const i=Vi(a[e]||o[e],t)||Vi(a.appContext[e],t);return!i&&r?o:i}}function Vi(e,t){return e&&(e[t]||e[xt(t)]||e[Aa(xt(t))])}function Jt(e,t,n,r){let a;const o=n&&n[r];if(ee(e)||ge(e)){a=new Array(e.length);for(let i=0,s=e.length;it(i,s,void 0,o&&o[s]));else{const i=Object.keys(e);a=new Array(i.length);for(let s=0,l=i.length;sha(t)?!(t.type===tt||t.type===_e&&!mc(t.children)):!0)?e:null}const go=e=>e?Ec(e)?$a(e)||e.proxy:go(e.parent):null,nr=Re(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>go(e.parent),$root:e=>go(e.root),$emit:e=>e.emit,$options:e=>ti(e),$forceUpdate:e=>e.f||(e.f=()=>Ta(e.update)),$nextTick:e=>e.n||(e.n=Cr.bind(e.proxy)),$watch:e=>rd.bind(e)}),Ya=(e,t)=>e!==Ee&&!e.__isScriptSetup&&he(e,t),bd={get({_:e},t){const{ctx:n,setupState:r,data:a,props:o,accessCache:i,type:s,appContext:l}=e;let c;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return a[t];case 4:return n[t];case 3:return o[t]}else{if(Ya(r,t))return i[t]=1,r[t];if(a!==Ee&&he(a,t))return i[t]=2,a[t];if((c=e.propsOptions[0])&&he(c,t))return i[t]=3,o[t];if(n!==Ee&&he(n,t))return i[t]=4,n[t];bo&&(i[t]=0)}}const u=nr[t];let f,d;if(u)return t==="$attrs"&&Ze(e,"get",t),u(e);if((f=s.__cssModules)&&(f=f[t]))return f;if(n!==Ee&&he(n,t))return i[t]=4,n[t];if(d=l.config.globalProperties,he(d,t))return d[t]},set({_:e},t,n){const{data:r,setupState:a,ctx:o}=e;return Ya(a,t)?(a[t]=n,!0):r!==Ee&&he(r,t)?(r[t]=n,!0):he(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:a,propsOptions:o}},i){let s;return!!n[i]||e!==Ee&&he(e,i)||Ya(t,i)||(s=o[0])&&he(s,i)||he(r,i)||he(nr,i)||he(a.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:he(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Gi(e){return ee(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let bo=!0;function yd(e){const t=ti(e),n=e.proxy,r=e.ctx;bo=!1,t.beforeCreate&&Xi(t.beforeCreate,e,"bc");const{data:a,computed:o,methods:i,watch:s,provide:l,inject:c,created:u,beforeMount:f,mounted:d,beforeUpdate:g,updated:_,activated:w,deactivated:x,beforeDestroy:p,beforeUnmount:v,destroyed:k,unmounted:C,render:N,renderTracked:q,renderTriggered:L,errorCaptured:b,serverPrefetch:F,expose:H,inheritAttrs:X,components:P,directives:R,filters:$}=t;if(c&&_d(c,r,null),i)for(const ae in i){const ie=i[ae];oe(ie)&&(r[ae]=ie.bind(n))}if(a){const ae=a.call(n,n);ke(ae)&&(e.data=kr(ae))}if(bo=!0,o)for(const ae in o){const ie=o[ae],je=oe(ie)?ie.bind(n,n):oe(ie.get)?ie.get.bind(n,n):dt,De=!oe(ie)&&oe(ie.set)?ie.set.bind(n):dt,Ve=M({get:je,set:De});Object.defineProperty(r,ae,{enumerable:!0,configurable:!0,get:()=>Ve.value,set:Be=>Ve.value=Be})}if(s)for(const ae in s)pc(s[ae],r,n,ae);if(l){const ae=oe(l)?l.call(n):l;Reflect.ownKeys(ae).forEach(ie=>{pn(ie,ae[ie])})}u&&Xi(u,e,"c");function K(ae,ie){ee(ie)?ie.forEach(je=>ae(je.bind(n))):ie&&ae(ie.bind(n))}if(K(fc,f),K(Ye,d),K(ud,g),K(fd,_),K(sd,w),K(ld,x),K(hd,b),K(pd,q),K(md,L),K(Ar,v),K(Ra,C),K(dd,F),ee(H))if(H.length){const ae=e.exposed||(e.exposed={});H.forEach(ie=>{Object.defineProperty(ae,ie,{get:()=>n[ie],set:je=>n[ie]=je})})}else e.exposed||(e.exposed={});N&&e.render===dt&&(e.render=N),X!=null&&(e.inheritAttrs=X),P&&(e.components=P),R&&(e.directives=R)}function _d(e,t,n=dt){ee(e)&&(e=yo(e));for(const r in e){const a=e[r];let o;ke(a)?"default"in a?o=Ie(a.from||r,a.default,!0):o=Ie(a.from||r):o=Ie(a),$e(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function Xi(e,t,n){ot(ee(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function pc(e,t,n,r){const a=r.includes(".")?ic(n,r):()=>n[r];if(ge(e)){const o=t[e];oe(o)&&it(a,o)}else if(oe(e))it(a,e.bind(n));else if(ke(e))if(ee(e))e.forEach(o=>pc(o,t,n,r));else{const o=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(o)&&it(a,o,e)}}function ti(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:a,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,s=o.get(t);let l;return s?l=s:!a.length&&!n&&!r?l=t:(l={},a.length&&a.forEach(c=>da(l,c,i,!0)),da(l,t,i)),ke(t)&&o.set(t,l),l}function da(e,t,n,r=!1){const{mixins:a,extends:o}=t;o&&da(e,o,n,!0),a&&a.forEach(i=>da(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const s=wd[i]||n&&n[i];e[i]=s?s(e[i],t[i]):t[i]}return e}const wd={data:Ji,props:Zi,emits:Zi,methods:Qn,computed:Qn,beforeCreate:We,created:We,beforeMount:We,mounted:We,beforeUpdate:We,updated:We,beforeDestroy:We,beforeUnmount:We,destroyed:We,unmounted:We,activated:We,deactivated:We,errorCaptured:We,serverPrefetch:We,components:Qn,directives:Qn,watch:kd,provide:Ji,inject:xd};function Ji(e,t){return t?e?function(){return Re(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function xd(e,t){return Qn(yo(e),yo(t))}function yo(e){if(ee(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function Sd(e,t,n,r=!1){const a={},o={};ia(o,Na,1),e.propsDefaults=Object.create(null),vc(e,t,a,o);for(const i in e.propsOptions[0])i in a||(a[i]=void 0);n?e.props=r?a:Yl(a):e.type.props?e.props=a:e.props=o,e.attrs=o}function Ad(e,t,n,r){const{props:a,attrs:o,vnode:{patchFlag:i}}=e,s=ve(a),[l]=e.propsOptions;let c=!1;if((r||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{l=!0;const[d,g]=gc(f,t,!0);Re(i,d),g&&s.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!l)return ke(e)&&r.set(e,Tn),Tn;if(ee(o))for(let u=0;u-1,g[1]=w<0||_-1||he(g,"default"))&&s.push(f)}}}const c=[i,s];return ke(e)&&r.set(e,c),c}function Qi(e){return e[0]!=="$"}function es(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ts(e,t){return es(e)===es(t)}function ns(e,t){return ee(t)?t.findIndex(n=>ts(n,e)):oe(t)&&ts(t,e)?0:-1}const bc=e=>e[0]==="_"||e==="$stable",ni=e=>ee(e)?e.map(lt):[lt(e)],Pd=(e,t,n)=>{if(t._n)return t;const r=ze((...a)=>ni(t(...a)),n);return r._c=!1,r},yc=(e,t,n)=>{const r=e._ctx;for(const a in e){if(bc(a))continue;const o=e[a];if(oe(o))t[a]=Pd(a,o,r);else if(o!=null){const i=ni(o);t[a]=()=>i}}},_c=(e,t)=>{const n=ni(t);e.slots.default=()=>n},Od=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=ve(t),ia(t,"_",n)):yc(t,e.slots={})}else e.slots={},t&&_c(e,t);ia(e.slots,Na,1)},Td=(e,t,n)=>{const{vnode:r,slots:a}=e;let o=!0,i=Ee;if(r.shapeFlag&32){const s=t._;s?n&&s===1?o=!1:(Re(a,t),!n&&s===1&&delete a._):(o=!t.$stable,yc(t,a)),i=t}else t&&(_c(e,t),i={default:1});if(o)for(const s in a)!bc(s)&&!(s in i)&&delete a[s]};function pa(e,t,n,r,a=!1){if(ee(e)){e.forEach((d,g)=>pa(d,t&&(ee(t)?t[g]:t),n,r,a));return}if(Nn(r)&&!a)return;const o=r.shapeFlag&4?$a(r.component)||r.component.proxy:r.el,i=a?null:o,{i:s,r:l}=e,c=t&&t.r,u=s.refs===Ee?s.refs={}:s.refs,f=s.setupState;if(c!=null&&c!==l&&(ge(c)?(u[c]=null,he(f,c)&&(f[c]=null)):$e(c)&&(c.value=null)),oe(l))Vt(l,s,12,[i,u]);else{const d=ge(l),g=$e(l);if(d||g){const _=()=>{if(e.f){const w=d?he(f,l)?f[l]:u[l]:l.value;a?ee(w)&&Ho(w,o):ee(w)?w.includes(o)||w.push(o):d?(u[l]=[o],he(f,l)&&(f[l]=u[l])):(l.value=[o],e.k&&(u[e.k]=l.value))}else d?(u[l]=i,he(f,l)&&(f[l]=i)):g&&(l.value=i,e.k&&(u[e.k]=i))};i?(_.id=-1,Xe(_,n)):_()}}}let zt=!1;const Hr=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",jr=e=>e.nodeType===8;function Ld(e){const{mt:t,p:n,o:{patchProp:r,createText:a,nextSibling:o,parentNode:i,remove:s,insert:l,createComment:c}}=e,u=(p,v)=>{if(!v.hasChildNodes()){n(null,p,v),ca(),v._vnode=p;return}zt=!1,f(v.firstChild,p,null,null,null),ca(),v._vnode=p,zt&&console.error("Hydration completed but contains mismatches.")},f=(p,v,k,C,N,q=!1)=>{const L=jr(p)&&p.data==="[",b=()=>w(p,v,k,C,N,L),{type:F,ref:H,shapeFlag:X,patchFlag:P}=v;let R=p.nodeType;v.el=p,P===-2&&(q=!1,v.dynamicChildren=null);let $=null;switch(F){case Fn:R!==3?v.children===""?(l(v.el=a(""),i(p),p),$=p):$=b():(p.data!==v.children&&(zt=!0,p.data=v.children),$=o(p));break;case tt:R!==8||L?$=b():$=o(p);break;case rr:if(L&&(p=o(p),R=p.nodeType),R===1||R===3){$=p;const se=!v.children.length;for(let K=0;K{q=q||!!v.dynamicChildren;const{type:L,props:b,patchFlag:F,shapeFlag:H,dirs:X}=v,P=L==="input"&&X||L==="option";if(P||F!==-1){if(X&&bt(v,null,k,"created"),b)if(P||!q||F&48)for(const $ in b)(P&&$.endsWith("value")||wr($)&&!tr($))&&r(p,$,null,b[$],!1,void 0,k);else b.onClick&&r(p,"onClick",null,b.onClick,!1,void 0,k);let R;if((R=b&&b.onVnodeBeforeMount)&&at(R,k,v),X&&bt(v,null,k,"beforeMount"),((R=b&&b.onVnodeMounted)||X)&&ac(()=>{R&&at(R,k,v),X&&bt(v,null,k,"mounted")},C),H&16&&!(b&&(b.innerHTML||b.textContent))){let $=g(p.firstChild,v,p,k,C,N,q);for(;$;){zt=!0;const se=$;$=$.nextSibling,s(se)}}else H&8&&p.textContent!==v.children&&(zt=!0,p.textContent=v.children)}return p.nextSibling},g=(p,v,k,C,N,q,L)=>{L=L||!!v.dynamicChildren;const b=v.children,F=b.length;for(let H=0;H{const{slotScopeIds:L}=v;L&&(N=N?N.concat(L):L);const b=i(p),F=g(o(p),v,b,k,C,N,q);return F&&jr(F)&&F.data==="]"?o(v.anchor=F):(zt=!0,l(v.anchor=c("]"),b,F),F)},w=(p,v,k,C,N,q)=>{if(zt=!0,v.el=null,q){const F=x(p);for(;;){const H=o(p);if(H&&H!==F)s(H);else break}}const L=o(p),b=i(p);return s(p),n(null,v,b,L,k,C,Hr(b),N),L},x=p=>{let v=0;for(;p;)if(p=o(p),p&&jr(p)&&(p.data==="["&&v++,p.data==="]")){if(v===0)return o(p);v--}return p};return[u,f]}const Xe=ac;function Id(e){return Rd(e,Ld)}function Rd(e,t){const n=co();n.__VUE__=!0;const{insert:r,remove:a,patchProp:o,createElement:i,createText:s,createComment:l,setText:c,setElementText:u,parentNode:f,nextSibling:d,setScopeId:g=dt,insertStaticContent:_}=e,w=(m,h,y,E=null,A=null,O=null,j=!1,I=null,z=!!h.dynamicChildren)=>{if(m===h)return;m&&!ln(m,h)&&(E=S(m),Be(m,A,O,!0),m=null),h.patchFlag===-2&&(z=!1,h.dynamicChildren=null);const{type:T,ref:J,shapeFlag:Y}=h;switch(T){case Fn:x(m,h,y,E);break;case tt:p(m,h,y,E);break;case rr:m==null&&v(h,y,E,j);break;case _e:P(m,h,y,E,A,O,j,I,z);break;default:Y&1?N(m,h,y,E,A,O,j,I,z):Y&6?R(m,h,y,E,A,O,j,I,z):(Y&64||Y&128)&&T.process(m,h,y,E,A,O,j,I,z,D)}J!=null&&A&&pa(J,m&&m.ref,O,h||m,!h)},x=(m,h,y,E)=>{if(m==null)r(h.el=s(h.children),y,E);else{const A=h.el=m.el;h.children!==m.children&&c(A,h.children)}},p=(m,h,y,E)=>{m==null?r(h.el=l(h.children||""),y,E):h.el=m.el},v=(m,h,y,E)=>{[m.el,m.anchor]=_(m.children,h,y,E,m.el,m.anchor)},k=({el:m,anchor:h},y,E)=>{let A;for(;m&&m!==h;)A=d(m),r(m,y,E),m=A;r(h,y,E)},C=({el:m,anchor:h})=>{let y;for(;m&&m!==h;)y=d(m),a(m),m=y;a(h)},N=(m,h,y,E,A,O,j,I,z)=>{j=j||h.type==="svg",m==null?q(h,y,E,A,O,j,I,z):F(m,h,A,O,j,I,z)},q=(m,h,y,E,A,O,j,I)=>{let z,T;const{type:J,props:Y,shapeFlag:Z,transition:re,dirs:ce}=m;if(z=m.el=i(m.type,O,Y&&Y.is,Y),Z&8?u(z,m.children):Z&16&&b(m.children,z,null,E,A,O&&J!=="foreignObject",j,I),ce&&bt(m,null,E,"created"),L(z,m,m.scopeId,j,E),Y){for(const ye in Y)ye!=="value"&&!tr(ye)&&o(z,ye,null,Y[ye],O,m.children,E,A,Fe);"value"in Y&&o(z,"value",null,Y.value),(T=Y.onVnodeBeforeMount)&&at(T,E,m)}ce&&bt(m,null,E,"beforeMount");const we=(!A||A&&!A.pendingBranch)&&re&&!re.persisted;we&&re.beforeEnter(z),r(z,h,y),((T=Y&&Y.onVnodeMounted)||we||ce)&&Xe(()=>{T&&at(T,E,m),we&&re.enter(z),ce&&bt(m,null,E,"mounted")},A)},L=(m,h,y,E,A)=>{if(y&&g(m,y),E)for(let O=0;O{for(let T=z;T{const I=h.el=m.el;let{patchFlag:z,dynamicChildren:T,dirs:J}=h;z|=m.patchFlag&16;const Y=m.props||Ee,Z=h.props||Ee;let re;y&&nn(y,!1),(re=Z.onVnodeBeforeUpdate)&&at(re,y,h,m),J&&bt(h,m,y,"beforeUpdate"),y&&nn(y,!0);const ce=A&&h.type!=="foreignObject";if(T?H(m.dynamicChildren,T,I,y,E,ce,O):j||ie(m,h,I,null,y,E,ce,O,!1),z>0){if(z&16)X(I,h,Y,Z,y,E,A);else if(z&2&&Y.class!==Z.class&&o(I,"class",null,Z.class,A),z&4&&o(I,"style",Y.style,Z.style,A),z&8){const we=h.dynamicProps;for(let ye=0;ye{re&&at(re,y,h,m),J&&bt(h,m,y,"updated")},E)},H=(m,h,y,E,A,O,j)=>{for(let I=0;I{if(y!==E){if(y!==Ee)for(const I in y)!tr(I)&&!(I in E)&&o(m,I,y[I],null,j,h.children,A,O,Fe);for(const I in E){if(tr(I))continue;const z=E[I],T=y[I];z!==T&&I!=="value"&&o(m,I,T,z,j,h.children,A,O,Fe)}"value"in E&&o(m,"value",y.value,E.value)}},P=(m,h,y,E,A,O,j,I,z)=>{const T=h.el=m?m.el:s(""),J=h.anchor=m?m.anchor:s("");let{patchFlag:Y,dynamicChildren:Z,slotScopeIds:re}=h;re&&(I=I?I.concat(re):re),m==null?(r(T,y,E),r(J,y,E),b(h.children,y,J,A,O,j,I,z)):Y>0&&Y&64&&Z&&m.dynamicChildren?(H(m.dynamicChildren,Z,y,A,O,j,I),(h.key!=null||A&&h===A.subTree)&&wc(m,h,!0)):ie(m,h,y,J,A,O,j,I,z)},R=(m,h,y,E,A,O,j,I,z)=>{h.slotScopeIds=I,m==null?h.shapeFlag&512?A.ctx.activate(h,y,E,j,z):$(h,y,E,A,O,j,z):se(m,h,z)},$=(m,h,y,E,A,O,j)=>{const I=m.component=Bd(m,E,A);if(Sr(m)&&(I.ctx.renderer=D),Ud(I),I.asyncDep){if(A&&A.registerDep(I,K),!m.el){const z=I.subTree=ne(tt);p(null,z,h,y)}return}K(I,m,h,y,A,O,j)},se=(m,h,y)=>{const E=h.component=m.component;if(ed(m,h,y))if(E.asyncDep&&!E.asyncResolved){ae(E,h,y);return}else E.next=h,Vf(E.update),E.update();else h.el=m.el,E.vnode=h},K=(m,h,y,E,A,O,j)=>{const I=()=>{if(m.isMounted){let{next:J,bu:Y,u:Z,parent:re,vnode:ce}=m,we=J,ye;nn(m,!1),J?(J.el=ce.el,ae(m,J,j)):J=ce,Y&&Ua(Y),(ye=J.props&&J.props.onVnodeBeforeUpdate)&&at(ye,re,J,ce),nn(m,!0);const Te=Wa(m),st=m.subTree;m.subTree=Te,w(st,Te,f(st.el),S(st),m,A,O),J.el=Te.el,we===null&&td(m,Te.el),Z&&Xe(Z,A),(ye=J.props&&J.props.onVnodeUpdated)&&Xe(()=>at(ye,re,J,ce),A)}else{let J;const{el:Y,props:Z}=h,{bm:re,m:ce,parent:we}=m,ye=Nn(h);if(nn(m,!1),re&&Ua(re),!ye&&(J=Z&&Z.onVnodeBeforeMount)&&at(J,we,h),nn(m,!0),Y&&me){const Te=()=>{m.subTree=Wa(m),me(Y,m.subTree,m,A,null)};ye?h.type.__asyncLoader().then(()=>!m.isUnmounted&&Te()):Te()}else{const Te=m.subTree=Wa(m);w(null,Te,y,E,m,A,O),h.el=Te.el}if(ce&&Xe(ce,A),!ye&&(J=Z&&Z.onVnodeMounted)){const Te=h;Xe(()=>at(J,we,Te),A)}(h.shapeFlag&256||we&&Nn(we.vnode)&&we.vnode.shapeFlag&256)&&m.a&&Xe(m.a,A),m.isMounted=!0,h=y=E=null}},z=m.effect=new Wo(I,()=>Ta(T),m.scope),T=m.update=()=>z.run();T.id=m.uid,nn(m,!0),T()},ae=(m,h,y)=>{h.component=m;const E=m.vnode.props;m.vnode=h,m.next=null,Ad(m,h.props,E,y),Td(m,h.children,y),Un(),Ki(),Wn()},ie=(m,h,y,E,A,O,j,I,z=!1)=>{const T=m&&m.children,J=m?m.shapeFlag:0,Y=h.children,{patchFlag:Z,shapeFlag:re}=h;if(Z>0){if(Z&128){De(T,Y,y,E,A,O,j,I,z);return}else if(Z&256){je(T,Y,y,E,A,O,j,I,z);return}}re&8?(J&16&&Fe(T,A,O),Y!==T&&u(y,Y)):J&16?re&16?De(T,Y,y,E,A,O,j,I,z):Fe(T,A,O,!0):(J&8&&u(y,""),re&16&&b(Y,y,E,A,O,j,I,z))},je=(m,h,y,E,A,O,j,I,z)=>{m=m||Tn,h=h||Tn;const T=m.length,J=h.length,Y=Math.min(T,J);let Z;for(Z=0;ZJ?Fe(m,A,O,!0,!1,Y):b(h,y,E,A,O,j,I,z,Y)},De=(m,h,y,E,A,O,j,I,z)=>{let T=0;const J=h.length;let Y=m.length-1,Z=J-1;for(;T<=Y&&T<=Z;){const re=m[T],ce=h[T]=z?Ut(h[T]):lt(h[T]);if(ln(re,ce))w(re,ce,y,null,A,O,j,I,z);else break;T++}for(;T<=Y&&T<=Z;){const re=m[Y],ce=h[Z]=z?Ut(h[Z]):lt(h[Z]);if(ln(re,ce))w(re,ce,y,null,A,O,j,I,z);else break;Y--,Z--}if(T>Y){if(T<=Z){const re=Z+1,ce=reZ)for(;T<=Y;)Be(m[T],A,O,!0),T++;else{const re=T,ce=T,we=new Map;for(T=ce;T<=Z;T++){const Qe=h[T]=z?Ut(h[T]):lt(h[T]);Qe.key!=null&&we.set(Qe.key,T)}let ye,Te=0;const st=Z-ce+1;let kn=!1,Ri=0;const Yn=new Array(st);for(T=0;T=st){Be(Qe,A,O,!0);continue}let gt;if(Qe.key!=null)gt=we.get(Qe.key);else for(ye=ce;ye<=Z;ye++)if(Yn[ye-ce]===0&&ln(Qe,h[ye])){gt=ye;break}gt===void 0?Be(Qe,A,O,!0):(Yn[gt-ce]=T+1,gt>=Ri?Ri=gt:kn=!0,w(Qe,h[gt],y,null,A,O,j,I,z),Te++)}const Ni=kn?Nd(Yn):Tn;for(ye=Ni.length-1,T=st-1;T>=0;T--){const Qe=ce+T,gt=h[Qe],$i=Qe+1{const{el:O,type:j,transition:I,children:z,shapeFlag:T}=m;if(T&6){Ve(m.component.subTree,h,y,E);return}if(T&128){m.suspense.move(h,y,E);return}if(T&64){j.move(m,h,y,D);return}if(j===_e){r(O,h,y);for(let Y=0;YI.enter(O),A);else{const{leave:Y,delayLeave:Z,afterLeave:re}=I,ce=()=>r(O,h,y),we=()=>{Y(O,()=>{ce(),re&&re()})};Z?Z(O,ce,we):we()}else r(O,h,y)},Be=(m,h,y,E=!1,A=!1)=>{const{type:O,props:j,ref:I,children:z,dynamicChildren:T,shapeFlag:J,patchFlag:Y,dirs:Z}=m;if(I!=null&&pa(I,null,y,m,!0),J&256){h.ctx.deactivate(m);return}const re=J&1&&Z,ce=!Nn(m);let we;if(ce&&(we=j&&j.onVnodeBeforeUnmount)&&at(we,h,m),J&6)vt(m.component,y,E);else{if(J&128){m.suspense.unmount(y,E);return}re&&bt(m,null,h,"beforeUnmount"),J&64?m.type.remove(m,h,y,A,D,E):T&&(O!==_e||Y>0&&Y&64)?Fe(T,h,y,!1,!0):(O===_e&&Y&384||!A&&J&16)&&Fe(z,h,y),E&&Mt(m)}(ce&&(we=j&&j.onVnodeUnmounted)||re)&&Xe(()=>{we&&at(we,h,m),re&&bt(m,null,h,"unmounted")},y)},Mt=m=>{const{type:h,el:y,anchor:E,transition:A}=m;if(h===_e){Ft(y,E);return}if(h===rr){C(m);return}const O=()=>{a(y),A&&!A.persisted&&A.afterLeave&&A.afterLeave()};if(m.shapeFlag&1&&A&&!A.persisted){const{leave:j,delayLeave:I}=A,z=()=>j(y,O);I?I(m.el,O,z):z()}else O()},Ft=(m,h)=>{let y;for(;m!==h;)y=d(m),a(m),m=y;a(h)},vt=(m,h,y)=>{const{bum:E,scope:A,update:O,subTree:j,um:I}=m;E&&Ua(E),A.stop(),O&&(O.active=!1,Be(j,m,h,y)),I&&Xe(I,h),Xe(()=>{m.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&m.asyncDep&&!m.asyncResolved&&m.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},Fe=(m,h,y,E=!1,A=!1,O=0)=>{for(let j=O;jm.shapeFlag&6?S(m.component.subTree):m.shapeFlag&128?m.suspense.next():d(m.anchor||m.el),U=(m,h,y)=>{m==null?h._vnode&&Be(h._vnode,null,null,!0):w(h._vnode||null,m,h,null,null,null,y),Ki(),ca(),h._vnode=m},D={p:w,um:Be,m:Ve,r:Mt,mt:$,mc:b,pc:ie,pbc:H,n:S,o:e};let G,me;return t&&([G,me]=t(D)),{render:U,hydrate:G,createApp:Cd(U,G)}}function nn({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function wc(e,t,n=!1){const r=e.children,a=t.children;if(ee(r)&&ee(a))for(let o=0;o>1,e[n[s]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}const $d=e=>e.__isTeleport,_e=Symbol.for("v-fgt"),Fn=Symbol.for("v-txt"),tt=Symbol.for("v-cmt"),rr=Symbol.for("v-stc"),ar=[];let ut=null;function B(e=!1){ar.push(ut=e?null:[])}function Md(){ar.pop(),ut=ar[ar.length-1]||null}let mr=1;function rs(e){mr+=e}function xc(e){return e.dynamicChildren=mr>0?ut||Tn:null,Md(),mr>0&&ut&&ut.push(e),e}function te(e,t,n,r,a,o){return xc(le(e,t,n,r,a,o,!0))}function Le(e,t,n,r,a){return xc(ne(e,t,n,r,a,!0))}function ha(e){return e?e.__v_isVNode===!0:!1}function ln(e,t){return e.type===t.type&&e.key===t.key}const Na="__vInternal",kc=({key:e})=>e??null,na=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ge(e)||$e(e)||oe(e)?{i:He,r:e,k:t,f:!!n}:e:null);function le(e,t=null,n=null,r=0,a=null,o=e===_e?0:1,i=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&kc(t),ref:t&&na(t),scopeId:rc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:He};return s?(ri(l,n),o&128&&e.normalize(l)):n&&(l.shapeFlag|=ge(n)?8:16),mr>0&&!i&&ut&&(l.patchFlag>0||o&6)&&l.patchFlag!==32&&ut.push(l),l}const ne=Fd;function Fd(e,t=null,n=null,r=0,a=null,o=!1){if((!e||e===vd)&&(e=tt),ha(e)){const s=Zt(e,t,!0);return n&&ri(s,n),mr>0&&!o&&ut&&(s.shapeFlag&6?ut[ut.indexOf(e)]=s:ut.push(s)),s.patchFlag|=-2,s}if(Vd(e)&&(e=e.__vccOpts),t){t=Dd(t);let{class:s,style:l}=t;s&&!ge(s)&&(t.class=Je(s)),ke(l)&&(Vl(l)&&!ee(l)&&(l=Re({},l)),t.style=xr(l))}const i=ge(e)?1:nd(e)?128:$d(e)?64:ke(e)?4:oe(e)?2:0;return le(e,t,n,r,a,i,o,!0)}function Dd(e){return e?Vl(e)||Na in e?Re({},e):e:null}function Zt(e,t,n=!1){const{props:r,ref:a,patchFlag:o,children:i}=e,s=t?wo(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&kc(s),ref:t&&t.ref?n&&a?ee(a)?a.concat(na(t)):[a,na(t)]:na(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Zt(e.ssContent),ssFallback:e.ssFallback&&Zt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function kt(e=" ",t=0){return ne(Fn,null,e,t)}function zd(e,t){const n=ne(rr,null,e);return n.staticCount=t,n}function Oe(e="",t=!1){return t?(B(),Le(tt,null,e)):ne(tt,null,e)}function lt(e){return e==null||typeof e=="boolean"?ne(tt):ee(e)?ne(_e,null,e.slice()):typeof e=="object"?Ut(e):ne(Fn,null,String(e))}function Ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Zt(e)}function ri(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(ee(t))n=16;else if(typeof t=="object")if(r&65){const a=t.default;a&&(a._c&&(a._d=!1),ri(e,a()),a._c&&(a._d=!0));return}else{n=32;const a=t._;!a&&!(Na in t)?t._ctx=He:a===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:He},n=32):(t=String(t),r&64?(n=16,t=[kt(t)]):n=8);e.children=t,e.shapeFlag|=n}function wo(...e){const t={};for(let n=0;nNe||He;let oi,En,as="__VUE_INSTANCE_SETTERS__";(En=co()[as])||(En=co()[as]=[]),En.push(e=>Ne=e),oi=e=>{En.length>1?En.forEach(t=>t(e)):En[0](e)};const Dn=e=>{oi(e),e.scope.on()},hn=()=>{Ne&&Ne.scope.off(),oi(null)};function Ec(e){return e.vnode.shapeFlag&4}let zn=!1;function Ud(e,t=!1){zn=t;const{props:n,children:r}=e.vnode,a=Ec(e);Sd(e,n,a,t),Od(e,r);const o=a?Wd(e,t):void 0;return zn=!1,o}function Wd(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Gl(new Proxy(e.ctx,bd));const{setup:r}=n;if(r){const a=e.setupContext=r.length>1?qd(e):null;Dn(e),Un();const o=Vt(r,e,0,[e.props,a]);if(Wn(),hn(),Ll(o)){if(o.then(hn,hn),t)return o.then(i=>{os(e,i,t)}).catch(i=>{Er(i,e,0)});e.asyncDep=o}else os(e,o,t)}else Cc(e,t)}function os(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ke(t)&&(e.setupState=Jl(t)),Cc(e,n)}let is;function Cc(e,t,n){const r=e.type;if(!e.render){if(!t&&is&&!r.render){const a=r.template||ti(e).template;if(a){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:s,compilerOptions:l}=r,c=Re(Re({isCustomElement:o,delimiters:s},i),l);r.render=is(a,c)}}e.render=r.render||dt}Dn(e),Un(),yd(e),Wn(),hn()}function Kd(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Ze(e,"get","$attrs"),t[n]}}))}function qd(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Kd(e)},slots:e.slots,emit:e.emit,expose:t}}function $a(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Jl(Gl(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in nr)return nr[n](e)},has(t,n){return n in t||n in nr}}))}function Yd(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function Vd(e){return oe(e)&&"__vccOpts"in e}const M=(e,t)=>Kf(e,t,zn);function ue(e,t,n){const r=arguments.length;return r===2?ke(t)&&!ee(t)?ha(t)?ne(e,null,[t]):ne(e,t):ne(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&ha(n)&&(n=[n]),ne(e,t,n))}const Gd=Symbol.for("v-scx"),Xd=()=>Ie(Gd),Jd="3.3.4",Zd="http://www.w3.org/2000/svg",cn=typeof document<"u"?document:null,ss=cn&&cn.createElement("template"),Qd={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const a=t?cn.createElementNS(Zd,e):cn.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:e=>cn.createTextNode(e),createComment:e=>cn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>cn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,a,o){const i=n?n.previousSibling:t.lastChild;if(a&&(a===o||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),n),!(a===o||!(a=a.nextSibling)););else{ss.innerHTML=r?`${e}`:e;const s=ss.content;if(r){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}t.insertBefore(s,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function em(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function tm(e,t,n){const r=e.style,a=ge(n);if(n&&!a){if(t&&!ge(t))for(const o in t)n[o]==null&&xo(r,o,"");for(const o in n)xo(r,o,n[o])}else{const o=r.display;a?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=o)}}const ls=/\s*!important$/;function xo(e,t,n){if(ee(n))n.forEach(r=>xo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=nm(e,t);ls.test(n)?e.setProperty(yn(r),n.replace(ls,""),"important"):e[r]=n}}const cs=["Webkit","Moz","ms"],Va={};function nm(e,t){const n=Va[t];if(n)return n;let r=xt(t);if(r!=="filter"&&r in e)return Va[t]=r;r=Aa(r);for(let a=0;aGa||(cm.then(()=>Ga=0),Ga=Date.now());function fm(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;ot(dm(r,n.value),t,5,[r])};return n.value=e,n.attached=um(),n}function dm(e,t){if(ee(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>a=>!a._stopped&&r&&r(a))}else return t}const ds=/^on[a-z]/,mm=(e,t,n,r,a=!1,o,i,s,l)=>{t==="class"?em(e,r,a):t==="style"?tm(e,n,r):wr(t)?zo(t)||sm(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):pm(e,t,r,a))?am(e,t,r,o,i,s,l):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),rm(e,t,r,a))};function pm(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&ds.test(t)&&oe(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ds.test(t)&&ge(n)?!1:t in e}const Ht="transition",Vn="animation",Pr=(e,{slots:t})=>ue(id,hm(e),t);Pr.displayName="Transition";const Sc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Pr.props=Re({},sc,Sc);const rn=(e,t=[])=>{ee(e)?e.forEach(n=>n(...t)):e&&e(...t)},ms=e=>e?ee(e)?e.some(t=>t.length>1):e.length>1:!1;function hm(e){const t={};for(const P in e)P in Sc||(t[P]=e[P]);if(e.css===!1)return t;const{name:n="v",type:r,duration:a,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:l=o,appearActiveClass:c=i,appearToClass:u=s,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=vm(a),w=_&&_[0],x=_&&_[1],{onBeforeEnter:p,onEnter:v,onEnterCancelled:k,onLeave:C,onLeaveCancelled:N,onBeforeAppear:q=p,onAppear:L=v,onAppearCancelled:b=k}=t,F=(P,R,$)=>{an(P,R?u:s),an(P,R?c:i),$&&$()},H=(P,R)=>{P._isLeaving=!1,an(P,f),an(P,g),an(P,d),R&&R()},X=P=>(R,$)=>{const se=P?L:v,K=()=>F(R,P,$);rn(se,[R,K]),ps(()=>{an(R,P?l:o),jt(R,P?u:s),ms(se)||hs(R,r,w,K)})};return Re(t,{onBeforeEnter(P){rn(p,[P]),jt(P,o),jt(P,i)},onBeforeAppear(P){rn(q,[P]),jt(P,l),jt(P,c)},onEnter:X(!1),onAppear:X(!0),onLeave(P,R){P._isLeaving=!0;const $=()=>H(P,R);jt(P,f),ym(),jt(P,d),ps(()=>{P._isLeaving&&(an(P,f),jt(P,g),ms(C)||hs(P,r,x,$))}),rn(C,[P,$])},onEnterCancelled(P){F(P,!1),rn(k,[P])},onAppearCancelled(P){F(P,!0),rn(b,[P])},onLeaveCancelled(P){H(P),rn(N,[P])}})}function vm(e){if(e==null)return null;if(ke(e))return[Xa(e.enter),Xa(e.leave)];{const t=Xa(e);return[t,t]}}function Xa(e){return Qu(e)}function jt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function an(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function ps(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let gm=0;function hs(e,t,n,r){const a=e._endId=++gm,o=()=>{a===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:s,propCount:l}=bm(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,d),o()},d=g=>{g.target===e&&++u>=l&&f()};setTimeout(()=>{u(n[_]||"").split(", "),a=r(`${Ht}Delay`),o=r(`${Ht}Duration`),i=vs(a,o),s=r(`${Vn}Delay`),l=r(`${Vn}Duration`),c=vs(s,l);let u=null,f=0,d=0;t===Ht?i>0&&(u=Ht,f=i,d=o.length):t===Vn?c>0&&(u=Vn,f=c,d=l.length):(f=Math.max(i,c),u=f>0?i>c?Ht:Vn:null,d=u?u===Ht?o.length:l.length:0);const g=u===Ht&&/\b(transform|all)(,|$)/.test(r(`${Ht}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:g}}function vs(e,t){for(;e.lengthgs(n)+gs(e[r])))}function gs(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function ym(){return document.body.offsetHeight}const _m={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},wm=(e,t)=>n=>{if(!("key"in n))return;const r=yn(n.key);if(t.some(a=>a===r||_m[a]===r))return e(n)},va={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Gn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),Gn(e,!0),r.enter(e)):r.leave(e,()=>{Gn(e,!1)}):Gn(e,t))},beforeUnmount(e,{value:t}){Gn(e,t)}};function Gn(e,t){e.style.display=t?e._vod:"none"}const xm=Re({patchProp:mm},Qd);let Ja,bs=!1;function km(){return Ja=bs?Ja:Id(xm),bs=!0,Ja}const Em=(...e)=>{const t=km().createApp(...e),{mount:n}=t;return t.mount=r=>{const a=Cm(r);if(a)return n(a,!0,a instanceof SVGElement)},t};function Cm(e){return ge(e)?document.querySelector(e):e}const Sm={"v-8daa1a0e":()=>qt(()=>import("./index.html-46b1f23c.js"),[]).then(({data:e})=>e),"v-fffb8e28":()=>qt(()=>import("./index.html-808f81a0.js"),[]).then(({data:e})=>e),"v-73866439":()=>qt(()=>import("./index.html-20640c9f.js"),[]).then(({data:e})=>e),"v-3706649a":()=>qt(()=>import("./404.html-60b35caa.js"),[]).then(({data:e})=>e)},Am=JSON.parse(`{"base":"/jmeter-dotnet-dsl/","lang":"en-US","title":"jmeter-dotnet-dsl","description":"Simple JMeter performance tests API","head":[["link",{"rel":"shortcut icon","href":"/jmeter-dotnet-dsl/favicon.ico"}],["script",{},"(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-PHSGKLD');\\n "]],"locales":{}}`);var Pm=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Om=e=>{const t=new Set,n=[];return e.forEach(r=>{const a=Pm(r);t.has(a)||(t.add(a),n.push(r))}),n},Or=e=>/^(https?:)?\/\//.test(e),Tm=e=>/^mailto:/.test(e),Lm=e=>/^tel:/.test(e),ii=e=>Object.prototype.toString.call(e)==="[object Object]",Ac=e=>e[e.length-1]==="/"?e.slice(0,-1):e,Pc=e=>e[0]==="/"?e.slice(1):e,Oc=(e,t)=>{const n=Object.keys(e).sort((r,a)=>{const o=a.split("/").length-r.split("/").length;return o!==0?o:a.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const Tc={"v-8daa1a0e":zr(()=>qt(()=>import("./index.html-ae1e22a7.js"),[])),"v-fffb8e28":zr(()=>qt(()=>import("./index.html-4561fb8f.js"),[])),"v-73866439":zr(()=>qt(()=>import("./index.html-dda19cfd.js"),[])),"v-3706649a":zr(()=>qt(()=>import("./404.html-550677cc.js"),[]))};var Im=Symbol(""),Rm=fe(Sm),Lc=_n({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),Wt=fe(Lc),Gt=()=>Wt,Ic=Symbol(""),Ot=()=>{const e=Ie(Ic);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Rc=Symbol(""),Nm=()=>{const e=Ie(Rc);if(!e)throw new Error("usePageHead() is called without provider.");return e},$m=Symbol(""),Nc=Symbol(""),Mm=()=>{const e=Ie(Nc);if(!e)throw new Error("usePageLang() is called without provider.");return e},$c=Symbol(""),Fm=()=>{const e=Ie($c);if(!e)throw new Error("usePageLayout() is called without provider.");return e},si=Symbol(""),Kn=()=>{const e=Ie(si);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},An=fe(Am),Mc=()=>An,Fc=Symbol(""),li=()=>{const e=Ie(Fc);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Dm=Symbol(""),zm="Layout",Hm="NotFound",Ct=kr({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=Rm.value[e];return await(t==null?void 0:t())??Lc},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=ge(t.description)?t.description:n.description,a=[...ee(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Om(a)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:e=>e.lang||"en",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;ge(r)?n=r:n=zm}else n=Hm;return t[n]},resolveRouteLocale:(e,t)=>Oc(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),ci=de({name:"ClientOnly",setup(e,t){const n=fe(!1);return Ye(()=>{n.value=!0}),()=>{var r,a;return n.value?(a=(r=t.slots).default)==null?void 0:a.call(r):null}}}),jm=de({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=Gt(),n=M(()=>Tc[e.pageKey||t.value.key]);return()=>n.value?ue(n.value):ue("div","404 Not Found")}}),ht=(e={})=>e,ui=e=>Or(e)?e:`/jmeter-dotnet-dsl/${Pc(e)}`;function Dc(e,t,n){var r,a,o;t===void 0&&(t=50),n===void 0&&(n={});var i=(r=n.isImmediate)!=null&&r,s=(a=n.callback)!=null&&a,l=n.maxWait,c=Date.now(),u=[];function f(){if(l!==void 0){var g=Date.now()-c;if(g+t>=l)return l-g}return t}var d=function(){var g=[].slice.call(arguments),_=this;return new Promise(function(w,x){var p=i&&o===void 0;if(o!==void 0&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,c=Date.now(),!i){var k=e.apply(_,g);s&&s(k),u.forEach(function(C){return(0,C.resolve)(k)}),u=[]}},f()),p){var v=e.apply(_,g);return s&&s(v),w(v)}u.push({resolve:w,reject:x})})};return d.cancel=function(g){o!==void 0&&clearTimeout(o),u.forEach(function(_){return(0,_.reject)(g)}),u=[]},d}/*! + * vue-router v4.2.3 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const Sn=typeof window<"u";function Bm(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const be=Object.assign;function Za(e,t){const n={};for(const r in t){const a=t[r];n[r]=pt(a)?a.map(e):e(a)}return n}const or=()=>{},pt=Array.isArray,Um=/\/$/,Wm=e=>e.replace(Um,"");function Qa(e,t,n="/"){let r,a={},o="",i="";const s=t.indexOf("#");let l=t.indexOf("?");return s=0&&(l=-1),l>-1&&(r=t.slice(0,l),o=t.slice(l+1,s>-1?s:t.length),a=e(o)),s>-1&&(r=r||t.slice(0,s),i=t.slice(s,t.length)),r=Vm(r??t,n),{fullPath:r+(o&&"?")+o+i,path:r,query:a,hash:i}}function Km(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function ys(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function qm(e,t,n){const r=t.matched.length-1,a=n.matched.length-1;return r>-1&&r===a&&Hn(t.matched[r],n.matched[a])&&zc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Hn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function zc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Ym(e[n],t[n]))return!1;return!0}function Ym(e,t){return pt(e)?_s(e,t):pt(t)?_s(t,e):e===t}function _s(e,t){return pt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Vm(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),a=r[r.length-1];(a===".."||a===".")&&r.push("");let o=n.length-1,i,s;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var pr;(function(e){e.pop="pop",e.push="push"})(pr||(pr={}));var ir;(function(e){e.back="back",e.forward="forward",e.unknown=""})(ir||(ir={}));function Gm(e){if(!e)if(Sn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Wm(e)}const Xm=/^[^#]+#/;function Jm(e,t){return e.replace(Xm,"#")+t}function Zm(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Ma=()=>({left:window.pageXOffset,top:window.pageYOffset});function Qm(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),a=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!a)return;t=Zm(a,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function ws(e,t){return(history.state?history.state.position-t:-1)+e}const ko=new Map;function ep(e,t){ko.set(e,t)}function tp(e){const t=ko.get(e);return ko.delete(e),t}let np=()=>location.protocol+"//"+location.host;function Hc(e,t){const{pathname:n,search:r,hash:a}=t,o=e.indexOf("#");if(o>-1){let s=a.includes(e.slice(o))?e.slice(o).length:1,l=a.slice(s);return l[0]!=="/"&&(l="/"+l),ys(l,"")}return ys(n,e)+r+a}function rp(e,t,n,r){let a=[],o=[],i=null;const s=({state:d})=>{const g=Hc(e,location),_=n.value,w=t.value;let x=0;if(d){if(n.value=g,t.value=d,i&&i===_){i=null;return}x=w?d.position-w.position:0}else r(g);a.forEach(p=>{p(n.value,_,{delta:x,type:pr.pop,direction:x?x>0?ir.forward:ir.back:ir.unknown})})};function l(){i=n.value}function c(d){a.push(d);const g=()=>{const _=a.indexOf(d);_>-1&&a.splice(_,1)};return o.push(g),g}function u(){const{history:d}=window;d.state&&d.replaceState(be({},d.state,{scroll:Ma()}),"")}function f(){for(const d of o)d();o=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:l,listen:c,destroy:f}}function xs(e,t,n,r=!1,a=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:a?Ma():null}}function ap(e){const{history:t,location:n}=window,r={value:Hc(e,n)},a={value:t.state};a.value||o(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(l,c,u){const f=e.indexOf("#"),d=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+l:np()+e+l;try{t[u?"replaceState":"pushState"](c,"",d),a.value=c}catch(g){console.error(g),n[u?"replace":"assign"](d)}}function i(l,c){const u=be({},t.state,xs(a.value.back,l,a.value.forward,!0),c,{position:a.value.position});o(l,u,!0),r.value=l}function s(l,c){const u=be({},a.value,t.state,{forward:l,scroll:Ma()});o(u.current,u,!0);const f=be({},xs(r.value,l,null),{position:u.position+1},c);o(l,f,!1),r.value=l}return{location:r,state:a,push:s,replace:i}}function op(e){e=Gm(e);const t=ap(e),n=rp(e,t.state,t.location,t.replace);function r(o,i=!0){i||n.pauseListeners(),history.go(o)}const a=be({location:"",base:e,go:r,createHref:Jm.bind(null,e)},t,n);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}function ip(e){return typeof e=="string"||e&&typeof e=="object"}function jc(e){return typeof e=="string"||typeof e=="symbol"}const St={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},Bc=Symbol("");var ks;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ks||(ks={}));function jn(e,t){return be(new Error,{type:e,[Bc]:!0},t)}function Et(e,t){return e instanceof Error&&Bc in e&&(t==null||!!(e.type&t))}const Es="[^/]+?",sp={sensitive:!1,strict:!1,start:!0,end:!0},lp=/[.+*?^${}()[\]/\\]/g;function cp(e,t){const n=be({},sp,t),r=[];let a=n.start?"^":"";const o=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(a+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function fp(e,t){let n=0;const r=e.score,a=t.score;for(;n0&&t[t.length-1]<0}const dp={type:0,value:""},mp=/[a-zA-Z0-9_]/;function pp(e){if(!e)return[[]];if(e==="/")return[[dp]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const a=[];let o;function i(){o&&a.push(o),o=[]}let s=0,l,c="",u="";function f(){c&&(n===0?o.push({type:0,value:c}):n===1||n===2||n===3?(o.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:c,regexp:u,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),c="")}function d(){c+=l}for(;s{i(v)}:or}function i(u){if(jc(u)){const f=r.get(u);f&&(r.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&r.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function s(){return n}function l(u){let f=0;for(;f=0&&(u.record.path!==n[f].record.path||!Uc(u,n[f]));)f++;n.splice(f,0,u),u.record.name&&!As(u)&&r.set(u.record.name,u)}function c(u,f){let d,g={},_,w;if("name"in u&&u.name){if(d=r.get(u.name),!d)throw jn(1,{location:u});w=d.record.name,g=be(Ss(f.params,d.keys.filter(v=>!v.optional).map(v=>v.name)),u.params&&Ss(u.params,d.keys.map(v=>v.name))),_=d.stringify(g)}else if("path"in u)_=u.path,d=n.find(v=>v.re.test(_)),d&&(g=d.parse(_),w=d.record.name);else{if(d=f.name?r.get(f.name):n.find(v=>v.re.test(f.path)),!d)throw jn(1,{location:u,currentLocation:f});w=d.record.name,g=be({},f.params,u.params),_=d.stringify(g)}const x=[];let p=d;for(;p;)x.unshift(p.record),p=p.parent;return{name:w,path:_,params:g,matched:x,meta:yp(x)}}return e.forEach(u=>o(u)),{addRoute:o,resolve:c,removeRoute:i,getRoutes:s,getRecordMatcher:a}}function Ss(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function gp(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:bp(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function bp(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function As(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function yp(e){return e.reduce((t,n)=>be(t,n.meta),{})}function Ps(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function Uc(e,t){return t.children.some(n=>n===e||Uc(e,n))}const Wc=/#/g,_p=/&/g,wp=/\//g,xp=/=/g,kp=/\?/g,Kc=/\+/g,Ep=/%5B/g,Cp=/%5D/g,qc=/%5E/g,Sp=/%60/g,Yc=/%7B/g,Ap=/%7C/g,Vc=/%7D/g,Pp=/%20/g;function fi(e){return encodeURI(""+e).replace(Ap,"|").replace(Ep,"[").replace(Cp,"]")}function Op(e){return fi(e).replace(Yc,"{").replace(Vc,"}").replace(qc,"^")}function Eo(e){return fi(e).replace(Kc,"%2B").replace(Pp,"+").replace(Wc,"%23").replace(_p,"%26").replace(Sp,"`").replace(Yc,"{").replace(Vc,"}").replace(qc,"^")}function Tp(e){return Eo(e).replace(xp,"%3D")}function Lp(e){return fi(e).replace(Wc,"%23").replace(kp,"%3F")}function Ip(e){return e==null?"":Lp(e).replace(wp,"%2F")}function ga(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Rp(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let a=0;ao&&Eo(o)):[r&&Eo(r)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Np(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=pt(r)?r.map(a=>a==null?null:""+a):r==null?r:""+r)}return t}const $p=Symbol(""),Ts=Symbol(""),Fa=Symbol(""),di=Symbol(""),Co=Symbol("");function Xn(){let e=[];function t(r){return e.push(r),()=>{const a=e.indexOf(r);a>-1&&e.splice(a,1)}}function n(){e=[]}return{add:t,list:()=>e,reset:n}}function Kt(e,t,n,r,a){const o=r&&(r.enterCallbacks[a]=r.enterCallbacks[a]||[]);return()=>new Promise((i,s)=>{const l=f=>{f===!1?s(jn(4,{from:n,to:t})):f instanceof Error?s(f):ip(f)?s(jn(2,{from:t,to:f})):(o&&r.enterCallbacks[a]===o&&typeof f=="function"&&o.push(f),i())},c=e.call(r&&r.instances[a],t,n,l);let u=Promise.resolve(c);e.length<3&&(u=u.then(l)),u.catch(f=>s(f))})}function eo(e,t,n,r){const a=[];for(const o of e)for(const i in o.components){let s=o.components[i];if(!(t!=="beforeRouteEnter"&&!o.instances[i]))if(Mp(s)){const c=(s.__vccOpts||s)[t];c&&a.push(Kt(c,n,r,o,i))}else{let l=s();a.push(()=>l.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${o.path}"`));const u=Bm(c)?c.default:c;o.components[i]=u;const d=(u.__vccOpts||u)[t];return d&&Kt(d,n,r,o,i)()}))}}return a}function Mp(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Ls(e){const t=Ie(Fa),n=Ie(di),r=M(()=>t.resolve(Q(e.to))),a=M(()=>{const{matched:l}=r.value,{length:c}=l,u=l[c-1],f=n.matched;if(!u||!f.length)return-1;const d=f.findIndex(Hn.bind(null,u));if(d>-1)return d;const g=Is(l[c-2]);return c>1&&Is(u)===g&&f[f.length-1].path!==g?f.findIndex(Hn.bind(null,l[c-2])):d}),o=M(()=>a.value>-1&&Hp(n.params,r.value.params)),i=M(()=>a.value>-1&&a.value===n.matched.length-1&&zc(n.params,r.value.params));function s(l={}){return zp(l)?t[Q(e.replace)?"replace":"push"](Q(e.to)).catch(or):Promise.resolve()}return{route:r,href:M(()=>r.value.href),isActive:o,isExactActive:i,navigate:s}}const Fp=de({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Ls,setup(e,{slots:t}){const n=kr(Ls(e)),{options:r}=Ie(Fa),a=M(()=>({[Rs(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Rs(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&t.default(n);return e.custom?o:ue("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:a.value},o)}}}),Dp=Fp;function zp(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Hp(e,t){for(const n in t){const r=t[n],a=e[n];if(typeof r=="string"){if(r!==a)return!1}else if(!pt(a)||a.length!==r.length||r.some((o,i)=>o!==a[i]))return!1}return!0}function Is(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Rs=(e,t,n)=>e??t??n,jp=de({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ie(Co),a=M(()=>e.route||r.value),o=Ie(Ts,0),i=M(()=>{let c=Q(o);const{matched:u}=a.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),s=M(()=>a.value.matched[i.value]);pn(Ts,M(()=>i.value+1)),pn($p,s),pn(Co,a);const l=fe();return it(()=>[l.value,s.value,e.name],([c,u,f],[d,g,_])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===d&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!Hn(u,g)||!d)&&(u.enterCallbacks[f]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=a.value,u=e.name,f=s.value,d=f&&f.components[u];if(!d)return Ns(n.default,{Component:d,route:c});const g=f.props[u],_=g?g===!0?c.params:typeof g=="function"?g(c):g:null,x=ue(d,be({},_,t,{onVnodeUnmounted:p=>{p.component.isUnmounted&&(f.instances[u]=null)},ref:l}));return Ns(n.default,{Component:x,route:c})||x}}});function Ns(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Gc=jp;function Bp(e){const t=vp(e.routes,e),n=e.parseQuery||Rp,r=e.stringifyQuery||Os,a=e.history,o=Xn(),i=Xn(),s=Xn(),l=Zo(St);let c=St;Sn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Za.bind(null,S=>""+S),f=Za.bind(null,Ip),d=Za.bind(null,ga);function g(S,U){let D,G;return jc(S)?(D=t.getRecordMatcher(S),G=U):G=S,t.addRoute(G,D)}function _(S){const U=t.getRecordMatcher(S);U&&t.removeRoute(U)}function w(){return t.getRoutes().map(S=>S.record)}function x(S){return!!t.getRecordMatcher(S)}function p(S,U){if(U=be({},U||l.value),typeof S=="string"){const y=Qa(n,S,U.path),E=t.resolve({path:y.path},U),A=a.createHref(y.fullPath);return be(y,E,{params:d(E.params),hash:ga(y.hash),redirectedFrom:void 0,href:A})}let D;if("path"in S)D=be({},S,{path:Qa(n,S.path,U.path).path});else{const y=be({},S.params);for(const E in y)y[E]==null&&delete y[E];D=be({},S,{params:f(y)}),U.params=f(U.params)}const G=t.resolve(D,U),me=S.hash||"";G.params=u(d(G.params));const m=Km(r,be({},S,{hash:Op(me),path:G.path})),h=a.createHref(m);return be({fullPath:m,hash:me,query:r===Os?Np(S.query):S.query||{}},G,{redirectedFrom:void 0,href:h})}function v(S){return typeof S=="string"?Qa(n,S,l.value.path):be({},S)}function k(S,U){if(c!==S)return jn(8,{from:U,to:S})}function C(S){return L(S)}function N(S){return C(be(v(S),{replace:!0}))}function q(S){const U=S.matched[S.matched.length-1];if(U&&U.redirect){const{redirect:D}=U;let G=typeof D=="function"?D(S):D;return typeof G=="string"&&(G=G.includes("?")||G.includes("#")?G=v(G):{path:G},G.params={}),be({query:S.query,hash:S.hash,params:"path"in G?{}:S.params},G)}}function L(S,U){const D=c=p(S),G=l.value,me=S.state,m=S.force,h=S.replace===!0,y=q(D);if(y)return L(be(v(y),{state:typeof y=="object"?be({},me,y.state):me,force:m,replace:h}),U||D);const E=D;E.redirectedFrom=U;let A;return!m&&qm(r,G,D)&&(A=jn(16,{to:E,from:G}),Ve(G,G,!0,!1)),(A?Promise.resolve(A):H(E,G)).catch(O=>Et(O)?Et(O,2)?O:De(O):ie(O,E,G)).then(O=>{if(O){if(Et(O,2))return L(be({replace:h},v(O.to),{state:typeof O.to=="object"?be({},me,O.to.state):me,force:m}),U||E)}else O=P(E,G,!0,h,me);return X(E,G,O),O})}function b(S,U){const D=k(S,U);return D?Promise.reject(D):Promise.resolve()}function F(S){const U=Ft.values().next().value;return U&&typeof U.runWithContext=="function"?U.runWithContext(S):S()}function H(S,U){let D;const[G,me,m]=Up(S,U);D=eo(G.reverse(),"beforeRouteLeave",S,U);for(const y of G)y.leaveGuards.forEach(E=>{D.push(Kt(E,S,U))});const h=b.bind(null,S,U);return D.push(h),Fe(D).then(()=>{D=[];for(const y of o.list())D.push(Kt(y,S,U));return D.push(h),Fe(D)}).then(()=>{D=eo(me,"beforeRouteUpdate",S,U);for(const y of me)y.updateGuards.forEach(E=>{D.push(Kt(E,S,U))});return D.push(h),Fe(D)}).then(()=>{D=[];for(const y of m)if(y.beforeEnter)if(pt(y.beforeEnter))for(const E of y.beforeEnter)D.push(Kt(E,S,U));else D.push(Kt(y.beforeEnter,S,U));return D.push(h),Fe(D)}).then(()=>(S.matched.forEach(y=>y.enterCallbacks={}),D=eo(m,"beforeRouteEnter",S,U),D.push(h),Fe(D))).then(()=>{D=[];for(const y of i.list())D.push(Kt(y,S,U));return D.push(h),Fe(D)}).catch(y=>Et(y,8)?y:Promise.reject(y))}function X(S,U,D){for(const G of s.list())F(()=>G(S,U,D))}function P(S,U,D,G,me){const m=k(S,U);if(m)return m;const h=U===St,y=Sn?history.state:{};D&&(G||h?a.replace(S.fullPath,be({scroll:h&&y&&y.scroll},me)):a.push(S.fullPath,me)),l.value=S,Ve(S,U,D,h),De()}let R;function $(){R||(R=a.listen((S,U,D)=>{if(!vt.listening)return;const G=p(S),me=q(G);if(me){L(be(me,{replace:!0}),G).catch(or);return}c=G;const m=l.value;Sn&&ep(ws(m.fullPath,D.delta),Ma()),H(G,m).catch(h=>Et(h,12)?h:Et(h,2)?(L(h.to,G).then(y=>{Et(y,20)&&!D.delta&&D.type===pr.pop&&a.go(-1,!1)}).catch(or),Promise.reject()):(D.delta&&a.go(-D.delta,!1),ie(h,G,m))).then(h=>{h=h||P(G,m,!1),h&&(D.delta&&!Et(h,8)?a.go(-D.delta,!1):D.type===pr.pop&&Et(h,20)&&a.go(-1,!1)),X(G,m,h)}).catch(or)}))}let se=Xn(),K=Xn(),ae;function ie(S,U,D){De(S);const G=K.list();return G.length?G.forEach(me=>me(S,U,D)):console.error(S),Promise.reject(S)}function je(){return ae&&l.value!==St?Promise.resolve():new Promise((S,U)=>{se.add([S,U])})}function De(S){return ae||(ae=!S,$(),se.list().forEach(([U,D])=>S?D(S):U()),se.reset()),S}function Ve(S,U,D,G){const{scrollBehavior:me}=e;if(!Sn||!me)return Promise.resolve();const m=!D&&tp(ws(S.fullPath,0))||(G||!D)&&history.state&&history.state.scroll||null;return Cr().then(()=>me(S,U,m)).then(h=>h&&Qm(h)).catch(h=>ie(h,S,U))}const Be=S=>a.go(S);let Mt;const Ft=new Set,vt={currentRoute:l,listening:!0,addRoute:g,removeRoute:_,hasRoute:x,getRoutes:w,resolve:p,options:e,push:C,replace:N,go:Be,back:()=>Be(-1),forward:()=>Be(1),beforeEach:o.add,beforeResolve:i.add,afterEach:s.add,onError:K.add,isReady:je,install(S){const U=this;S.component("RouterLink",Dp),S.component("RouterView",Gc),S.config.globalProperties.$router=U,Object.defineProperty(S.config.globalProperties,"$route",{enumerable:!0,get:()=>Q(l)}),Sn&&!Mt&&l.value===St&&(Mt=!0,C(a.location).catch(me=>{}));const D={};for(const me in St)Object.defineProperty(D,me,{get:()=>l.value[me],enumerable:!0});S.provide(Fa,U),S.provide(di,Yl(D)),S.provide(Co,l);const G=S.unmount;Ft.add(S),S.unmount=function(){Ft.delete(S),Ft.size<1&&(c=St,R&&R(),R=null,l.value=St,Mt=!1,ae=!1),G()}}};function Fe(S){return S.reduce((U,D)=>U.then(()=>F(D)),Promise.resolve())}return vt}function Up(e,t){const n=[],r=[],a=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iHn(c,s))?r.push(s):n.push(s));const l=e.matched[i];l&&(t.matched.find(c=>Hn(c,l))||a.push(l))}return[n,r,a]}function wn(){return Ie(Fa)}function xn(){return Ie(di)}const Wp=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const a=wn(),i=Dc(()=>{var w,x;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)d.some(v=>v.hash===p.hash));for(let p=0;p<_.length;p++){const v=_[p],k=_[p+1],C=s>=(((w=v.parentElement)==null?void 0:w.offsetTop)??0)-r,N=!k||s<(((x=k.parentElement)==null?void 0:x.offsetTop)??0)-r;if(!(C&&N))continue;const L=decodeURIComponent(a.currentRoute.value.hash),b=decodeURIComponent(v.hash);if(L===b)return;if(f){for(let F=p+1;F<_.length;F++)if(L===decodeURIComponent(_[F].hash))return}$s(a,b);return}},n);Ye(()=>{window.addEventListener("scroll",i)}),Ar(()=>{window.removeEventListener("scroll",i)})},$s=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},Kp="a.sidebar-item",qp=".header-anchor",Yp=300,Vp=5,Gp=ht({setup(){Wp({headerLinkSelector:Kp,headerAnchorSelector:qp,delay:Yp,offset:Vp})}}),Ms=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Xp=()=>window.scrollTo({top:0,behavior:"smooth"});const Jp=de({name:"BackToTop",setup(){const e=fe(0),t=M(()=>e.value>300),n=Dc(()=>{e.value=Ms()},100);Ye(()=>{e.value=Ms(),window.addEventListener("scroll",()=>n())});const r=ue("div",{class:"back-to-top",onClick:Xp});return()=>ue(Pr,{name:"back-to-top"},()=>t.value?r:null)}}),Zp=ht({rootComponents:[Jp]});const Qp=ue("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ue("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ue("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),eh=de({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Kn(),n=M(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ue("span",[Qp,ue("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),th={"/":{openInNewWindow:"open in new window"}},nh=ht({enhance({app:e}){e.component("ExternalLinkIcon",ue(eh,{locales:th}))}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const pe={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=pe.isStarted();e=to(e,pe.settings.minimum,1),pe.status=e===1?null:e;const n=pe.render(!t),r=n.querySelector(pe.settings.barSelector),a=pe.settings.speed,o=pe.settings.easing;return n.offsetWidth,rh(i=>{Br(r,{transform:"translate3d("+Fs(e)+"%,0,0)",transition:"all "+a+"ms "+o}),e===1?(Br(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){Br(n,{transition:"all "+a+"ms linear",opacity:"0"}),setTimeout(function(){pe.remove(),i()},a)},a)):setTimeout(()=>i(),a)}),pe},isStarted:()=>typeof pe.status=="number",start:()=>{pe.status||pe.set(0);const e=()=>{setTimeout(()=>{pe.status&&(pe.trickle(),e())},pe.settings.trickleSpeed)};return pe.settings.trickle&&e(),pe},done:e=>!e&&!pe.status?pe:pe.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=pe.status;return t?(typeof e!="number"&&(e=(1-t)*to(Math.random()*t,.1,.95)),t=to(t+e,0,.994),pe.set(t)):pe.start()},trickle:()=>pe.inc(Math.random()*pe.settings.trickleRate),render:e=>{if(pe.isRendered())return document.getElementById("nprogress");Ds(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=pe.settings.template;const n=t.querySelector(pe.settings.barSelector),r=e?"-100":Fs(pe.status||0),a=document.querySelector(pe.settings.parent);return Br(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),a!==document.body&&Ds(a,"nprogress-custom-parent"),a==null||a.appendChild(t),t},remove:()=>{zs(document.documentElement,"nprogress-busy"),zs(document.querySelector(pe.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&ah(e)},isRendered:()=>!!document.getElementById("nprogress")},to=(e,t,n)=>en?n:e,Fs=e=>(-1+e)*100,rh=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),Br=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,l){return l.toUpperCase()})}function r(i){const s=document.body.style;if(i in s)return i;let l=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;l--;)if(u=e[l]+c,u in s)return u;return i}function a(i){return i=n(i),t[i]??(t[i]=r(i))}function o(i,s,l){s=a(s),i.style[s]=l}return function(i,s){for(const l in s){const c=s[l];c!==void 0&&Object.prototype.hasOwnProperty.call(s,l)&&o(i,l,c)}}}(),Xc=(e,t)=>(typeof e=="string"?e:mi(e)).indexOf(" "+t+" ")>=0,Ds=(e,t)=>{const n=mi(e),r=n+t;Xc(n,t)||(e.className=r.substring(1))},zs=(e,t)=>{const n=mi(e);if(!Xc(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},mi=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),ah=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const oh=()=>{Ye(()=>{const e=wn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||pe.start()}),e.afterEach(n=>{t.add(n.path),pe.done()})})},ih=ht({setup(){oh()}}),sh=JSON.parse(`{"logo":"/logo.svg","editLink":false,"lastUpdated":false,"contributors":false,"navbar":[{"text":"Guide","link":"/guide/"},{"text":"Support","link":"/support/"},{"text":"Motivation","link":"https://abstracta.github.io/jmeter-java-dsl/motivation/"},{"link":"https://discord.gg/WNSn5hqmSd","icon":["fab","discord"]},{"link":"https://github.com/abstracta/jmeter-dotnet-dsl","icon":["fab","github"]}],"sidebarDepth":3,"locales":{"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"auto","editLinkText":"Edit this page","lastUpdatedText":"Last Updated","contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),lh=fe(sh),Jc=()=>lh,Zc=Symbol(""),ch=()=>{const e=Ie(Zc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},uh=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},fh=ht({enhance({app:e}){const t=Jc(),n=e._context.provides[si],r=M(()=>uh(t.value,n.value));e.provide(Zc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),dh=de({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(B(),te("span",{class:Je(["badge",e.type]),style:xr({verticalAlign:e.vertical})},[xe(t.$slots,"default",{},()=>[kt(Ke(e.text),1)])],6))}}),Ae=(e,t)=>{const n=e.__vccOpts||e;for(const[r,a]of t)n[r]=a;return n},mh=Ae(dh,[["__file","Badge.vue"]]),ph=de({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=fe(-1),r=fe([]),a=(s=n.value)=>{s{s>0?n.value=s-1:n.value=r.value.length-1,r.value[n.value].focus()},i=(s,l)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),n.value=l):s.key==="ArrowRight"?(s.preventDefault(),a(l)):s.key==="ArrowLeft"&&(s.preventDefault(),o(l))};return()=>{var l;const s=(((l=t.default)==null?void 0:l.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):s.forEach((c,u)=>{c.props.active=u===n.value}),ue("div",{class:"code-group"},[ue("div",{class:"code-group__nav"},ue("ul",{class:"code-group__ul"},s.map((c,u)=>{const f=u===n.value;return ue("li",{class:"code-group__li"},ue("button",{ref:d=>{d&&(r.value[u]=d)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":f},ariaPressed:f,ariaExpanded:f,onClick:()=>n.value=u,onKeydown:d=>i(d,u)},c.props.title))}))),s]))}}}),hh=["aria-selected"],vh=de({name:"CodeGroupItem"}),gh=de({...vh,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(B(),te("div",{class:Je(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[xe(t.$slots,"default")],10,hh))}}),bh=Ae(gh,[["__file","CodeGroupItem.vue"]]);var yh=Object.defineProperty,_h=Object.defineProperties,wh=Object.getOwnPropertyDescriptors,Hs=Object.getOwnPropertySymbols,xh=Object.prototype.hasOwnProperty,kh=Object.prototype.propertyIsEnumerable,js=(e,t,n)=>t in e?yh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Eh=(e,t)=>{for(var n in t||(t={}))xh.call(t,n)&&js(e,n,t[n]);if(Hs)for(var n of Hs(t))kh.call(t,n)&&js(e,n,t[n]);return e},Ch=(e,t)=>_h(e,wh(t));function Bs(e,t){var n;const r=Zo();return oc(()=>{r.value=e()},Ch(Eh({},t),{flush:(n=t==null?void 0:t.flush)!=null?n:"sync"})),_n(r)}function pi(e){return Ml()?(cf(e),!0):!1}function vn(e){return typeof e=="function"?e():Q(e)}const hi=typeof window<"u",Qc=()=>{};function Sh(e,t){function n(...r){return new Promise((a,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(a).catch(o)})}return n}const eu=e=>e();function Ah(e=eu){const t=fe(!0);function n(){t.value=!1}function r(){t.value=!0}const a=(...o)=>{t.value&&e(...o)};return{isActive:_n(t),pause:n,resume:r,eventFilter:a}}function Ph(...e){if(e.length!==1)return Uf(...e);const t=e[0];return typeof t=="function"?_n(Hf(()=>({get:t,set:Qc}))):fe(t)}function Oh(e,t,n={}){const{immediate:r=!0}=n,a=fe(!1);let o=null;function i(){o&&(clearTimeout(o),o=null)}function s(){a.value=!1,i()}function l(...c){i(),a.value=!0,o=setTimeout(()=>{a.value=!1,o=null,e(...c)},vn(t))}return r&&(a.value=!0,hi&&l()),pi(s),{isPending:_n(a),start:l,stop:s}}function Th(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,a=$e(e),o=fe(e);function i(s){if(arguments.length)return o.value=s,o.value;{const l=vn(n);return o.value=o.value===l?vn(r):l,o.value}}return a?i:[o,i]}var Us=Object.getOwnPropertySymbols,Lh=Object.prototype.hasOwnProperty,Ih=Object.prototype.propertyIsEnumerable,Rh=(e,t)=>{var n={};for(var r in e)Lh.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Us)for(var r of Us(e))t.indexOf(r)<0&&Ih.call(e,r)&&(n[r]=e[r]);return n};function Nh(e,t,n={}){const r=n,{eventFilter:a=eu}=r,o=Rh(r,["eventFilter"]);return it(e,Sh(a,t),o)}var $h=Object.defineProperty,Mh=Object.defineProperties,Fh=Object.getOwnPropertyDescriptors,ba=Object.getOwnPropertySymbols,tu=Object.prototype.hasOwnProperty,nu=Object.prototype.propertyIsEnumerable,Ws=(e,t,n)=>t in e?$h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Dh=(e,t)=>{for(var n in t||(t={}))tu.call(t,n)&&Ws(e,n,t[n]);if(ba)for(var n of ba(t))nu.call(t,n)&&Ws(e,n,t[n]);return e},zh=(e,t)=>Mh(e,Fh(t)),Hh=(e,t)=>{var n={};for(var r in e)tu.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&ba)for(var r of ba(e))t.indexOf(r)<0&&nu.call(e,r)&&(n[r]=e[r]);return n};function jh(e,t,n={}){const r=n,{eventFilter:a}=r,o=Hh(r,["eventFilter"]),{eventFilter:i,pause:s,resume:l,isActive:c}=Ah(a);return{stop:Nh(e,t,zh(Dh({},o),{eventFilter:i})),pause:s,resume:l,isActive:c}}function Bh(e){var t;const n=vn(e);return(t=n==null?void 0:n.$el)!=null?t:n}const ya=hi?window:void 0,Uh=hi?window.navigator:void 0;function _a(...e){let t,n,r,a;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,a]=e,t=ya):[t,n,r,a]=e,!t)return Qc;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(u=>u()),o.length=0},s=(u,f,d,g)=>(u.addEventListener(f,d,g),()=>u.removeEventListener(f,d,g)),l=it(()=>[Bh(t),vn(a)],([u,f])=>{i(),u&&o.push(...n.flatMap(d=>r.map(g=>s(u,d,g,f))))},{immediate:!0,flush:"post"}),c=()=>{l(),i()};return pi(c),c}function Wh(){const e=fe(!1);return ai()&&Ye(()=>{e.value=!0}),e}function ru(e){const t=Wh();return M(()=>(t.value,!!e()))}function Kh(e,t={}){const{window:n=ya}=t,r=ru(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let a;const o=fe(!1),i=()=>{a&&("removeEventListener"in a?a.removeEventListener("change",s):a.removeListener(s))},s=()=>{r.value&&(i(),a=n.matchMedia(Ph(e).value),o.value=!!(a!=null&&a.matches),a&&("addEventListener"in a?a.addEventListener("change",s):a.addListener(s)))};return oc(s),pi(()=>i()),o}function qh(e={}){const{navigator:t=Uh,read:n=!1,source:r,copiedDuring:a=1500,legacy:o=!1}=e,i=["copy","cut"],s=ru(()=>t&&"clipboard"in t),l=M(()=>s.value||o),c=fe(""),u=fe(!1),f=Oh(()=>u.value=!1,a);function d(){s.value?t.clipboard.readText().then(x=>{c.value=x}):c.value=w()}if(l.value&&n)for(const x of i)_a(x,d);async function g(x=vn(r)){l.value&&x!=null&&(s.value?await t.clipboard.writeText(x):_(x),c.value=x,u.value=!0,f.start())}function _(x){const p=document.createElement("textarea");p.value=x??"",p.style.position="absolute",p.style.opacity="0",document.body.appendChild(p),p.select(),document.execCommand("copy"),p.remove()}function w(){var x,p,v;return(v=(p=(x=document==null?void 0:document.getSelection)==null?void 0:x.call(document))==null?void 0:p.toString())!=null?v:""}return{isSupported:l,text:c,copied:u,copy:g}}const Ur=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Wr="__vueuse_ssr_handlers__",Yh=Vh();function Vh(){return Wr in Ur||(Ur[Wr]=Ur[Wr]||{}),Ur[Wr]}function Gh(e,t){return Yh[e]||t}function Xh(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}var Jh=Object.defineProperty,Ks=Object.getOwnPropertySymbols,Zh=Object.prototype.hasOwnProperty,Qh=Object.prototype.propertyIsEnumerable,qs=(e,t,n)=>t in e?Jh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ys=(e,t)=>{for(var n in t||(t={}))Zh.call(t,n)&&qs(e,n,t[n]);if(Ks)for(var n of Ks(t))Qh.call(t,n)&&qs(e,n,t[n]);return e};const ev={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Vs="vueuse-storage";function tv(e,t,n,r={}){var a;const{flush:o="pre",deep:i=!0,listenToStorageChanges:s=!0,writeDefaults:l=!0,mergeDefaults:c=!1,shallow:u,window:f=ya,eventFilter:d,onError:g=b=>{console.error(b)}}=r,_=(u?Zo:fe)(t);if(!n)try{n=Gh("getDefaultStorage",()=>{var b;return(b=ya)==null?void 0:b.localStorage})()}catch(b){g(b)}if(!n)return _;const w=vn(t),x=Xh(w),p=(a=r.serializer)!=null?a:ev[x],{pause:v,resume:k}=jh(_,()=>C(_.value),{flush:o,deep:i,eventFilter:d});return f&&s&&(_a(f,"storage",L),_a(f,Vs,q)),L(),_;function C(b){try{if(b==null)n.removeItem(e);else{const F=p.write(b),H=n.getItem(e);H!==F&&(n.setItem(e,F),f&&f.dispatchEvent(new CustomEvent(Vs,{detail:{key:e,oldValue:H,newValue:F,storageArea:n}})))}}catch(F){g(F)}}function N(b){const F=b?b.newValue:n.getItem(e);if(F==null)return l&&w!==null&&n.setItem(e,p.write(w)),w;if(!b&&c){const H=p.read(F);return typeof c=="function"?c(H,w):x==="object"&&!Array.isArray(H)?Ys(Ys({},w),H):H}else return typeof F!="string"?F:p.read(F)}function q(b){L(b.detail)}function L(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){_.value=w;return}if(!(b&&b.key!==e)){v();try{_.value=N(b)}catch(F){g(F)}finally{b?Cr(k):k()}}}}}function nv(e){return Kh("(prefers-color-scheme: dark)",e)}const rv=()=>Jc(),qe=()=>ch(),au=Symbol(""),vi=()=>{const e=Ie(au);if(!e)throw new Error("useDarkMode() is called without provider.");return e},av=()=>{const e=qe(),t=nv(),n=tv("vuepress-color-scheme",e.value.colorMode),r=M({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(a){a===t.value?n.value="auto":n.value=a?"dark":"light"}});pn(au,r),ov(r)},ov=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Ye(()=>{it(e,t,{immediate:!0})}),Ra(()=>t())},ou=(...e)=>{const n=wn().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:a}=r,o=oe(a)?a(n):a,i=ge(o)?{path:o}:o;return ou({hash:n.hash,query:n.query,params:n.params,...i})},gi=e=>{const t=ou(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let no=null,Jn=null;const iv={wait:()=>no,pending:()=>{no=new Promise(e=>Jn=e)},resolve:()=>{Jn==null||Jn(),no=null,Jn=null}},iu=()=>iv,su=Symbol("sidebarItems"),bi=()=>{const e=Ie(su);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},sv=()=>{const e=qe(),t=Ot(),n=M(()=>lv(t.value,e.value));pn(su,n)},lv=(e,t)=>{const n=e.sidebar??t.sidebar??"auto",r=e.sidebarDepth??t.sidebarDepth??2;return e.home||n===!1?[]:n==="auto"?uv(r):ee(n)?lu(n,r):ii(n)?fv(n,r):[]},cv=(e,t)=>({text:e.title,link:e.link,children:yi(e.children,t)}),yi=(e,t)=>t>0?e.map(n=>cv(n,t-1)):[],uv=e=>{const t=Gt();return[{text:t.value.title,children:yi(t.value.headers,e)}]},lu=(e,t)=>{const n=xn(),r=Gt(),a=o=>{var s;let i;if(ge(o)?i=gi(o):i=o,i.children)return{...i,children:i.children.map(l=>a(l))};if(i.link===n.path){const l=((s=r.value.headers[0])==null?void 0:s.level)===1?r.value.headers[0].children:r.value.headers;return{...i,children:yi(l,t)}}return i};return e.map(o=>a(o))},fv=(e,t)=>{const n=xn(),r=Oc(e,n.path),a=e[r]??[];return lu(a,t)},dv="719px",mv={mobile:dv};var hr;(function(e){e.MOBILE="mobile"})(hr||(hr={}));var Ol;const pv={[hr.MOBILE]:Number.parseInt((Ol=mv.mobile)==null?void 0:Ol.replace("px",""),10)},cu=(e,t)=>{const n=pv[e];Number.isInteger(n)&&Ye(()=>{t(n),window.addEventListener("resize",()=>t(n),!1),window.addEventListener("orientationchange",()=>t(n),!1)})},hv={},vv={class:"theme-default-content"};function gv(e,t){const n=wt("Content");return B(),te("div",vv,[ne(n)])}const bv=Ae(hv,[["render",gv],["__file","HomeContent.vue"]]),yv={key:0,class:"features"},_v=["innerHTML"],wv=de({__name:"HomeFeatures",setup(e){const t=Ot(),n=M(()=>ee(t.value.features)?t.value.features:[]);return(r,a)=>n.value.length?(B(),te("div",yv,[(B(!0),te(_e,null,Jt(n.value,o=>(B(),te("div",{key:o.title,class:"feature"},[le("h2",null,Ke(o.title),1),Oe(" changed from original to allow HTML in features "),le("p",{innerHTML:o.details},null,8,_v)]))),128))])):Oe("v-if",!0)}}),xv=Ae(wv,[["__file","HomeFeatures.vue"]]),kv=["innerHTML"],Ev=["textContent"],Cv=de({__name:"HomeFooter",setup(e){const t=Ot(),n=M(()=>t.value.footer),r=M(()=>t.value.footerHtml);return(a,o)=>n.value?(B(),te(_e,{key:0},[Oe(" eslint-disable-next-line vue/no-v-html "),r.value?(B(),te("div",{key:0,class:"footer",innerHTML:n.value},null,8,kv)):(B(),te("div",{key:1,class:"footer",textContent:Ke(n.value)},null,8,Ev))],64)):Oe("v-if",!0)}}),Sv=Ae(Cv,[["__file","HomeFooter.vue"]]),Av=["href","rel","target","aria-label"],Pv=de({inheritAttrs:!1,data(){return{hover:!1}}}),Ov=de({...Pv,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=xn(),r=Mc(),{item:a}=Oa(t),o=M(()=>Or(a.value.link)),i=M(()=>Tm(a.value.link)||Lm(a.value.link)),s=M(()=>{if(!i.value){if(a.value.target)return a.value.target;if(o.value)return"_blank"}}),l=M(()=>s.value==="_blank"),c=M(()=>!o.value&&!i.value&&!l.value),u=M(()=>{if(!i.value){if(a.value.rel)return a.value.rel;if(l.value)return"noopener noreferrer"}}),f=M(()=>a.value.ariaLabel||a.value.text),d=M(()=>{const w=Object.keys(r.value.locales);return w.length?!w.some(x=>x===a.value.link):a.value.link!=="/"}),g=M(()=>d.value?n.path.startsWith(a.value.link):!1),_=M(()=>c.value?a.value.activeMatch?new RegExp(a.value.activeMatch).test(n.path):g.value:!1);return(w,x)=>{const p=wt("RouterLink"),v=wt("font-awesome-icon"),k=wt("AutoLinkExternalIcon");return c.value?(B(),Le(p,wo({key:0,class:{"router-link-active":_.value},to:Q(a).link,"aria-label":f.value},w.$attrs),{default:ze(()=>[xe(w.$slots,"before"),kt(" "+Ke(Q(a).text)+" ",1),xe(w.$slots,"after")]),_:3},16,["class","to","aria-label"])):(B(),te("a",wo({key:1,class:"external-link",href:Q(a).link,rel:u.value,target:s.value,"aria-label":f.value,style:Q(a).style},w.$attrs),[xe(w.$slots,"before"),Q(a).icon?(B(),Le(v,{key:0,icon:Q(a).icon,size:"xl",onMouseover:x[0]||(x[0]=C=>w.hover=!0),onMouseleave:x[1]||(x[1]=C=>w.hover=!1),class:Je({"fa-fade":w.hover})},null,8,["icon","class"])):(B(),te(_e,{key:1},[kt(Ke(Q(a).text),1)],64)),l.value?(B(),Le(k,{key:2})):Oe("v-if",!0),xe(w.$slots,"after")],16,Av))}}}),mt=Ae(Ov,[["__file","AutoLink.vue"]]),Tv={class:"hero"},Lv={class:"hero-logo"},Iv=le("span",null," .net",-1),Rv={class:"description"},Nv={key:0,class:"actions"},$v=de({__name:"HomeHero",setup(e){const t=Ot(),n=li(),r=vi(),a=M(()=>r.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),o=M(()=>t.value.heroAlt||s.value||"hero"),i=M(()=>t.value.heroHeight||280),s=M(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello");M(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site");const l=M(()=>ee(t.value.actions)?t.value.actions.map(({text:u,link:f,type:d="primary"})=>({text:u,link:f,type:d})):[]),c=()=>{if(!a.value)return null;const u=ue("img",{src:ui(a.value),alt:o.value,height:i.value});return t.value.heroImageDark===void 0?u:ue(ci,()=>u)};return(u,f)=>(B(),te("header",Tv,[le("div",Lv,[ne(c,{style:{margin:"0"}}),Iv]),Oe(" changed from original template file to remove title and include JMeter link "),le("p",Rv,[kt(" Simple "),ne(mt,{item:{link:"https://jmeter.apache.org/",text:"JMeter"}},null,8,["item"]),kt(" performance tests .Net API ")]),l.value.length?(B(),te("p",Nv,[(B(!0),te(_e,null,Jt(l.value,d=>(B(),Le(mt,{key:d.text,class:Je(["action-button",[d.type]]),item:d},null,8,["class","item"]))),128))])):Oe("v-if",!0)]))}}),Mv=Ae($v,[["__file","HomeHero.vue"]]),Fv={class:"home"},Dv=de({__name:"Home",setup(e){return(t,n)=>(B(),te("main",Fv,[ne(Mv),ne(xv),ne(bv),ne(Sv)]))}}),zv=Ae(Dv,[["__file","Home.vue"]]),Hv=le("span",{style:{"font-size":"1.6rem"}}," .net",-1),jv=le("hr",{class:"vertical-divider"},null,-1),Bv=de({__name:"NavbarBrand",setup(e){fc(()=>{let c=document.createElement("noscript");c.innerHTML='',document.body.appendChild(c)});const t=Kn(),n=li(),r=qe(),a=vi(),o=M(()=>r.value.home||t.value),i=M(()=>n.value.title),s=M(()=>a.value&&r.value.logoDark!==void 0?r.value.logoDark:r.value.logo),l=()=>{if(!s.value)return null;const c=ue("img",{class:"logo",src:ui(s.value),alt:i.value});return r.value.logoDark===void 0?c:ue(ci,()=>c)};return(c,u)=>{const f=wt("RouterLink");return B(),te(_e,null,[ne(f,{to:o.value},{default:ze(()=>[ne(l,{style:{"margin-right":"0"}}),Hv,Oe(" Stripped site title from original theme ")]),_:1},8,["to"]),jv,ne(mt,{item:{link:"https://abstracta.github.io/jmeter-java-dsl",text:".java",style:"font-size: 1.6rem; color: #5599ff"}},null,8,["item"])],64)}}}),Uv=Ae(Bv,[["__file","NavbarBrand.vue"]]),Wv=de({__name:"DropdownTransition",setup(e){const t=r=>{r.style.height=r.scrollHeight+"px"},n=r=>{r.style.height=""};return(r,a)=>(B(),Le(Pr,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:ze(()=>[xe(r.$slots,"default")]),_:3}))}}),uu=Ae(Wv,[["__file","DropdownTransition.vue"]]),Kv=["aria-label"],qv={class:"title"},Yv=le("span",{class:"arrow down"},null,-1),Vv=["aria-label"],Gv={class:"title"},Xv={class:"navbar-dropdown"},Jv={class:"navbar-dropdown-subtitle"},Zv={key:1},Qv={class:"navbar-dropdown-subitem-wrapper"},eg=de({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=Oa(t),r=M(()=>n.value.ariaLabel||n.value.text),a=fe(!1),o=xn();it(()=>o.path,()=>{a.value=!1});const i=l=>{l.detail===0?a.value=!a.value:a.value=!1},s=(l,c)=>c[c.length-1]===l;return(l,c)=>(B(),te("div",{class:Je(["navbar-dropdown-wrapper",{open:a.value}])},[le("button",{class:"navbar-dropdown-title",type:"button","aria-label":r.value,onClick:i},[le("span",qv,Ke(Q(n).text),1),Yv],8,Kv),le("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":r.value,onClick:c[0]||(c[0]=u=>a.value=!a.value)},[le("span",Gv,Ke(Q(n).text),1),le("span",{class:Je(["arrow",a.value?"down":"right"])},null,2)],8,Vv),ne(uu,null,{default:ze(()=>[fa(le("ul",Xv,[(B(!0),te(_e,null,Jt(Q(n).children,u=>(B(),te("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(B(),te(_e,{key:0},[le("h4",Jv,[u.link?(B(),Le(mt,{key:0,item:u,onFocusout:f=>s(u,Q(n).children)&&u.children.length===0&&(a.value=!1)},null,8,["item","onFocusout"])):(B(),te("span",Zv,Ke(u.text),1))]),le("ul",Qv,[(B(!0),te(_e,null,Jt(u.children,f=>(B(),te("li",{key:f.link,class:"navbar-dropdown-subitem"},[ne(mt,{item:f,onFocusout:d=>s(f,u.children)&&s(u,Q(n).children)&&(a.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(B(),Le(mt,{key:1,item:u,onFocusout:f=>s(u,Q(n).children)&&(a.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[va,a.value]])]),_:1})],2))}}),tg=Ae(eg,[["__file","NavbarDropdown.vue"]]),Gs=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),ng=(e,t)=>{if(t.hash===e)return!0;const n=Gs(t.path),r=Gs(e);return n===r},fu=(e,t)=>e.link&&ng(e.link,t)?!0:e.children?e.children.some(n=>fu(n,t)):!1,du=e=>!Or(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,rg={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},ag=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=du(e);return n!==null?rg[n]:null},og=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:a})=>{if(!r)return null;const o=ag({docsRepo:e,editLinkPattern:a});return o?o.replace(/:repo/,Or(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,Pc(`${Ac(n)}/${r}`)):null},ig={key:0,class:"navbar-items"},sg=de({__name:"NavbarItems",setup(e){const t=()=>{const u=wn(),f=Kn(),d=Mc(),g=li(),_=rv(),w=qe();return M(()=>{const x=Object.keys(d.value.locales);if(x.length<2)return[];const p=u.currentRoute.value.path,v=u.currentRoute.value.fullPath;return[{text:`${w.value.selectLanguageText}`,ariaLabel:`${w.value.selectLanguageAriaLabel??w.value.selectLanguageText}`,children:x.map(C=>{var H,X;const N=((H=d.value.locales)==null?void 0:H[C])??{},q=((X=_.value.locales)==null?void 0:X[C])??{},L=`${N.lang}`,b=q.selectLanguageName??L;let F;if(L===g.value.lang)F=v;else{const P=p.replace(f.value,C);u.getRoutes().some(R=>R.path===P)?F=v.replace(p,P):F=q.home??C}return{text:b,link:F}})}]})},n=()=>{const u=qe(),f=M(()=>u.value.repo),d=M(()=>f.value?du(f.value):null),g=M(()=>f.value&&!Or(f.value)?`https://github.com/${f.value}`:f.value),_=M(()=>g.value?u.value.repoLabel?u.value.repoLabel:d.value===null?"Source":d.value:null);return M(()=>!g.value||!_.value?[]:[{text:_.value,link:g.value}])},r=u=>ge(u)?gi(u):u.children?{...u,children:u.children.map(r)}:u,a=()=>{const u=qe();return M(()=>(u.value.navbar||[]).map(r))},o=fe(!1),i=a(),s=t(),l=n(),c=M(()=>[...i.value,...s.value,...l.value]);return cu(hr.MOBILE,u=>{window.innerWidthc.value.length?(B(),te("nav",ig,[(B(!0),te(_e,null,Jt(c.value,d=>(B(),te("div",{key:d.text,class:"navbar-item"},[d.children?(B(),Le(tg,{key:0,item:d,class:Je(o.value?"mobile":"")},null,8,["item","class"])):(B(),Le(mt,{key:1,item:d},null,8,["item"]))]))),128))])):Oe("v-if",!0)}}),mu=Ae(sg,[["__file","NavbarItems.vue"]]),lg=["title"],cg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},ug=zd('',9),fg=[ug],dg={class:"icon",focusable:"false",viewBox:"0 0 32 32"},mg=le("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),pg=[mg],hg=de({__name:"ToggleColorModeButton",setup(e){const t=qe(),n=vi(),r=()=>{n.value=!n.value};return(a,o)=>(B(),te("button",{class:"toggle-color-mode-button",title:Q(t).toggleColorMode,onClick:r},[fa((B(),te("svg",cg,fg,512)),[[va,!Q(n)]]),fa((B(),te("svg",dg,pg,512)),[[va,Q(n)]])],8,lg))}}),vg=Ae(hg,[["__file","ToggleColorModeButton.vue"]]),gg=["title"],bg=le("div",{class:"icon","aria-hidden":"true"},[le("span"),le("span"),le("span")],-1),yg=[bg],_g=de({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=qe();return(n,r)=>(B(),te("div",{class:"toggle-sidebar-button",title:Q(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:r[0]||(r[0]=a=>n.$emit("toggle"))},yg,8,gg))}}),wg=Ae(_g,[["__file","ToggleSidebarButton.vue"]]),xg=de({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=qe(),n=fe(null),r=fe(null),a=fe(0),o=M(()=>a.value?{maxWidth:a.value+"px"}:{});cu(hr.MOBILE,s=>{var c;const l=i(n.value,"paddingLeft")+i(n.value,"paddingRight");window.innerWidth{const c=wt("NavbarSearch");return B(),te("header",{ref_key:"navbar",ref:n,class:"navbar"},[ne(wg,{onToggle:l[0]||(l[0]=u=>s.$emit("toggle-sidebar"))}),le("span",{ref_key:"navbarBrand",ref:r},[ne(Uv)],512),le("div",{class:"navbar-items-wrapper",style:xr(o.value)},[xe(s.$slots,"before"),ne(mu,{class:"can-hide"}),xe(s.$slots,"after"),Q(t).colorModeSwitch?(B(),Le(vg,{key:0})):Oe("v-if",!0),ne(c)],4)],512)}}}),kg=Ae(xg,[["__file","Navbar.vue"]]),Eg={class:"page-meta"},Cg={key:0,class:"meta-item edit-link"},Sg={key:1,class:"meta-item last-updated"},Ag={class:"meta-item-label"},Pg={class:"meta-item-info"},Og={key:2,class:"meta-item contributors"},Tg={class:"meta-item-label"},Lg={class:"meta-item-info"},Ig=["title"],Rg=de({__name:"PageMeta",setup(e){const t=()=>{const l=qe(),c=Gt(),u=Ot();return M(()=>{if(!(u.value.editLink??l.value.editLink??!0))return null;const{repo:d,docsRepo:g=d,docsBranch:_="main",docsDir:w="",editLinkText:x}=l.value;if(!g)return null;const p=og({docsRepo:g,docsBranch:_,docsDir:w,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??l.value.editLinkPattern});return p?{text:x??"Edit this page",link:p}:null})},n=()=>{const l=qe(),c=Gt(),u=Ot();return M(()=>{var g,_;return!(u.value.lastUpdated??l.value.lastUpdated??!0)||!((g=c.value.git)!=null&&g.updatedTime)?null:new Date((_=c.value.git)==null?void 0:_.updatedTime).toLocaleString()})},r=()=>{const l=qe(),c=Gt(),u=Ot();return M(()=>{var d;return u.value.contributors??l.value.contributors??!0?((d=c.value.git)==null?void 0:d.contributors)??null:null})},a=qe(),o=t(),i=n(),s=r();return(l,c)=>{const u=wt("ClientOnly");return B(),te("footer",Eg,[Q(o)?(B(),te("div",Cg,[ne(mt,{class:"meta-item-label",item:Q(o)},null,8,["item"])])):Oe("v-if",!0),Q(i)?(B(),te("div",Sg,[le("span",Ag,Ke(Q(a).lastUpdatedText)+": ",1),ne(u,null,{default:ze(()=>[le("span",Pg,Ke(Q(i)),1)]),_:1})])):Oe("v-if",!0),Q(s)&&Q(s).length?(B(),te("div",Og,[le("span",Tg,Ke(Q(a).contributorsText)+": ",1),le("span",Lg,[(B(!0),te(_e,null,Jt(Q(s),(f,d)=>(B(),te(_e,{key:d},[le("span",{class:"contributor",title:`email: ${f.email}`},Ke(f.name),9,Ig),d!==Q(s).length-1?(B(),te(_e,{key:0},[kt(", ")],64)):Oe("v-if",!0)],64))),128))])])):Oe("v-if",!0)])}}}),Ng=Ae(Rg,[["__file","PageMeta.vue"]]),$g={key:0,class:"page-nav"},Mg={class:"inner"},Fg={key:0,class:"prev"},Dg={key:1,class:"next"},zg=de({__name:"PageNav",setup(e){const t=l=>l===!1?null:ge(l)?gi(l):ii(l)?l:!1,n=(l,c,u)=>{const f=l.findIndex(d=>d.link===c);if(f!==-1){const d=l[f+u];return d!=null&&d.link?d:null}for(const d of l)if(d.children){const g=n(d.children,c,u);if(g)return g}return null},r=Ot(),a=bi(),o=xn(),i=M(()=>{const l=t(r.value.prev);return l!==!1?l:n(a.value,o.path,-1)}),s=M(()=>{const l=t(r.value.next);return l!==!1?l:n(a.value,o.path,1)});return(l,c)=>i.value||s.value?(B(),te("nav",$g,[le("p",Mg,[i.value?(B(),te("span",Fg,[ne(mt,{item:i.value},null,8,["item"])])):Oe("v-if",!0),s.value?(B(),te("span",Dg,[ne(mt,{item:s.value},null,8,["item"])])):Oe("v-if",!0)])])):Oe("v-if",!0)}}),Hg=Ae(zg,[["__file","PageNav.vue"]]),jg={class:"page"},Bg={class:"theme-default-content"},Ug=de({__name:"Page",setup(e){return(t,n)=>{const r=wt("Content");return B(),te("main",jg,[xe(t.$slots,"top"),le("div",Bg,[xe(t.$slots,"content-top"),ne(r),xe(t.$slots,"content-bottom")]),ne(Ng),ne(Hg),xe(t.$slots,"bottom")])}}}),Wg=Ae(Ug,[["__file","Page.vue"]]),Kg=["onKeydown"],qg={class:"sidebar-item-children"},Yg=de({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:r}=Oa(t),a=xn(),o=wn(),i=M(()=>fu(n.value,a)),s=M(()=>({"sidebar-item":!0,"sidebar-heading":r.value===0,active:i.value,collapsible:n.value.collapsible})),l=M(()=>n.value.collapsible?i.value:!0),[c,u]=Th(l.value),f=g=>{n.value.collapsible&&(g.preventDefault(),u())},d=o.afterEach(g=>{Cr(()=>{c.value=l.value})});return Ar(()=>{d()}),(g,_)=>{var x;const w=wt("SidebarItem",!0);return B(),te("li",null,[Q(n).link?(B(),Le(mt,{key:0,class:Je(s.value),item:Q(n)},null,8,["class","item"])):(B(),te("p",{key:1,tabindex:"0",class:Je(s.value),onClick:f,onKeydown:wm(f,["enter"])},[kt(Ke(Q(n).text)+" ",1),Q(n).collapsible?(B(),te("span",{key:0,class:Je(["arrow",Q(c)?"down":"right"])},null,2)):Oe("v-if",!0)],42,Kg)),(x=Q(n).children)!=null&&x.length?(B(),Le(uu,{key:2},{default:ze(()=>[fa(le("ul",qg,[(B(!0),te(_e,null,Jt(Q(n).children,p=>(B(),Le(w,{key:`${Q(r)}${p.text}${p.link}`,item:p,depth:Q(r)+1},null,8,["item","depth"]))),128))],512),[[va,Q(c)]])]),_:1})):Oe("v-if",!0)])}}}),Vg=Ae(Yg,[["__file","SidebarItem.vue"]]),Gg={key:0,class:"sidebar-items"},Xg=de({__name:"SidebarItems",setup(e){const t=xn(),n=bi();return Ye(()=>{it(()=>t.hash,r=>{const a=document.querySelector(".sidebar");if(!a)return;const o=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${r}"]`);if(!o)return;const{top:i,height:s}=a.getBoundingClientRect(),{top:l,height:c}=o.getBoundingClientRect();li+s&&o.scrollIntoView(!1)})}),(r,a)=>Q(n).length?(B(),te("ul",Gg,[(B(!0),te(_e,null,Jt(Q(n),o=>(B(),Le(Vg,{key:`${o.text}${o.link}`,item:o},null,8,["item"]))),128))])):Oe("v-if",!0)}}),Jg=Ae(Xg,[["__file","SidebarItems.vue"]]),Zg={class:"sidebar"},Qg=de({__name:"Sidebar",setup(e){return(t,n)=>(B(),te("aside",Zg,[ne(mu),xe(t.$slots,"top"),ne(Jg),xe(t.$slots,"bottom")]))}}),eb=Ae(Qg,[["__file","Sidebar.vue"]]),tb=de({__name:"Layout",setup(e){const t=Gt(),n=Ot(),r=qe(),a=M(()=>n.value.navbar!==!1&&r.value.navbar!==!1),o=bi(),i=fe(!1),s=x=>{i.value=typeof x=="boolean"?x:!i.value},l={x:0,y:0},c=x=>{l.x=x.changedTouches[0].clientX,l.y=x.changedTouches[0].clientY},u=x=>{const p=x.changedTouches[0].clientX-l.x,v=x.changedTouches[0].clientY-l.y;Math.abs(p)>Math.abs(v)&&Math.abs(p)>40&&(p>0&&l.x<=80?s(!0):s(!1))},f=M(()=>[{"no-navbar":!a.value,"no-sidebar":!o.value.length,"sidebar-open":i.value},n.value.pageClass]);let d;Ye(()=>{d=wn().afterEach(()=>{s(!1)})}),Ra(()=>{d()});const g=iu(),_=g.resolve,w=g.pending;return(x,p)=>(B(),te("div",{class:Je(["theme-container",f.value]),onTouchstart:c,onTouchend:u},[xe(x.$slots,"navbar",{},()=>[a.value?(B(),Le(kg,{key:0,onToggleSidebar:s},{before:ze(()=>[xe(x.$slots,"navbar-before")]),after:ze(()=>[xe(x.$slots,"navbar-after")]),_:3})):Oe("v-if",!0)]),le("div",{class:"sidebar-mask",onClick:p[0]||(p[0]=v=>s(!1))}),xe(x.$slots,"sidebar",{},()=>[ne(eb,null,{top:ze(()=>[xe(x.$slots,"sidebar-top")]),bottom:ze(()=>[xe(x.$slots,"sidebar-bottom")]),_:3})]),xe(x.$slots,"page",{},()=>[Q(n).home?(B(),Le(zv,{key:0})):(B(),Le(Pr,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:Q(_),onBeforeLeave:Q(w)},{default:ze(()=>[(B(),Le(Wg,{key:Q(t).path},{top:ze(()=>[xe(x.$slots,"page-top")]),"content-top":ze(()=>[xe(x.$slots,"page-content-top")]),"content-bottom":ze(()=>[xe(x.$slots,"page-content-bottom")]),bottom:ze(()=>[xe(x.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),nb=Ae(tb,[["__file","Layout.vue"]]),rb={class:"theme-container"},ab={class:"page"},ob={class:"theme-default-content"},ib=le("h1",null,"404",-1),sb=de({__name:"NotFound",setup(e){const t=Kn(),n=qe(),r=n.value.notFound??["Not Found"],a=()=>r[Math.floor(Math.random()*r.length)],o=n.value.home??t.value,i=n.value.backToHome??"Back to home";return(s,l)=>{const c=wt("RouterLink");return B(),te("div",rb,[le("main",ab,[le("div",ob,[ib,le("blockquote",null,Ke(a()),1),ne(c,{to:Q(o)},{default:ze(()=>[kt(Ke(Q(i)),1)]),_:1},8,["to"])])])])}}}),lb=Ae(sb,[["__file","NotFound.vue"]]);const cb=ht({enhance({app:e,router:t}){e.component("Badge",mh),e.component("CodeGroup",ph),e.component("CodeGroupItem",bh),e.component("AutoLinkExternalIcon",()=>{const r=e.component("ExternalLinkIcon");return r?ue(r):null}),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ue(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await iu().wait(),n(...r))},setup(){av(),sv()},layouts:{Layout:nb,NotFound:lb}}),ub=e=>e instanceof Element?document.activeElement===e&&(["TEXTAREA","SELECT","INPUT"].includes(e.tagName)||e.hasAttribute("contenteditable")):!1,fb=(e,t)=>t.some(n=>{if(ge(n))return n===e.key;const{key:r,ctrl:a=!1,shift:o=!1,alt:i=!1}=n;return r===e.key&&a===e.ctrlKey&&o===e.shiftKey&&i===e.altKey}),db=/[^\x00-\x7F]/,mb=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),Xs=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),Js=(e,t)=>{const n=t.join(" "),r=mb(e);if(db.test(e))return r.some(i=>n.toLowerCase().indexOf(i)>-1);const a=e.endsWith(" ");return new RegExp(r.map((i,s)=>r.length===s+1&&!a?`(?=.*\\b${Xs(i)})`:`(?=.*\\b${Xs(i)}\\b)`).join("")+".+","gi").test(n)},pb=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const n=r=>{e.value&&fb(r,t.value)&&!ub(r.target)&&(r.preventDefault(),e.value.focus())};Ye(()=>{document.addEventListener("keydown",n)}),Ar(()=>{document.removeEventListener("keydown",n)})},hb=[{title:"",headers:[{level:2,title:"Example",slug:"example",link:"#example",children:[]}],path:"/",pathLocale:"/",extraFields:[]},{title:"User guide",headers:[{level:2,title:"Setup",slug:"setup",link:"#setup",children:[]},{level:2,title:"Simple HTTP test plan",slug:"simple-http-test-plan",link:"#simple-http-test-plan",children:[]},{level:2,title:"Run test at scale",slug:"run-test-at-scale",link:"#run-test-at-scale",children:[{level:3,title:"Azure Load Testing",slug:"azure-load-testing",link:"#azure-load-testing",children:[]},{level:3,title:"BlazeMeter",slug:"blazemeter",link:"#blazemeter",children:[]}]},{level:2,title:"Advanced threads configuration",slug:"advanced-threads-configuration",link:"#advanced-threads-configuration",children:[{level:3,title:"Thread ramps and holds",slug:"thread-ramps-and-holds",link:"#thread-ramps-and-holds",children:[]}]},{level:2,title:"Test plan debugging",slug:"test-plan-debugging",link:"#test-plan-debugging",children:[{level:3,title:"View results tree",slug:"view-results-tree",link:"#view-results-tree",children:[]},{level:3,title:"Debug JMeter code",slug:"debug-jmeter-code",link:"#debug-jmeter-code",children:[]},{level:3,title:"Dummy sampler",slug:"dummy-sampler",link:"#dummy-sampler",children:[]},{level:3,title:"Test plan review un JMeter GUI",slug:"test-plan-review-un-jmeter-gui",link:"#test-plan-review-un-jmeter-gui",children:[]}]},{level:2,title:"Reporting",slug:"reporting",link:"#reporting",children:[{level:3,title:"Log requests and responses",slug:"log-requests-and-responses",link:"#log-requests-and-responses",children:[]}]},{level:2,title:"Response processing",slug:"response-processing",link:"#response-processing",children:[{level:3,title:"Use part of a response in a subsequent request (aka correlation)",slug:"use-part-of-a-response-in-a-subsequent-request-aka-correlation",link:"#use-part-of-a-response-in-a-subsequent-request-aka-correlation",children:[{level:4,title:"Regular expressions extraction",slug:"regular-expressions-extraction",link:"#regular-expressions-extraction",children:[]}]}]},{level:2,title:"Protocols",slug:"protocols",link:"#protocols",children:[{level:3,title:"HTTP",slug:"http",link:"#http",children:[{level:4,title:"Methods & body",slug:"methods-body",link:"#methods-body",children:[]},{level:4,title:"Headers",slug:"headers",link:"#headers",children:[]},{level:4,title:"Cookies & caching",slug:"cookies-caching",link:"#cookies-caching",children:[]}]}]}],path:"/guide/",pathLocale:"/",extraFields:[]},{title:"Support",headers:[{level:2,title:"Community Support",slug:"community-support",link:"#community-support",children:[]},{level:2,title:"Enterprise Support by Abstracta",slug:"enterprise-support-by-abstracta",link:"#enterprise-support-by-abstracta",children:[]},{level:2,title:"Industry Support",slug:"industry-support",link:"#industry-support",children:[]}],path:"/support/",pathLocale:"/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],vb=fe(hb),gb=()=>vb,bb=({searchIndex:e,routeLocale:t,query:n,maxSuggestions:r})=>{const a=M(()=>e.value.filter(o=>o.pathLocale===t.value));return M(()=>{const o=n.value.trim().toLowerCase();if(!o)return[];const i=[],s=(l,c)=>{Js(o,[c.title])&&i.push({link:`${l.path}#${c.slug}`,title:l.title,header:c.title});for(const u of c.children){if(i.length>=r.value)return;s(l,u)}};for(const l of a.value){if(i.length>=r.value)break;if(Js(o,[l.title,...l.extraFields])){i.push({link:l.path,title:l.title});continue}for(const c of l.headers){if(i.length>=r.value)break;s(l,c)}}return i})},yb=e=>{const t=fe(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},_b=de({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:n,maxSuggestions:r}=Oa(e),a=wn(),o=Kn(),i=gb(),s=fe(null),l=fe(!1),c=fe(""),u=M(()=>t.value[o.value]??{}),f=bb({searchIndex:i,routeLocale:o,query:c,maxSuggestions:r}),{focusIndex:d,focusNext:g,focusPrev:_}=yb(f);pb({input:s,hotKeys:n});const w=M(()=>l.value&&!!f.value.length),x=()=>{w.value&&_()},p=()=>{w.value&&g()},v=k=>{if(!w.value)return;const C=f.value[k];C&&a.push(C.link).then(()=>{c.value="",d.value=0})};return()=>ue("form",{class:"search-box",role:"search"},[ue("input",{ref:s,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>l.value=!0,onBlur:()=>l.value=!1,onInput:k=>c.value=k.target.value,onKeydown:k=>{switch(k.key){case"ArrowUp":{x();break}case"ArrowDown":{p();break}case"Enter":{k.preventDefault(),v(d.value);break}}}}),w.value&&ue("ul",{class:"suggestions",onMouseleave:()=>d.value=-1},f.value.map(({link:k,title:C,header:N},q)=>ue("li",{class:["suggestion",{focus:d.value===q}],onMouseenter:()=>d.value=q,onMousedown:()=>v(q)},ue("a",{href:k,onClick:L=>L.preventDefault()},[ue("span",{class:"page-title"},C),N&&ue("span",{class:"page-header"},`> ${N}`)]))))])}});const wb={},xb=["s","/"],kb=10,Eb=ht({enhance({app:e}){e.component("SearchBox",t=>ue(_b,{locales:wb,hotKeys:xb,maxSuggestions:kb,...t}))}});const Cb={},Sb=ht({enhance:({app:e})=>{},setup:()=>{}});function Ab(){const e=fe(!1);return ai()&&Ye(()=>{e.value=!0}),e}function Pb(e){return Ab(),M(()=>!!e())}const Ob=()=>Pb(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),Tb=()=>{const e=Ob();return M(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},Lb=e=>{const t=Kn();return M(()=>e[t.value])},Ib=800,Rb=2e3,Nb={"/":{copy:"Copy code",copied:"Copied",hint:"Copied successfully"}},$b=!1,Mb=['.theme-default-content div[class*="language-"] pre'],Zs=!1,ro=new Map,Fb=()=>{const{copy:e}=qh({legacy:!0}),t=Lb(Nb),n=Gt(),r=Tb(),a=s=>{if(!s.hasAttribute("copy-code-registered")){const l=document.createElement("button");l.type="button",l.classList.add("copy-code-button"),l.innerHTML='
',l.setAttribute("aria-label",t.value.copy),l.setAttribute("data-copied",t.value.copied),s.parentElement&&s.parentElement.insertBefore(l,s),s.setAttribute("copy-code-registered","")}},o=()=>Cr().then(()=>new Promise(s=>{setTimeout(()=>{Mb.forEach(l=>{document.querySelectorAll(l).forEach(a)}),s()},Ib)})),i=(s,l,c)=>{let{innerText:u=""}=l;/language-(shellscript|shell|bash|sh|zsh)/.test(s.classList.toString())&&(u=u.replace(/^ *(\$|>) /gm,"")),e(u).then(()=>{c.classList.add("copied"),clearTimeout(ro.get(c));const f=setTimeout(()=>{c.classList.remove("copied"),c.blur(),ro.delete(c)},Rb);ro.set(c,f)})};Ye(()=>{(!r.value||Zs)&&o(),_a("click",s=>{const l=s.target;if(l.matches('div[class*="language-"] > button.copy')){const c=l.parentElement,u=l.nextElementSibling;u&&i(c,u,l)}else if(l.matches('div[class*="language-"] div.copy-icon')){const c=l.parentElement,u=c.parentElement,f=c.nextElementSibling;f&&i(u,f,c)}}),it(()=>n.value.path,()=>{(!r.value||Zs)&&o()})})};var Db=ht({setup:()=>{Fb()}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var on=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(P){function R(){}P(R,R)},a=function(P){var R=P.target;if(R===F){_();return}k.indexOf(R)!==-1&&w({target:R})},o=function(){if(!(N||!b.original)){var P=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(q-P)>L.scrollOffset&&setTimeout(_,150)}},i=function(P){var R=P.key||P.keyCode;(R==="Escape"||R==="Esc"||R===27)&&_()},s=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=P;if(P.background&&(F.style.background=P.background),P.container&&P.container instanceof Object&&(R.container=on({},L.container,P.container)),P.template){var $=ra(P.template)?P.template:document.querySelector(P.template);R.template=$}return L=on({},L,R),k.forEach(function(se){se.dispatchEvent(Cn("medium-zoom:update",{detail:{zoom:H}}))}),H},l=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(on({},L,P))},c=function(){for(var P=arguments.length,R=Array(P),$=0;$0?R.reduce(function(K,ae){return[].concat(K,el(ae))},[]):k;return se.forEach(function(K){K.classList.remove("medium-zoom-image"),K.dispatchEvent(Cn("medium-zoom:detach",{detail:{zoom:H}}))}),k=k.filter(function(K){return se.indexOf(K)===-1}),H},f=function(P,R){var $=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return k.forEach(function(se){se.addEventListener("medium-zoom:"+P,R,$)}),C.push({type:"medium-zoom:"+P,listener:R,options:$}),H},d=function(P,R){var $=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return k.forEach(function(se){se.removeEventListener("medium-zoom:"+P,R,$)}),C=C.filter(function(se){return!(se.type==="medium-zoom:"+P&&se.listener.toString()===R.toString())}),H},g=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=P.target,$=function(){var K={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},ae=void 0,ie=void 0;if(L.container)if(L.container instanceof Object)K=on({},K,L.container),ae=K.width-K.left-K.right-L.margin*2,ie=K.height-K.top-K.bottom-L.margin*2;else{var je=ra(L.container)?L.container:document.querySelector(L.container),De=je.getBoundingClientRect(),Ve=De.width,Be=De.height,Mt=De.left,Ft=De.top;K=on({},K,{width:Ve,height:Be,left:Mt,top:Ft})}ae=ae||K.width-L.margin*2,ie=ie||K.height-L.margin*2;var vt=b.zoomedHd||b.original,Fe=Qs(vt)?ae:vt.naturalWidth||ae,S=Qs(vt)?ie:vt.naturalHeight||ie,U=vt.getBoundingClientRect(),D=U.top,G=U.left,me=U.width,m=U.height,h=Math.min(Math.max(me,Fe),ae)/me,y=Math.min(Math.max(m,S),ie)/m,E=Math.min(h,y),A=(-G+(ae-me)/2+L.margin+K.left)/E,O=(-D+(ie-m)/2+L.margin+K.top)/E,j="scale("+E+") translate3d("+A+"px, "+O+"px, 0)";b.zoomed.style.transform=j,b.zoomedHd&&(b.zoomedHd.style.transform=j)};return new r(function(se){if(R&&k.indexOf(R)===-1){se(H);return}var K=function Ve(){N=!1,b.zoomed.removeEventListener("transitionend",Ve),b.original.dispatchEvent(Cn("medium-zoom:opened",{detail:{zoom:H}})),se(H)};if(b.zoomed){se(H);return}if(R)b.original=R;else if(k.length>0){var ae=k;b.original=ae[0]}else{se(H);return}if(b.original.dispatchEvent(Cn("medium-zoom:open",{detail:{zoom:H}})),q=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,N=!0,b.zoomed=jb(b.original),document.body.appendChild(F),L.template){var ie=ra(L.template)?L.template:document.querySelector(L.template);b.template=document.createElement("div"),b.template.appendChild(ie.content.cloneNode(!0)),document.body.appendChild(b.template)}if(b.original.parentElement&&b.original.parentElement.tagName==="PICTURE"&&b.original.currentSrc&&(b.zoomed.src=b.original.currentSrc),document.body.appendChild(b.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),b.original.classList.add("medium-zoom-image--hidden"),b.zoomed.classList.add("medium-zoom-image--opened"),b.zoomed.addEventListener("click",_),b.zoomed.addEventListener("transitionend",K),b.original.getAttribute("data-zoom-src")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("srcset"),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading"),b.zoomedHd.src=b.zoomed.getAttribute("data-zoom-src"),b.zoomedHd.onerror=function(){clearInterval(je),console.warn("Unable to reach the zoom image target "+b.zoomedHd.src),b.zoomedHd=null,$()};var je=setInterval(function(){b.zoomedHd.complete&&(clearInterval(je),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",_),document.body.appendChild(b.zoomedHd),$())},10)}else if(b.original.hasAttribute("srcset")){b.zoomedHd=b.zoomed.cloneNode(),b.zoomedHd.removeAttribute("sizes"),b.zoomedHd.removeAttribute("loading");var De=b.zoomedHd.addEventListener("load",function(){b.zoomedHd.removeEventListener("load",De),b.zoomedHd.classList.add("medium-zoom-image--opened"),b.zoomedHd.addEventListener("click",_),document.body.appendChild(b.zoomedHd),$()})}else $()})},_=function(){return new r(function(P){if(N||!b.original){P(H);return}var R=function $(){b.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(b.zoomed),b.zoomedHd&&document.body.removeChild(b.zoomedHd),document.body.removeChild(F),b.zoomed.classList.remove("medium-zoom-image--opened"),b.template&&document.body.removeChild(b.template),N=!1,b.zoomed.removeEventListener("transitionend",$),b.original.dispatchEvent(Cn("medium-zoom:closed",{detail:{zoom:H}})),b.original=null,b.zoomed=null,b.zoomedHd=null,b.template=null,P(H)};N=!0,document.body.classList.remove("medium-zoom--opened"),b.zoomed.style.transform="",b.zoomedHd&&(b.zoomedHd.style.transform=""),b.template&&(b.template.style.transition="opacity 150ms",b.template.style.opacity=0),b.original.dispatchEvent(Cn("medium-zoom:close",{detail:{zoom:H}})),b.zoomed.addEventListener("transitionend",R)})},w=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},R=P.target;return b.original?_():g({target:R})},x=function(){return L},p=function(){return k},v=function(){return b.original},k=[],C=[],N=!1,q=0,L=n,b={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?L=t:(t||typeof t=="string")&&c(t),L=on({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},L);var F=Hb(L.background);document.addEventListener("click",a),document.addEventListener("keyup",i),document.addEventListener("scroll",o),window.addEventListener("resize",_);var H={open:g,close:_,toggle:w,update:s,clone:l,attach:c,detach:u,on:f,off:d,getOptions:x,getImages:p,getZoomedImage:v};return H};function Ub(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",n==="top"&&r.firstChild?r.insertBefore(a,r.firstChild):r.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}}var Wb=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Ub(Wb);const Kb=Bb,qb=Symbol("mediumZoom");const Yb="*:is(img):not(.card img):not(a img)",Vb={},Gb=500,Xb=ht({enhance({app:e,router:t}){const n=Kb(Vb);n.refresh=(r=Yb)=>{n.detach(),n.attach(r)},e.provide(qb,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),Gb)})}});function tl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function W(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1;a--){var o=n[a],i=(o.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(i)>-1&&(r=o)}return Se.head.insertBefore(t,r),e}}var wy="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function _r(){for(var e=12,t="";e-- >0;)t+=wy[Math.random()*62|0];return t}function qn(e){for(var t=[],n=(e||[]).length>>>0;n--;)t[n]=e[n];return t}function Ci(e){return e.classList?qn(e.classList):(e.getAttribute("class")||"").split(" ").filter(function(t){return t})}function Cu(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function xy(e){return Object.keys(e||{}).reduce(function(t,n){return t+"".concat(n,'="').concat(Cu(e[n]),'" ')},"").trim()}function Da(e){return Object.keys(e||{}).reduce(function(t,n){return t+"".concat(n,": ").concat(e[n].trim(),";")},"")}function Si(e){return e.size!==_t.size||e.x!==_t.x||e.y!==_t.y||e.rotate!==_t.rotate||e.flipX||e.flipY}function ky(e){var t=e.transform,n=e.containerWidth,r=e.iconWidth,a={transform:"translate(".concat(n/2," 256)")},o="translate(".concat(t.x*32,", ").concat(t.y*32,") "),i="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),s="rotate(".concat(t.rotate," 0 0)"),l={transform:"".concat(o," ").concat(i," ").concat(s)},c={transform:"translate(".concat(r/2*-1," -256)")};return{outer:a,inner:l,path:c}}function Ey(e){var t=e.transform,n=e.width,r=n===void 0?Ao:n,a=e.height,o=a===void 0?Ao:a,i=e.startCentered,s=i===void 0?!1:i,l="";return s&&bu?l+="translate(".concat(t.x/Bt-r/2,"em, ").concat(t.y/Bt-o/2,"em) "):s?l+="translate(calc(-50% + ".concat(t.x/Bt,"em), calc(-50% + ").concat(t.y/Bt,"em)) "):l+="translate(".concat(t.x/Bt,"em, ").concat(t.y/Bt,"em) "),l+="scale(".concat(t.size/Bt*(t.flipX?-1:1),", ").concat(t.size/Bt*(t.flipY?-1:1),") "),l+="rotate(".concat(t.rotate,"deg) "),l}var Cy=`:root, :host { + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid"; + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular"; + --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light"; + --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin"; + --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone"; + --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp"; + --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; +} + +svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa { + overflow: visible; + box-sizing: content-box; +} + +.svg-inline--fa { + display: var(--fa-display, inline-block); + height: 1em; + overflow: visible; + vertical-align: -0.125em; +} +.svg-inline--fa.fa-2xs { + vertical-align: 0.1em; +} +.svg-inline--fa.fa-xs { + vertical-align: 0em; +} +.svg-inline--fa.fa-sm { + vertical-align: -0.0714285705em; +} +.svg-inline--fa.fa-lg { + vertical-align: -0.2em; +} +.svg-inline--fa.fa-xl { + vertical-align: -0.25em; +} +.svg-inline--fa.fa-2xl { + vertical-align: -0.3125em; +} +.svg-inline--fa.fa-pull-left { + margin-right: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-pull-right { + margin-left: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-li { + width: var(--fa-li-width, 2em); + top: 0.25em; +} +.svg-inline--fa.fa-fw { + width: var(--fa-fw-width, 1.25em); +} + +.fa-layers svg.svg-inline--fa { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; +} + +.fa-layers-counter, .fa-layers-text { + display: inline-block; + position: absolute; + text-align: center; +} + +.fa-layers { + display: inline-block; + height: 1em; + position: relative; + text-align: center; + vertical-align: -0.125em; + width: 1em; +} +.fa-layers svg.svg-inline--fa { + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-text { + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-counter { + background-color: var(--fa-counter-background-color, #ff253a); + border-radius: var(--fa-counter-border-radius, 1em); + box-sizing: border-box; + color: var(--fa-inverse, #fff); + line-height: var(--fa-counter-line-height, 1); + max-width: var(--fa-counter-max-width, 5em); + min-width: var(--fa-counter-min-width, 1.5em); + overflow: hidden; + padding: var(--fa-counter-padding, 0.25em 0.5em); + right: var(--fa-right, 0); + text-overflow: ellipsis; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-counter-scale, 0.25)); + transform: scale(var(--fa-counter-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-bottom-right { + bottom: var(--fa-bottom, 0); + right: var(--fa-right, 0); + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom right; + transform-origin: bottom right; +} + +.fa-layers-bottom-left { + bottom: var(--fa-bottom, 0); + left: var(--fa-left, 0); + right: auto; + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom left; + transform-origin: bottom left; +} + +.fa-layers-top-right { + top: var(--fa-top, 0); + right: var(--fa-right, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-top-left { + left: var(--fa-left, 0); + right: auto; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top left; + transform-origin: top left; +} + +.fa-1x { + font-size: 1em; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-6x { + font-size: 6em; +} + +.fa-7x { + font-size: 7em; +} + +.fa-8x { + font-size: 8em; +} + +.fa-9x { + font-size: 9em; +} + +.fa-10x { + font-size: 10em; +} + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; +} + +.fa-xs { + font-size: 0.75em; + line-height: 0.0833333337em; + vertical-align: 0.125em; +} + +.fa-sm { + font-size: 0.875em; + line-height: 0.0714285718em; + vertical-align: 0.0535714295em; +} + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; +} + +.fa-xl { + font-size: 1.5em; + line-height: 0.0416666682em; + vertical-align: -0.125em; +} + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; +} + +.fa-fw { + text-align: center; + width: 1.25em; +} + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; +} +.fa-ul > li { + position: relative; +} + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; +} + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); +} + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); +} + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); +} + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); +} + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin-reverse { + --fa-animation-direction: reverse; +} + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); +} + +@media (prefers-reduced-motion: reduce) { + .fa-beat, +.fa-bounce, +.fa-fade, +.fa-beat-fade, +.fa-flip, +.fa-pulse, +.fa-shake, +.fa-spin, +.fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; + } +} +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); +} + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); +} + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); +} + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); +} + +.fa-stack { + display: inline-block; + vertical-align: middle; + height: 2em; + position: relative; + width: 2.5em; +} + +.fa-stack-1x, +.fa-stack-2x { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + z-index: var(--fa-stack-z-index, auto); +} + +.svg-inline--fa.fa-stack-1x { + height: 1em; + width: 1.25em; +} +.svg-inline--fa.fa-stack-2x { + height: 2em; + width: 2.5em; +} + +.fa-inverse { + color: var(--fa-inverse, #fff); +} + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; +} + +.fad.fa-inverse, +.fa-duotone.fa-inverse { + color: var(--fa-inverse, #fff); +}`;function Su(){var e=yu,t=_u,n=V.cssPrefix,r=V.replacementClass,a=Cy;if(n!==e||r!==t){var o=new RegExp("\\.".concat(e,"\\-"),"g"),i=new RegExp("\\--".concat(e,"\\-"),"g"),s=new RegExp("\\.".concat(t),"g");a=a.replace(o,".".concat(n,"-")).replace(i,"--".concat(n,"-")).replace(s,".".concat(r))}return a}var ll=!1;function ao(){V.autoAddCss&&!ll&&(_y(Su()),ll=!0)}var Sy={mixout:function(){return{dom:{css:Su,insertCss:ao}}},hooks:function(){return{beforeDOMElementCreation:function(){ao()},beforeI2svg:function(){ao()}}}},It=Qt||{};It[Lt]||(It[Lt]={});It[Lt].styles||(It[Lt].styles={});It[Lt].hooks||(It[Lt].hooks={});It[Lt].shims||(It[Lt].shims=[]);var ft=It[Lt],Au=[],Ay=function e(){Se.removeEventListener("DOMContentLoaded",e),xa=1,Au.map(function(t){return t()})},xa=!1;$t&&(xa=(Se.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(Se.readyState),xa||Se.addEventListener("DOMContentLoaded",Ay));function Py(e){$t&&(xa?setTimeout(e,0):Au.push(e))}function Ir(e){var t=e.tag,n=e.attributes,r=n===void 0?{}:n,a=e.children,o=a===void 0?[]:a;return typeof e=="string"?Cu(e):"<".concat(t," ").concat(xy(r),">").concat(o.map(Ir).join(""),"")}function cl(e,t,n){if(e&&e[t]&&e[t][n])return{prefix:t,iconName:n,icon:e[t][n]}}var Oy=function(t,n){return function(r,a,o,i){return t.call(n,r,a,o,i)}},oo=function(t,n,r,a){var o=Object.keys(t),i=o.length,s=a!==void 0?Oy(n,a):n,l,c,u;for(r===void 0?(l=1,u=t[o[0]]):(l=0,u=r);l=55296&&a<=56319&&n=55296&&r<=56319&&n>t+1&&(a=e.charCodeAt(t+1),a>=56320&&a<=57343)?(r-55296)*1024+a-56320+65536:r}function ul(e){return Object.keys(e).reduce(function(t,n){var r=e[n],a=!!r.icon;return a?t[r.iconName]=r.icon:t[n]=r,t},{})}function To(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.skipHooks,a=r===void 0?!1:r,o=ul(t);typeof ft.hooks.addPack=="function"&&!a?ft.hooks.addPack(e,ul(t)):ft.styles[e]=W(W({},ft.styles[e]||{}),o),e==="fas"&&To("fa",t)}var Zr,Qr,ea,Pn=ft.styles,Iy=ft.shims,Ry=(Zr={},Me(Zr,Ce,Object.values(br[Ce])),Me(Zr,Pe,Object.values(br[Pe])),Zr),Ai=null,Pu={},Ou={},Tu={},Lu={},Iu={},Ny=(Qr={},Me(Qr,Ce,Object.keys(vr[Ce])),Me(Qr,Pe,Object.keys(vr[Pe])),Qr);function $y(e){return~hy.indexOf(e)}function My(e,t){var n=t.split("-"),r=n[0],a=n.slice(1).join("-");return r===e&&a!==""&&!$y(a)?a:null}var Ru=function(){var t=function(o){return oo(Pn,function(i,s,l){return i[l]=oo(s,o,{}),i},{})};Pu=t(function(a,o,i){if(o[3]&&(a[o[3]]=i),o[2]){var s=o[2].filter(function(l){return typeof l=="number"});s.forEach(function(l){a[l.toString(16)]=i})}return a}),Ou=t(function(a,o,i){if(a[i]=i,o[2]){var s=o[2].filter(function(l){return typeof l=="string"});s.forEach(function(l){a[l]=i})}return a}),Iu=t(function(a,o,i){var s=o[2];return a[i]=i,s.forEach(function(l){a[l]=i}),a});var n="far"in Pn||V.autoFetchSvg,r=oo(Iy,function(a,o){var i=o[0],s=o[1],l=o[2];return s==="far"&&!n&&(s="fas"),typeof i=="string"&&(a.names[i]={prefix:s,iconName:l}),typeof i=="number"&&(a.unicodes[i.toString(16)]={prefix:s,iconName:l}),a},{names:{},unicodes:{}});Tu=r.names,Lu=r.unicodes,Ai=za(V.styleDefault,{family:V.familyDefault})};yy(function(e){Ai=za(e.styleDefault,{family:V.familyDefault})});Ru();function Pi(e,t){return(Pu[e]||{})[t]}function Fy(e,t){return(Ou[e]||{})[t]}function dn(e,t){return(Iu[e]||{})[t]}function Nu(e){return Tu[e]||{prefix:null,iconName:null}}function Dy(e){var t=Lu[e],n=Pi("fas",e);return t||(n?{prefix:"fas",iconName:n}:null)||{prefix:null,iconName:null}}function en(){return Ai}var Oi=function(){return{prefix:null,iconName:null,rest:[]}};function za(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.family,r=n===void 0?Ce:n,a=vr[r][e],o=gr[r][e]||gr[r][a],i=e in ft.styles?e:null;return o||i||null}var fl=(ea={},Me(ea,Ce,Object.keys(br[Ce])),Me(ea,Pe,Object.keys(br[Pe])),ea);function Ha(e){var t,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.skipLookups,a=r===void 0?!1:r,o=(t={},Me(t,Ce,"".concat(V.cssPrefix,"-").concat(Ce)),Me(t,Pe,"".concat(V.cssPrefix,"-").concat(Pe)),t),i=null,s=Ce;(e.includes(o[Ce])||e.some(function(c){return fl[Ce].includes(c)}))&&(s=Ce),(e.includes(o[Pe])||e.some(function(c){return fl[Pe].includes(c)}))&&(s=Pe);var l=e.reduce(function(c,u){var f=My(V.cssPrefix,u);if(Pn[u]?(u=Ry[s].includes(u)?cy[s][u]:u,i=u,c.prefix=u):Ny[s].indexOf(u)>-1?(i=u,c.prefix=za(u,{family:s})):f?c.iconName=f:u!==V.replacementClass&&u!==o[Ce]&&u!==o[Pe]&&c.rest.push(u),!a&&c.prefix&&c.iconName){var d=i==="fa"?Nu(c.iconName):{},g=dn(c.prefix,c.iconName);d.prefix&&(i=null),c.iconName=d.iconName||g||c.iconName,c.prefix=d.prefix||c.prefix,c.prefix==="far"&&!Pn.far&&Pn.fas&&!V.autoFetchSvg&&(c.prefix="fas")}return c},Oi());return(e.includes("fa-brands")||e.includes("fab"))&&(l.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(l.prefix="fad"),!l.prefix&&s===Pe&&(Pn.fass||V.autoFetchSvg)&&(l.prefix="fass",l.iconName=dn(l.prefix,l.iconName)||l.iconName),(l.prefix==="fa"||i==="fa")&&(l.prefix=en()||"fas"),l}var zy=function(){function e(){Jb(this,e),this.definitions={}}return Zb(e,[{key:"add",value:function(){for(var n=this,r=arguments.length,a=new Array(r),o=0;o0&&u.forEach(function(f){typeof f=="string"&&(n[s][f]=c)}),n[s][l]=c}),n}}]),e}(),dl=[],On={},$n={},Hy=Object.keys($n);function jy(e,t){var n=t.mixoutsTo;return dl=e,On={},Object.keys($n).forEach(function(r){Hy.indexOf(r)===-1&&delete $n[r]}),dl.forEach(function(r){var a=r.mixout?r.mixout():{};if(Object.keys(a).forEach(function(i){typeof a[i]=="function"&&(n[i]=a[i]),wa(a[i])==="object"&&Object.keys(a[i]).forEach(function(s){n[i]||(n[i]={}),n[i][s]=a[i][s]})}),r.hooks){var o=r.hooks();Object.keys(o).forEach(function(i){On[i]||(On[i]=[]),On[i].push(o[i])})}r.provides&&r.provides($n)}),n}function Lo(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),a=2;a1?t-1:0),r=1;r0&&arguments[0]!==void 0?arguments[0]:{};return $t?(bn("beforeI2svg",t),Rt("pseudoElements2svg",t),Rt("i2svg",t)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.autoReplaceSvgRoot;V.autoReplaceSvg===!1&&(V.autoReplaceSvg=!0),V.observeMutations=!0,Py(function(){Ky({autoReplaceSvgRoot:n}),bn("watch",t)})}},Wy={icon:function(t){if(t===null)return null;if(wa(t)==="object"&&t.prefix&&t.iconName)return{prefix:t.prefix,iconName:dn(t.prefix,t.iconName)||t.iconName};if(Array.isArray(t)&&t.length===2){var n=t[1].indexOf("fa-")===0?t[1].slice(3):t[1],r=za(t[0]);return{prefix:r,iconName:dn(r,n)||n}}if(typeof t=="string"&&(t.indexOf("".concat(V.cssPrefix,"-"))>-1||t.match(uy))){var a=Ha(t.split(" "),{skipLookups:!0});return{prefix:a.prefix||en(),iconName:dn(a.prefix,a.iconName)||a.iconName}}if(typeof t=="string"){var o=en();return{prefix:o,iconName:dn(o,t)||t}}}},nt={noAuto:By,config:V,dom:Uy,parse:Wy,library:$u,findIconDefinition:Io,toHtml:Ir},Ky=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.autoReplaceSvgRoot,r=n===void 0?Se:n;(Object.keys(ft.styles).length>0||V.autoFetchSvg)&&$t&&V.autoReplaceSvg&&nt.dom.i2svg({node:r})};function ja(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map(function(r){return Ir(r)})}}),Object.defineProperty(e,"node",{get:function(){if($t){var r=Se.createElement("div");return r.innerHTML=e.html,r.children}}}),e}function qy(e){var t=e.children,n=e.main,r=e.mask,a=e.attributes,o=e.styles,i=e.transform;if(Si(i)&&n.found&&!r.found){var s=n.width,l=n.height,c={x:s/l/2,y:.5};a.style=Da(W(W({},o),{},{"transform-origin":"".concat(c.x+i.x/16,"em ").concat(c.y+i.y/16,"em")}))}return[{tag:"svg",attributes:a,children:t}]}function Yy(e){var t=e.prefix,n=e.iconName,r=e.children,a=e.attributes,o=e.symbol,i=o===!0?"".concat(t,"-").concat(V.cssPrefix,"-").concat(n):o;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:W(W({},a),{},{id:i}),children:r}]}]}function Ti(e){var t=e.icons,n=t.main,r=t.mask,a=e.prefix,o=e.iconName,i=e.transform,s=e.symbol,l=e.title,c=e.maskId,u=e.titleId,f=e.extra,d=e.watchable,g=d===void 0?!1:d,_=r.found?r:n,w=_.width,x=_.height,p=a==="fak",v=[V.replacementClass,o?"".concat(V.cssPrefix,"-").concat(o):""].filter(function(F){return f.classes.indexOf(F)===-1}).filter(function(F){return F!==""||!!F}).concat(f.classes).join(" "),k={children:[],attributes:W(W({},f.attributes),{},{"data-prefix":a,"data-icon":o,class:v,role:f.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(w," ").concat(x)})},C=p&&!~f.classes.indexOf("fa-fw")?{width:"".concat(w/x*16*.0625,"em")}:{};g&&(k.attributes[gn]=""),l&&(k.children.push({tag:"title",attributes:{id:k.attributes["aria-labelledby"]||"title-".concat(u||_r())},children:[l]}),delete k.attributes.title);var N=W(W({},k),{},{prefix:a,iconName:o,main:n,mask:r,maskId:c,transform:i,symbol:s,styles:W(W({},C),f.styles)}),q=r.found&&n.found?Rt("generateAbstractMask",N)||{children:[],attributes:{}}:Rt("generateAbstractIcon",N)||{children:[],attributes:{}},L=q.children,b=q.attributes;return N.children=L,N.attributes=b,s?Yy(N):qy(N)}function ml(e){var t=e.content,n=e.width,r=e.height,a=e.transform,o=e.title,i=e.extra,s=e.watchable,l=s===void 0?!1:s,c=W(W(W({},i.attributes),o?{title:o}:{}),{},{class:i.classes.join(" ")});l&&(c[gn]="");var u=W({},i.styles);Si(a)&&(u.transform=Ey({transform:a,startCentered:!0,width:n,height:r}),u["-webkit-transform"]=u.transform);var f=Da(u);f.length>0&&(c.style=f);var d=[];return d.push({tag:"span",attributes:c,children:[t]}),o&&d.push({tag:"span",attributes:{class:"sr-only"},children:[o]}),d}function Vy(e){var t=e.content,n=e.title,r=e.extra,a=W(W(W({},r.attributes),n?{title:n}:{}),{},{class:r.classes.join(" ")}),o=Da(r.styles);o.length>0&&(a.style=o);var i=[];return i.push({tag:"span",attributes:a,children:[t]}),n&&i.push({tag:"span",attributes:{class:"sr-only"},children:[n]}),i}var io=ft.styles;function Ro(e){var t=e[0],n=e[1],r=e.slice(4),a=_i(r,1),o=a[0],i=null;return Array.isArray(o)?i={tag:"g",attributes:{class:"".concat(V.cssPrefix,"-").concat(fn.GROUP)},children:[{tag:"path",attributes:{class:"".concat(V.cssPrefix,"-").concat(fn.SECONDARY),fill:"currentColor",d:o[0]}},{tag:"path",attributes:{class:"".concat(V.cssPrefix,"-").concat(fn.PRIMARY),fill:"currentColor",d:o[1]}}]}:i={tag:"path",attributes:{fill:"currentColor",d:o}},{found:!0,width:t,height:n,icon:i}}var Gy={found:!1,width:512,height:512};function Xy(e,t){!wu&&!V.showMissingIcons&&e&&console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}function No(e,t){var n=t;return t==="fa"&&V.styleDefault!==null&&(t=en()),new Promise(function(r,a){if(Rt("missingIconAbstract"),n==="fa"){var o=Nu(e)||{};e=o.iconName||e,t=o.prefix||t}if(e&&t&&io[t]&&io[t][e]){var i=io[t][e];return r(Ro(i))}Xy(e,t),r(W(W({},Gy),{},{icon:V.showMissingIcons&&e?Rt("missingIconAbstract")||{}:{}}))})}var pl=function(){},$o=V.measurePerformance&&qr&&qr.mark&&qr.measure?qr:{mark:pl,measure:pl},er='FA "6.4.0"',Jy=function(t){return $o.mark("".concat(er," ").concat(t," begins")),function(){return Mu(t)}},Mu=function(t){$o.mark("".concat(er," ").concat(t," ends")),$o.measure("".concat(er," ").concat(t),"".concat(er," ").concat(t," begins"),"".concat(er," ").concat(t," ends"))},Li={begin:Jy,end:Mu},aa=function(){};function hl(e){var t=e.getAttribute?e.getAttribute(gn):null;return typeof t=="string"}function Zy(e){var t=e.getAttribute?e.getAttribute(xi):null,n=e.getAttribute?e.getAttribute(ki):null;return t&&n}function Qy(e){return e&&e.classList&&e.classList.contains&&e.classList.contains(V.replacementClass)}function e0(){if(V.autoReplaceSvg===!0)return oa.replace;var e=oa[V.autoReplaceSvg];return e||oa.replace}function t0(e){return Se.createElementNS("http://www.w3.org/2000/svg",e)}function n0(e){return Se.createElement(e)}function Fu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.ceFn,r=n===void 0?e.tag==="svg"?t0:n0:n;if(typeof e=="string")return Se.createTextNode(e);var a=r(e.tag);Object.keys(e.attributes||[]).forEach(function(i){a.setAttribute(i,e.attributes[i])});var o=e.children||[];return o.forEach(function(i){a.appendChild(Fu(i,{ceFn:r}))}),a}function r0(e){var t=" ".concat(e.outerHTML," ");return t="".concat(t,"Font Awesome fontawesome.com "),t}var oa={replace:function(t){var n=t[0];if(n.parentNode)if(t[1].forEach(function(a){n.parentNode.insertBefore(Fu(a),n)}),n.getAttribute(gn)===null&&V.keepOriginalSource){var r=Se.createComment(r0(n));n.parentNode.replaceChild(r,n)}else n.remove()},nest:function(t){var n=t[0],r=t[1];if(~Ci(n).indexOf(V.replacementClass))return oa.replace(t);var a=new RegExp("".concat(V.cssPrefix,"-.*"));if(delete r[0].attributes.id,r[0].attributes.class){var o=r[0].attributes.class.split(" ").reduce(function(s,l){return l===V.replacementClass||l.match(a)?s.toSvg.push(l):s.toNode.push(l),s},{toNode:[],toSvg:[]});r[0].attributes.class=o.toSvg.join(" "),o.toNode.length===0?n.removeAttribute("class"):n.setAttribute("class",o.toNode.join(" "))}var i=r.map(function(s){return Ir(s)}).join(` +`);n.setAttribute(gn,""),n.innerHTML=i}};function vl(e){e()}function Du(e,t){var n=typeof t=="function"?t:aa;if(e.length===0)n();else{var r=vl;V.mutateApproach===sy&&(r=Qt.requestAnimationFrame||vl),r(function(){var a=e0(),o=Li.begin("mutate");e.map(a),o(),n()})}}var Ii=!1;function zu(){Ii=!0}function Mo(){Ii=!1}var ka=null;function gl(e){if(il&&V.observeMutations){var t=e.treeCallback,n=t===void 0?aa:t,r=e.nodeCallback,a=r===void 0?aa:r,o=e.pseudoElementsCallback,i=o===void 0?aa:o,s=e.observeMutationsRoot,l=s===void 0?Se:s;ka=new il(function(c){if(!Ii){var u=en();qn(c).forEach(function(f){if(f.type==="childList"&&f.addedNodes.length>0&&!hl(f.addedNodes[0])&&(V.searchPseudoElements&&i(f.target),n(f.target)),f.type==="attributes"&&f.target.parentNode&&V.searchPseudoElements&&i(f.target.parentNode),f.type==="attributes"&&hl(f.target)&&~py.indexOf(f.attributeName))if(f.attributeName==="class"&&Zy(f.target)){var d=Ha(Ci(f.target)),g=d.prefix,_=d.iconName;f.target.setAttribute(xi,g||u),_&&f.target.setAttribute(ki,_)}else Qy(f.target)&&a(f.target)})}}),$t&&ka.observe(l,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function a0(){ka&&ka.disconnect()}function o0(e){var t=e.getAttribute("style"),n=[];return t&&(n=t.split(";").reduce(function(r,a){var o=a.split(":"),i=o[0],s=o.slice(1);return i&&s.length>0&&(r[i]=s.join(":").trim()),r},{})),n}function i0(e){var t=e.getAttribute("data-prefix"),n=e.getAttribute("data-icon"),r=e.innerText!==void 0?e.innerText.trim():"",a=Ha(Ci(e));return a.prefix||(a.prefix=en()),t&&n&&(a.prefix=t,a.iconName=n),a.iconName&&a.prefix||(a.prefix&&r.length>0&&(a.iconName=Fy(a.prefix,e.innerText)||Pi(a.prefix,Oo(e.innerText))),!a.iconName&&V.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(a.iconName=e.firstChild.data)),a}function s0(e){var t=qn(e.attributes).reduce(function(a,o){return a.name!=="class"&&a.name!=="style"&&(a[o.name]=o.value),a},{}),n=e.getAttribute("title"),r=e.getAttribute("data-fa-title-id");return V.autoA11y&&(n?t["aria-labelledby"]="".concat(V.replacementClass,"-title-").concat(r||_r()):(t["aria-hidden"]="true",t.focusable="false")),t}function l0(){return{iconName:null,title:null,titleId:null,prefix:null,transform:_t,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}}function bl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{styleParser:!0},n=i0(e),r=n.iconName,a=n.prefix,o=n.rest,i=s0(e),s=Lo("parseNodeAttributes",{},e),l=t.styleParser?o0(e):[];return W({iconName:r,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:a,transform:_t,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:o,styles:l,attributes:i}},s)}var c0=ft.styles;function Hu(e){var t=V.autoReplaceSvg==="nest"?bl(e,{styleParser:!1}):bl(e);return~t.extra.classes.indexOf(xu)?Rt("generateLayersText",e,t):Rt("generateSvgReplacementMutation",e,t)}var tn=new Set;Ei.map(function(e){tn.add("fa-".concat(e))});Object.keys(vr[Ce]).map(tn.add.bind(tn));Object.keys(vr[Pe]).map(tn.add.bind(tn));tn=Tr(tn);function yl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!$t)return Promise.resolve();var n=Se.documentElement.classList,r=function(f){return n.add("".concat(sl,"-").concat(f))},a=function(f){return n.remove("".concat(sl,"-").concat(f))},o=V.autoFetchSvg?tn:Ei.map(function(u){return"fa-".concat(u)}).concat(Object.keys(c0));o.includes("fa")||o.push("fa");var i=[".".concat(xu,":not([").concat(gn,"])")].concat(o.map(function(u){return".".concat(u,":not([").concat(gn,"])")})).join(", ");if(i.length===0)return Promise.resolve();var s=[];try{s=qn(e.querySelectorAll(i))}catch{}if(s.length>0)r("pending"),a("complete");else return Promise.resolve();var l=Li.begin("onTree"),c=s.reduce(function(u,f){try{var d=Hu(f);d&&u.push(d)}catch(g){wu||g.name==="MissingIcon"&&console.error(g)}return u},[]);return new Promise(function(u,f){Promise.all(c).then(function(d){Du(d,function(){r("active"),r("complete"),a("pending"),typeof t=="function"&&t(),l(),u()})}).catch(function(d){l(),f(d)})})}function u0(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;Hu(e).then(function(n){n&&Du([n],t)})}function f0(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(t||{}).icon?t:Io(t||{}),a=n.mask;return a&&(a=(a||{}).icon?a:Io(a||{})),e(r,W(W({},n),{},{mask:a}))}}var d0=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.transform,a=r===void 0?_t:r,o=n.symbol,i=o===void 0?!1:o,s=n.mask,l=s===void 0?null:s,c=n.maskId,u=c===void 0?null:c,f=n.title,d=f===void 0?null:f,g=n.titleId,_=g===void 0?null:g,w=n.classes,x=w===void 0?[]:w,p=n.attributes,v=p===void 0?{}:p,k=n.styles,C=k===void 0?{}:k;if(t){var N=t.prefix,q=t.iconName,L=t.icon;return ja(W({type:"icon"},t),function(){return bn("beforeDOMElementCreation",{iconDefinition:t,params:n}),V.autoA11y&&(d?v["aria-labelledby"]="".concat(V.replacementClass,"-title-").concat(_||_r()):(v["aria-hidden"]="true",v.focusable="false")),Ti({icons:{main:Ro(L),mask:l?Ro(l.icon):{found:!1,width:null,height:null,icon:{}}},prefix:N,iconName:q,transform:W(W({},_t),a),symbol:i,title:d,maskId:u,titleId:_,extra:{attributes:v,styles:C,classes:x}})})}},m0={mixout:function(){return{icon:f0(d0)}},hooks:function(){return{mutationObserverCallbacks:function(n){return n.treeCallback=yl,n.nodeCallback=u0,n}}},provides:function(t){t.i2svg=function(n){var r=n.node,a=r===void 0?Se:r,o=n.callback,i=o===void 0?function(){}:o;return yl(a,i)},t.generateSvgReplacementMutation=function(n,r){var a=r.iconName,o=r.title,i=r.titleId,s=r.prefix,l=r.transform,c=r.symbol,u=r.mask,f=r.maskId,d=r.extra;return new Promise(function(g,_){Promise.all([No(a,s),u.iconName?No(u.iconName,u.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(w){var x=_i(w,2),p=x[0],v=x[1];g([n,Ti({icons:{main:p,mask:v},prefix:s,iconName:a,transform:l,symbol:c,maskId:f,title:o,titleId:i,extra:d,watchable:!0})])}).catch(_)})},t.generateAbstractIcon=function(n){var r=n.children,a=n.attributes,o=n.main,i=n.transform,s=n.styles,l=Da(s);l.length>0&&(a.style=l);var c;return Si(i)&&(c=Rt("generateAbstractTransformGrouping",{main:o,transform:i,containerWidth:o.width,iconWidth:o.width})),r.push(c||o.icon),{children:r,attributes:a}}}},p0={mixout:function(){return{layer:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.classes,o=a===void 0?[]:a;return ja({type:"layer"},function(){bn("beforeDOMElementCreation",{assembler:n,params:r});var i=[];return n(function(s){Array.isArray(s)?s.map(function(l){i=i.concat(l.abstract)}):i=i.concat(s.abstract)}),[{tag:"span",attributes:{class:["".concat(V.cssPrefix,"-layers")].concat(Tr(o)).join(" ")},children:i}]})}}}},h0={mixout:function(){return{counter:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.title,o=a===void 0?null:a,i=r.classes,s=i===void 0?[]:i,l=r.attributes,c=l===void 0?{}:l,u=r.styles,f=u===void 0?{}:u;return ja({type:"counter",content:n},function(){return bn("beforeDOMElementCreation",{content:n,params:r}),Vy({content:n.toString(),title:o,extra:{attributes:c,styles:f,classes:["".concat(V.cssPrefix,"-layers-counter")].concat(Tr(s))}})})}}}},v0={mixout:function(){return{text:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.transform,o=a===void 0?_t:a,i=r.title,s=i===void 0?null:i,l=r.classes,c=l===void 0?[]:l,u=r.attributes,f=u===void 0?{}:u,d=r.styles,g=d===void 0?{}:d;return ja({type:"text",content:n},function(){return bn("beforeDOMElementCreation",{content:n,params:r}),ml({content:n,transform:W(W({},_t),o),title:s,extra:{attributes:f,styles:g,classes:["".concat(V.cssPrefix,"-layers-text")].concat(Tr(c))}})})}}},provides:function(t){t.generateLayersText=function(n,r){var a=r.title,o=r.transform,i=r.extra,s=null,l=null;if(bu){var c=parseInt(getComputedStyle(n).fontSize,10),u=n.getBoundingClientRect();s=u.width/c,l=u.height/c}return V.autoA11y&&!a&&(i.attributes["aria-hidden"]="true"),Promise.resolve([n,ml({content:n.innerHTML,width:s,height:l,transform:o,title:a,extra:i,watchable:!0})])}}},g0=new RegExp('"',"ug"),_l=[1105920,1112319];function b0(e){var t=e.replace(g0,""),n=Ly(t,0),r=n>=_l[0]&&n<=_l[1],a=t.length===2?t[0]===t[1]:!1;return{value:Oo(a?t[0]:t),isSecondary:r||a}}function wl(e,t){var n="".concat(iy).concat(t.replace(":","-"));return new Promise(function(r,a){if(e.getAttribute(n)!==null)return r();var o=qn(e.children),i=o.filter(function(L){return L.getAttribute(Po)===t})[0],s=Qt.getComputedStyle(e,t),l=s.getPropertyValue("font-family").match(fy),c=s.getPropertyValue("font-weight"),u=s.getPropertyValue("content");if(i&&!l)return e.removeChild(i),r();if(l&&u!=="none"&&u!==""){var f=s.getPropertyValue("content"),d=~["Sharp"].indexOf(l[2])?Pe:Ce,g=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(l[2])?gr[d][l[2].toLowerCase()]:dy[d][c],_=b0(f),w=_.value,x=_.isSecondary,p=l[0].startsWith("FontAwesome"),v=Pi(g,w),k=v;if(p){var C=Dy(w);C.iconName&&C.prefix&&(v=C.iconName,g=C.prefix)}if(v&&!x&&(!i||i.getAttribute(xi)!==g||i.getAttribute(ki)!==k)){e.setAttribute(n,k),i&&e.removeChild(i);var N=l0(),q=N.extra;q.attributes[Po]=t,No(v,g).then(function(L){var b=Ti(W(W({},N),{},{icons:{main:L,mask:Oi()},prefix:g,iconName:k,extra:q,watchable:!0})),F=Se.createElement("svg");t==="::before"?e.insertBefore(F,e.firstChild):e.appendChild(F),F.outerHTML=b.map(function(H){return Ir(H)}).join(` +`),e.removeAttribute(n),r()}).catch(a)}else r()}else r()})}function y0(e){return Promise.all([wl(e,"::before"),wl(e,"::after")])}function _0(e){return e.parentNode!==document.head&&!~ly.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(Po)&&(!e.parentNode||e.parentNode.tagName!=="svg")}function xl(e){if($t)return new Promise(function(t,n){var r=qn(e.querySelectorAll("*")).filter(_0).map(y0),a=Li.begin("searchPseudoElements");zu(),Promise.all(r).then(function(){a(),Mo(),t()}).catch(function(){a(),Mo(),n()})})}var w0={hooks:function(){return{mutationObserverCallbacks:function(n){return n.pseudoElementsCallback=xl,n}}},provides:function(t){t.pseudoElements2svg=function(n){var r=n.node,a=r===void 0?Se:r;V.searchPseudoElements&&xl(a)}}},kl=!1,x0={mixout:function(){return{dom:{unwatch:function(){zu(),kl=!0}}}},hooks:function(){return{bootstrap:function(){gl(Lo("mutationObserverCallbacks",{}))},noAuto:function(){a0()},watch:function(n){var r=n.observeMutationsRoot;kl?Mo():gl(Lo("mutationObserverCallbacks",{observeMutationsRoot:r}))}}}},El=function(t){var n={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return t.toLowerCase().split(" ").reduce(function(r,a){var o=a.toLowerCase().split("-"),i=o[0],s=o.slice(1).join("-");if(i&&s==="h")return r.flipX=!0,r;if(i&&s==="v")return r.flipY=!0,r;if(s=parseFloat(s),isNaN(s))return r;switch(i){case"grow":r.size=r.size+s;break;case"shrink":r.size=r.size-s;break;case"left":r.x=r.x-s;break;case"right":r.x=r.x+s;break;case"up":r.y=r.y-s;break;case"down":r.y=r.y+s;break;case"rotate":r.rotate=r.rotate+s;break}return r},n)},k0={mixout:function(){return{parse:{transform:function(n){return El(n)}}}},hooks:function(){return{parseNodeAttributes:function(n,r){var a=r.getAttribute("data-fa-transform");return a&&(n.transform=El(a)),n}}},provides:function(t){t.generateAbstractTransformGrouping=function(n){var r=n.main,a=n.transform,o=n.containerWidth,i=n.iconWidth,s={transform:"translate(".concat(o/2," 256)")},l="translate(".concat(a.x*32,", ").concat(a.y*32,") "),c="scale(".concat(a.size/16*(a.flipX?-1:1),", ").concat(a.size/16*(a.flipY?-1:1),") "),u="rotate(".concat(a.rotate," 0 0)"),f={transform:"".concat(l," ").concat(c," ").concat(u)},d={transform:"translate(".concat(i/2*-1," -256)")},g={outer:s,inner:f,path:d};return{tag:"g",attributes:W({},g.outer),children:[{tag:"g",attributes:W({},g.inner),children:[{tag:r.icon.tag,children:r.icon.children,attributes:W(W({},r.icon.attributes),g.path)}]}]}}}},so={x:0,y:0,width:"100%",height:"100%"};function Cl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}function E0(e){return e.tag==="g"?e.children:[e]}var C0={hooks:function(){return{parseNodeAttributes:function(n,r){var a=r.getAttribute("data-fa-mask"),o=a?Ha(a.split(" ").map(function(i){return i.trim()})):Oi();return o.prefix||(o.prefix=en()),n.mask=o,n.maskId=r.getAttribute("data-fa-mask-id"),n}}},provides:function(t){t.generateAbstractMask=function(n){var r=n.children,a=n.attributes,o=n.main,i=n.mask,s=n.maskId,l=n.transform,c=o.width,u=o.icon,f=i.width,d=i.icon,g=ky({transform:l,containerWidth:f,iconWidth:c}),_={tag:"rect",attributes:W(W({},so),{},{fill:"white"})},w=u.children?{children:u.children.map(Cl)}:{},x={tag:"g",attributes:W({},g.inner),children:[Cl(W({tag:u.tag,attributes:W(W({},u.attributes),g.path)},w))]},p={tag:"g",attributes:W({},g.outer),children:[x]},v="mask-".concat(s||_r()),k="clip-".concat(s||_r()),C={tag:"mask",attributes:W(W({},so),{},{id:v,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[_,p]},N={tag:"defs",children:[{tag:"clipPath",attributes:{id:k},children:E0(d)},C]};return r.push(N,{tag:"rect",attributes:W({fill:"currentColor","clip-path":"url(#".concat(k,")"),mask:"url(#".concat(v,")")},so)}),{children:r,attributes:a}}}},S0={provides:function(t){var n=!1;Qt.matchMedia&&(n=Qt.matchMedia("(prefers-reduced-motion: reduce)").matches),t.missingIconAbstract=function(){var r=[],a={fill:"currentColor"},o={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};r.push({tag:"path",attributes:W(W({},a),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var i=W(W({},o),{},{attributeName:"opacity"}),s={tag:"circle",attributes:W(W({},a),{},{cx:"256",cy:"364",r:"28"}),children:[]};return n||s.children.push({tag:"animate",attributes:W(W({},o),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:W(W({},i),{},{values:"1;0;1;1;0;1;"})}),r.push(s),r.push({tag:"path",attributes:W(W({},a),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:n?[]:[{tag:"animate",attributes:W(W({},i),{},{values:"1;0;0;0;0;1;"})}]}),n||r.push({tag:"path",attributes:W(W({},a),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:W(W({},i),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:r}}}},A0={hooks:function(){return{parseNodeAttributes:function(n,r){var a=r.getAttribute("data-fa-symbol"),o=a===null?!1:a===""?!0:a;return n.symbol=o,n}}}},P0=[Sy,m0,p0,h0,v0,w0,x0,k0,C0,S0,A0];jy(P0,{mixoutsTo:nt});nt.noAuto;nt.config;var O0=nt.library;nt.dom;var Fo=nt.parse;nt.findIconDefinition;nt.toHtml;var T0=nt.icon;nt.layer;nt.text;nt.counter;var L0={prefix:"fab",iconName:"discord",icon:[640,512,[],"f392","M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"]},I0={prefix:"fab",iconName:"github",icon:[496,512,[],"f09b","M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"]};function Sl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Pt(e){for(var t=1;t=0)&&(n[a]=e[a]);return n}function N0(e,t){if(e==null)return{};var n=R0(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var $0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ju={exports:{}};(function(e){(function(t){var n=function(p,v,k){if(!c(v)||f(v)||d(v)||g(v)||l(v))return v;var C,N=0,q=0;if(u(v))for(C=[],q=v.length;N1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof e=="string")return e;var r=(e.children||[]).map(function(l){return Bu(l)}),a=Object.keys(e.attributes||{}).reduce(function(l,c){var u=e.attributes[c];switch(c){case"class":l.class=z0(u);break;case"style":l.style=D0(u);break;default:l.attrs[c]=u}return l},{attrs:{},class:{},style:{}});n.class;var o=n.style,i=o===void 0?{}:o,s=N0(n,F0);return ue(e.tag,Pt(Pt(Pt({},t),{},{class:a.class,style:Pt(Pt({},a.style),i)},a.attrs),s),r)}var Uu=!1;try{Uu=!0}catch{}function H0(){if(!Uu&&console&&typeof console.error=="function"){var e;(e=console).error.apply(e,arguments)}}function lo(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?Ge({},e,t):{}}function j0(e){var t,n=(t={"fa-spin":e.spin,"fa-pulse":e.pulse,"fa-fw":e.fixedWidth,"fa-border":e.border,"fa-li":e.listItem,"fa-inverse":e.inverse,"fa-flip":e.flip===!0,"fa-flip-horizontal":e.flip==="horizontal"||e.flip==="both","fa-flip-vertical":e.flip==="vertical"||e.flip==="both"},Ge(t,"fa-".concat(e.size),e.size!==null),Ge(t,"fa-rotate-".concat(e.rotation),e.rotation!==null),Ge(t,"fa-pull-".concat(e.pull),e.pull!==null),Ge(t,"fa-swap-opacity",e.swapOpacity),Ge(t,"fa-bounce",e.bounce),Ge(t,"fa-shake",e.shake),Ge(t,"fa-beat",e.beat),Ge(t,"fa-fade",e.fade),Ge(t,"fa-beat-fade",e.beatFade),Ge(t,"fa-flash",e.flash),Ge(t,"fa-spin-pulse",e.spinPulse),Ge(t,"fa-spin-reverse",e.spinReverse),t);return Object.keys(n).map(function(r){return n[r]?r:null}).filter(function(r){return r})}function Al(e){if(e&&Ea(e)==="object"&&e.prefix&&e.iconName&&e.icon)return e;if(Fo.icon)return Fo.icon(e);if(e===null)return null;if(Ea(e)==="object"&&e.prefix&&e.iconName)return e;if(Array.isArray(e)&&e.length===2)return{prefix:e[0],iconName:e[1]};if(typeof e=="string")return{prefix:"fas",iconName:e}}var B0=de({name:"FontAwesomeIcon",props:{border:{type:Boolean,default:!1},fixedWidth:{type:Boolean,default:!1},flip:{type:[Boolean,String],default:!1,validator:function(t){return[!0,!1,"horizontal","vertical","both"].indexOf(t)>-1}},icon:{type:[Object,Array,String],required:!0},mask:{type:[Object,Array,String],default:null},listItem:{type:Boolean,default:!1},pull:{type:String,default:null,validator:function(t){return["right","left"].indexOf(t)>-1}},pulse:{type:Boolean,default:!1},rotation:{type:[String,Number],default:null,validator:function(t){return[90,180,270].indexOf(Number.parseInt(t,10))>-1}},swapOpacity:{type:Boolean,default:!1},size:{type:String,default:null,validator:function(t){return["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"].indexOf(t)>-1}},spin:{type:Boolean,default:!1},transform:{type:[String,Object],default:null},symbol:{type:[Boolean,String],default:!1},title:{type:String,default:null},inverse:{type:Boolean,default:!1},bounce:{type:Boolean,default:!1},shake:{type:Boolean,default:!1},beat:{type:Boolean,default:!1},fade:{type:Boolean,default:!1},beatFade:{type:Boolean,default:!1},flash:{type:Boolean,default:!1},spinPulse:{type:Boolean,default:!1},spinReverse:{type:Boolean,default:!1}},setup:function(t,n){var r=n.attrs,a=M(function(){return Al(t.icon)}),o=M(function(){return lo("classes",j0(t))}),i=M(function(){return lo("transform",typeof t.transform=="string"?Fo.transform(t.transform):t.transform)}),s=M(function(){return lo("mask",Al(t.mask))}),l=M(function(){return T0(a.value,Pt(Pt(Pt(Pt({},o.value),i.value),s.value),{},{symbol:t.symbol,title:t.title}))});it(l,function(u){if(!u)return H0("Could not find one or more icon(s)",a.value,s.value)},{immediate:!0});var c=M(function(){return l.value?Bu(l.value.abstract[0],{},r):null});return function(){return c.value}}});O0.add(L0,I0);const U0=ht({enhance({app:e}){e.component("font-awesome-icon",B0)}}),ta=[Gp,Zp,nh,ih,fh,cb,Eb,Cb,Sb,Db,Xb,U0],W0=[["v-8daa1a0e","/",{title:""},["/index.md"]],["v-fffb8e28","/guide/",{title:"User guide"},["/guide/index.md"]],["v-73866439","/support/",{title:"Support"},["/support/index.md"]],["v-3706649a","/404.html",{title:""},[]]];var Pl=de({name:"Vuepress",setup(){const e=Fm();return()=>ue(e.value)}}),K0=()=>W0.reduce((e,[t,n,r,a])=>(e.push({name:t,path:n,component:Pl,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...a.map(o=>({path:o===":md"?n.substring(0,n.length-5)+".md":o,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:Pl}]),q0=op,Y0=()=>{const e=Bp({history:q0(Ac("/jmeter-dotnet-dsl/")),routes:K0(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===St)&&([Wt.value]=await Promise.all([Ct.resolvePageData(t.name),(r=Tc[t.name])==null?void 0:r.__asyncLoader()]))}),e},V0=e=>{e.component("ClientOnly",ci),e.component("Content",jm)},G0=(e,t,n)=>{const r=M(()=>Ct.resolveLayouts(n)),a=Bs(()=>t.currentRoute.value.path),o=Bs(()=>Ct.resolveRouteLocale(An.value.locales,a.value)),i=M(()=>Ct.resolveSiteLocaleData(An.value,o.value)),s=M(()=>Ct.resolvePageFrontmatter(Wt.value)),l=M(()=>Ct.resolvePageHeadTitle(Wt.value,i.value)),c=M(()=>Ct.resolvePageHead(l.value,s.value,i.value)),u=M(()=>Ct.resolvePageLang(Wt.value)),f=M(()=>Ct.resolvePageLayout(Wt.value,r.value));return e.provide(Im,r),e.provide(Ic,s),e.provide($m,l),e.provide(Rc,c),e.provide(Nc,u),e.provide($c,f),e.provide(si,o),e.provide(Fc,i),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>s.value},$head:{get:()=>c.value},$headTitle:{get:()=>l.value},$lang:{get:()=>u.value},$page:{get:()=>Wt.value},$routeLocale:{get:()=>o.value},$site:{get:()=>An.value},$siteLocale:{get:()=>i.value},$withBase:{get:()=>ui}}),{layouts:r,pageData:Wt,pageFrontmatter:s,pageHead:c,pageHeadTitle:l,pageLang:u,pageLayout:f,routeLocale:o,siteData:An,siteLocaleData:i}},X0=()=>{const e=Nm(),t=Mm(),n=fe([]),r=()=>{e.value.forEach(o=>{const i=J0(o);i&&n.value.push(i)})},a=()=>{document.documentElement.lang=t.value,n.value.forEach(o=>{o.parentNode===document.head&&document.head.removeChild(o)}),n.value.splice(0,n.value.length),e.value.forEach(o=>{const i=Z0(o);i!==null&&(document.head.appendChild(i),n.value.push(i))})};pn(Dm,a),Ye(()=>{r(),a(),it(()=>e.value,a)})},J0=([e,t,n=""])=>{const r=Object.entries(t).map(([s,l])=>ge(l)?`[${s}=${JSON.stringify(l)}]`:l===!0?`[${s}]`:"").join(""),a=`head > ${e}${r}`;return Array.from(document.querySelectorAll(a)).find(s=>s.innerText===n)||null},Z0=([e,t,n])=>{if(!ge(e))return null;const r=document.createElement(e);return ii(t)&&Object.entries(t).forEach(([a,o])=>{ge(o)?r.setAttribute(a,o):o===!0&&r.setAttribute(a,"")}),ge(n)&&r.appendChild(document.createTextNode(n)),r},Q0=Em,e1=async()=>{var n;const e=Q0({name:"VuepressApp",setup(){var r;X0();for(const a of ta)(r=a.setup)==null||r.call(a);return()=>[ue(Gc),...ta.flatMap(({rootComponents:a=[]})=>a.map(o=>ue(o)))]}}),t=Y0();V0(e),G0(e,t,ta);for(const r of ta)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:An}));return e.use(t),{app:e,router:t}};e1().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Ae as _,le as a,kt as b,te as c,e1 as createVueApp,ne as d,zd as e,B as o,wt as r}; diff --git a/assets/azure-35125246.png b/assets/azure-35125246.png new file mode 100644 index 0000000..74a685a Binary files /dev/null and b/assets/azure-35125246.png differ diff --git a/assets/azure-logo-1bad44c3.png b/assets/azure-logo-1bad44c3.png new file mode 100644 index 0000000..915566d Binary files /dev/null and b/assets/azure-logo-1bad44c3.png differ diff --git a/assets/back-to-top-8efcbe56.svg b/assets/back-to-top-8efcbe56.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/assets/back-to-top-8efcbe56.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/blazemeter-85d7b816.png b/assets/blazemeter-85d7b816.png new file mode 100644 index 0000000..dd86cec Binary files /dev/null and b/assets/blazemeter-85d7b816.png differ diff --git a/assets/blazemeter-logo-a5731ee5.png b/assets/blazemeter-logo-a5731ee5.png new file mode 100644 index 0000000..75cfe78 Binary files /dev/null and b/assets/blazemeter-logo-a5731ee5.png differ diff --git a/assets/index.html-20640c9f.js b/assets/index.html-20640c9f.js new file mode 100644 index 0000000..36d6b24 --- /dev/null +++ b/assets/index.html-20640c9f.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-73866439","path":"/support/","title":"Support","lang":"en-US","frontmatter":{"sidebar":false},"headers":[{"level":2,"title":"Community Support","slug":"community-support","link":"#community-support","children":[]},{"level":2,"title":"Enterprise Support by Abstracta","slug":"enterprise-support-by-abstracta","link":"#enterprise-support-by-abstracta","children":[]},{"level":2,"title":"Industry Support","slug":"industry-support","link":"#industry-support","children":[]}],"git":{},"filePathRelative":"support/index.md"}');export{t as data}; diff --git a/assets/index.html-4561fb8f.js b/assets/index.html-4561fb8f.js new file mode 100644 index 0000000..7c2db6d --- /dev/null +++ b/assets/index.html-4561fb8f.js @@ -0,0 +1,243 @@ +import{_ as o,r as p,o as c,c as i,a as s,b as n,d as e,e as t}from"./app-36a3af56.js";const l="/jmeter-dotnet-dsl/assets/azure-35125246.png",u="/jmeter-dotnet-dsl/assets/blazemeter-85d7b816.png",r="/jmeter-dotnet-dsl/assets/ultimate-thread-group-timeline-471befb4.png",d="/jmeter-dotnet-dsl/assets/ultimate-thread-group-gui-400bcb90.png",k="/jmeter-dotnet-dsl/assets/view-results-tree-431a3001.png",m="/jmeter-dotnet-dsl/assets/jmeter-http-sampler-debugging-ebeea624.png",h="/jmeter-dotnet-dsl/assets/intellij-remote-jvm-debug-448b6207.png",v="/jmeter-dotnet-dsl/assets/test-plan-gui-a4e8b653.png",b={},g=s("h1",{id:"user-guide",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#user-guide","aria-hidden":"true"},"#"),n(" User guide")],-1),f=s("p",null,"Here we share some tips and examples on how to use the DSL to tackle common use cases.",-1),y={href:"https://nunit.org/",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl.Tests",target:"_blank",rel:"noopener noreferrer"},T={href:"https://abstracta.github.io/jmeter-java-dsl/",target:"_blank",rel:"noopener noreferrer"},_={href:"https://github.com/abstracta/jmeter-dotnet-dsl/issues",target:"_blank",rel:"noopener noreferrer"},q={class:"custom-container tip"},x=s("p",{class:"custom-container-title"},"TIP",-1),S={href:"https://github.com/abstracta/jmeter-dotnet-dsl",target:"_blank",rel:"noopener noreferrer"},J={href:"http://jmeter.apache.org/usermanual/get-started.html",target:"_blank",rel:"noopener noreferrer"},D=t(`

Setup

To use the DSL just include it in your project:

dotnet add package Abstracta.JmeterDsl --version 0.3.2
+
`,3),M={class:"custom-container tip"},I=s("p",{class:"custom-container-title"},"TIP",-1),A={href:"https://github.com/abstracta/jmeter-dotnet-dsl-sample",target:"_blank",rel:"noopener noreferrer"},H={class:"custom-container warning"},j=s("p",{class:"custom-container-title"},"WARNING",-1),P=s("strong",null,"Java 8+ is required",-1),L={href:"https://adoptium.net/",target:"_blank",rel:"noopener noreferrer"},z=t(`

Simple HTTP test plan

To generate HTTP requests just use provided HttpSampler.

The following example uses 2 threads (concurrent users) that send 10 HTTP GET requests each to http://my.service.

Additionally, it logs collected statistics (response times, status codes, etc.) to a file (for later analysis if needed) and checks that the response time 99 percentile is less than 5 seconds.

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            //this is just to log details of each request stats
+            JtlWriter("jtls")
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

TIP

When working with multiple samplers in a test plan, specify their names (eg: HttpSampler("home", "http://my.service")) to easily check their respective statistics.

TIP

JMeter .Net DSL uses Java for executing JMeter test plans. If you need to tune JVM parameters, for example for specifying maximum heap memory size, you can use EmbeddedJMeterEngine and the JvmArgs method like in the following example:

using Abstracta.JmeterDsl.Core.Engines;
+...
+var stats = TestPlan(
+    ThreadGroup(2, 10,
+        HttpSampler("http://my.service")
+    )
+).RunIn(new EmbeddedJmeterEngine()
+    .JvmArgs("-Xmx4g")
+);
+
`,7),E={class:"custom-container tip"},R=s("p",{class:"custom-container-title"},"TIP",-1),G={href:"https://logging.apache.org/log4j/2.x/",target:"_blank",rel:"noopener noreferrer"},C=s("a",{href:"Abstracta.JmeterDsl.Tests/log4j2.xml"},"log4j2.xml",-1),B=t(`

TIP

Depending on the test framework you use, and the way you run your tests, you might be able to see JMeter logs and output in real-time, at the end of the test, or not see them at all. This is not something we can directly control in JMeter DSL, and heavily depends on the dotnet environment and testing framework implementation.

When using Nunit, to get real-time console output from JMeter you might want to run your tests with something like dotnet test -v n and add the following code to your tests:

private TextWriter? originalConsoleOut;
+
+// Redirecting output to progress to get live stdout with nunit.
+// https://github.com/nunit/nunit3-vs-adapter/issues/343
+// https://github.com/nunit/nunit/issues/1139
+[SetUp]
+public void SetUp()
+{
+    originalConsoleOut = Console.Out;
+    Console.SetOut(TestContext.Progress);
+}
+
+[TearDown]
+public void TearDown()
+{
+    Console.SetOut(originalConsoleOut!);
+}
+
`,1),N={class:"custom-container tip"},F=s("p",{class:"custom-container-title"},"TIP",-1),U={href:"https://github.com/abstracta/jmeter-java-dsl/issues/26#issuecomment-953783407",target:"_blank",rel:"noopener noreferrer"},W=s("p",null,[n("Check "),s("a",{href:"#http"},"HTTP performance testing"),n(" for additional details while testing HTTP services.")],-1),V=s("h2",{id:"run-test-at-scale",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#run-test-at-scale","aria-hidden":"true"},"#"),n(" Run test at scale")],-1),O={href:"https://abstracta.github.io/jmeter-java-dsl/guide/#run-test-at-scale",target:"_blank",rel:"noopener noreferrer"},Y={href:"https://github.com/abstracta/jmeter-dotnet-dsl/issues",target:"_blank",rel:"noopener noreferrer"},K=s("h3",{id:"azure-load-testing",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#azure-load-testing","aria-hidden":"true"},"#"),n(" Azure Load Testing")],-1),Z={href:"https://azure.microsoft.com/en-us/products/load-testing/",target:"_blank",rel:"noopener noreferrer"},X=t(`
dotnet add package Abstracta.JmeterDsl.Azure --version 0.3.2
+

And using the provided engine like this:

using Abstracta.JmeterDsl.Azure;
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).RunIn(new AzureEngine(Environment.GetEnvironmentVariable("AZURE_CREDS")) // AZURE_CREDS=tenantId:clientId:secretId
+            .TestName("dsl-test")
+            /* 
+            This specifies the number of engine instances used to execute the test plan. 
+            In this case, means that it will run 2(threads in thread group)x2(engines)=4 concurrent users/threads in total. 
+            Each engine executes the test plan independently.
+            */
+            .Engines(2) 
+            .TestTimeout(TimeSpan.FromMinutes(20)));
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+
`,3),$=s("code",null,"AZURE_CREDS",-1),Q=s("code",null,"tenantId:clientId:clientSecret",-1),nn={href:"https://portal.azure.com/#view/Microsoft_AAD_IAM/TenantPropertiesBlade",target:"_blank",rel:"noopener noreferrer"},sn={href:"https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal",target:"_blank",rel:"noopener noreferrer"},an=s("p",null,"With Azure, you can not only run the test at scale but also get additional features like nice real-time reporting, historic data tracking, etc. Here is an example of how a test looks like in Azure Load Testing:",-1),en=s("p",null,[s("img",{src:l,alt:"Azure Load Testing Example Execution Dashboard"})],-1),tn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl.Azure/AzureEngine.cs",target:"_blank",rel:"noopener noreferrer"},on=t(`

WARNING

By default, the engine is configured to time out if test execution takes more than 1 hour. This timeout exists to avoid any potential problem with Azure Load Testing execution not detected by the client, and avoid keeping the test indefinitely running until is interrupted by a user, which may incur unnecessary expenses in Azure and is especially annoying when running tests in an automated fashion, for example in CI/CD. It is strongly advised to set this timeout properly in each run, according to the expected test execution time plus some additional margin (to consider for additional delays in Azure Load Testing test setup and teardown) to avoid unexpected test plan execution failure (due to timeout) or unnecessary waits when there is some unexpected issue with Azure Load Testing execution.

TIP

If you want to get debug logs for HTTP calls to Azure API, you can include the following setting to an existing log4j2.xml configuration file:

<Logger name="us.abstracta.jmeter.javadsl.azure.AzureClient" level="DEBUG"/>
+<Logger name="okhttp3" level="DEBUG"/>
+

BlazeMeter

By including the following package:

dotnet add package Abstracta.JmeterDsl.BlazeMeter --version 0.3.2
+
`,5),pn={href:"https://www.blazemeter.com/",target:"_blank",rel:"noopener noreferrer"},cn=t(`
using Abstracta.JmeterDsl.BlazeMeter;
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            // number of threads and iterations are in the end overwritten by BlazeMeter engine settings 
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).RunIn(new BlazeMeterEngine(Environment.GetEnvironmentVariable("BZ_TOKEN"))
+            .TestName("DSL test")
+            .TotalUsers(500)
+            .HoldFor(TimeSpan.FromMinutes(10))
+            .ThreadsPerEngine(100)
+            .TestTimeout(TimeSpan.FromMinutes(20))
+            .TestName("dsl-test"));
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

This test is using BZ_TOKEN, a custom environment variable with <KEY_ID>:<KEY_SECRET> format, to get the BlazeMeter API authentication credentials.

`,2),ln={href:"https://guide.blazemeter.com/hc/en-us/articles/115002213289-BlazeMeter-API-keys-",target:"_blank",rel:"noopener noreferrer"},un=s("code",null,".RunIn(new BlazeMeterEngine(...))",-1),rn=s("p",null,"BlazeMeter will not only allow you to run the test at scale but also provides additional features like nice real-time reporting, historic data tracking, etc. Here is an example of how a test would look in BlazeMeter:",-1),dn=s("p",null,[s("img",{src:u,alt:"BlazeMeter Example Execution Dashboard"})],-1),kn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl.BlazeMeter/BlazeMeterEngine.cs",target:"_blank",rel:"noopener noreferrer"},mn=t(`

WARNING

By default the engine is configured to timeout if test execution takes more than 1 hour. This timeout exists to avoid any potential problem with BlazeMeter execution not detected by the client, and avoid keeping the test indefinitely running until is interrupted by a user, which may incur in unnecessary expenses in BlazeMeter and is specially annoying when running tests in automated fashion, for example in CI/CD. It is strongly advised to set this timeout properly in each run, according to the expected test execution time plus some additional margin (to consider for additional delays in BlazeMeter test setup and teardown) to avoid unexpected test plan execution failure (due to timeout) or unnecessary waits when there is some unexpected issue with BlazeMeter execution.

WARNING

BlazeMeterEngine always returns 0 as sentBytes statistics since there is no efficient way to get it from BlazMeter.

TIP

In case you want to get debug logs for HTTP calls to BlazeMeter API, you can include the following setting to an existing log4j2.xml configuration file:

<Logger name="us.abstracta.jmeter.javadsl.blazemeter.BlazeMeterClient" level="DEBUG"/>
+<Logger name="okhttp3" level="DEBUG"/>
+

Advanced threads configuration

JMeter DSL provides two simple ways of creating thread groups which are used in most scenarios:

  • specifying threads and the number of iterations each thread should execute before ending the test plan
  • specifying threads and duration for which each thread should execute before the test plan ends

This is how they look in code:

ThreadGroup(10, 20, ...) // 10 threads for 20 iterations each
+ThreadGroup(10, TimeSpan.FromSeconds(20), ...) // 10 threads for 20 seconds each
+

But these options are not good when working with many threads or when trying to configure some complex test scenarios (like when doing incremental or peak tests).

Thread ramps and holds

When working with many threads, it is advisable to configure a ramp-up period, to avoid starting all threads at once affecting performance metrics and generation.

You can easily configure a ramp-up with the DSL like this:

ThreadGroup().RampTo(10, TimeSpan.FromSeconds(5)).HoldIterating(20) // ramp to 10 threads for 5 seconds (1 thread every half second) and iterating each thread 20 times
+ThreadGroup().RampToAndHold(10, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)) //similar as above but after ramping up holding execution for 20 seconds
+

Additionally, you can use and combine these same methods to configure more complex scenarios (incremental, peak, and any other types of tests) like the following one:

ThreadGroup()
+    .RampToAndHold(10, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20))
+    .RampToAndHold(100, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30))
+    .RampTo(200, TimeSpan.FromSeconds(10))
+    .RampToAndHold(100, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30))
+    .RampTo(0, TimeSpan.FromSeconds(5))
+    .Children(
+      HttpSampler("http://my.service")
+    )
+

Which would translate into the following threads' timeline:

Thread Group Timeline

',17),hn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/jmeter-java-dsl/src/main/java/us/abstracta/jmeter/javadsl/core/threadgroups/DslThreadGroup.java",target:"_blank",rel:"noopener noreferrer"},vn=t('

TIP

If you are a JMeter GUI user, you may even be interested in using provided TestElement.ShowInGui() method, which shows the JMeter test element GUI that could help you understand what will DSL execute in JMeter. You can use this method with any test element generated by the DSL (not just thread groups).

For example, for the above test plan you would get a window like the following one:

UltimateThreadGroup GUI

TIP

When using multiple thread groups in a test plan, consider setting a name (eg: ThreadGroup("main", 1, 1, ...)) on them to properly identify associated requests in statistics & jtl results.

Test plan debugging

A usual requirement while building a test plan is to be able to review requests and responses and debug the test plan for potential issues in the configuration or behavior of the service under test. With JMeter DSL you have several options for this purpose.

View results tree

One option is using provided ResultsTreeVisualizer() like in the following example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            ResultsTreeVisualizer()
+        ).Run();
+    }
+}
+

This will display the JMeter built-in View Results Tree element, which allows you to review request and response contents in addition to collected metrics (spent time, sent & received bytes, etc.) for each request sent to the server, in a window like this one:

View Results Tree GUI

TIP

To debug test plans use a few iterations and threads to reduce the execution time and ease tracing by having less information to analyze.

TIP

When adding ResultsTreeVisualizer() as a child of a thread group, it will only display sample results of that thread group. When added as a child of a sampler, it will only show sample results for that sampler. You can use this to only review certain sample results in your test plan.

TIP

Remove ResultsTreeVisualizer() from test plans when are no longer needed (when debugging is finished). Leaving them might interfere with unattended test plan execution (eg: in CI) due to test plan execution not finishing until all visualizers windows are closed.

WARNING

By default, View Results Tree only displays the last 500 sample results. If you need to display more elements, use provided ResultsLimit(int) method which allows changing this value. Take into consideration that the more results are shown, the more memory that will require. So use this setting with care.

Debug JMeter code

You can even add breakpoints to JMeter or JMeter Java DSL code in your IDE and debug the code line by line providing the greatest possible detail.

Here is an example screenshot debugging HTTP Sampler:

JMeter HTTP Sampler debugging in IDE

For that, you need to:

  • have a Java IDE with JMeter or JMeter Java DSL code open.
  • set proper breakpoints in the code you are interested in debugging.
  • can configure Remote JVM Debug like in the following screenshot: IntelliJ Remote JVM Debug
  • set required JVM arguments in the JMeter .Net DSL test using EmbeddedJmeterEngine like in the following example:
    TestPlan(
    +      ThreadGroup(threads: 1, iterations: 1,
    +          HttpSampler("http://my.service")
    +      )
    +  ).RunIn(new EmbeddedJmeterEngine()
    +          .JvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"));
    +

    Note that we changed the suspend flag to y to block test execution until Remote JVM Debug is run in IDE.

  • run the JMeter .Net DSL test. The test should get stuck until you start Remote JVM Debug in the Java IDE.
  • start the Remote JVM Devug in the Java IDE.
  • wait for a breakpoint to activate and debug as usual 🙂.

TIP

JMeter class in charge of executing threads logic is org.apache.jmeter.threads.JMeterThread. You can check the classes used by each DSL-provided test element by checking the Java DSL code.

Dummy sampler

`,21),bn=s("code",null,"DummySampler",-1),gn={href:"https://jmeter-plugins.org/wiki/DummySampler/",target:"_blank",rel:"noopener noreferrer"},fn=t(`

Here is an example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        TestPlan(
+            ThreadGroup(2, 10,
+                // HttpSampler("http://my.service")
+                DummySampler("{\\"status\\" : \\"OK\\"}")
+            )
+        ).Run();
+    }
+}
+

TIP

The DSL configures dummy samplers by default, in contrast to what JMeter does, with response time simulation disabled. This allows to speed up the debugging process, not having to wait for proper response time simulation (sleeps/waits). If you want a more accurate emulation, you might turn it on through the ResponseTimeSimulation() method.

`,3),yn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/Core/Samplers/DslDummySampler.cs",target:"_blank",rel:"noopener noreferrer"},wn=t(`

Test plan review un JMeter GUI

A usual requirement for new DSL users that are used to Jmeter GUI, is to be able to review Jmeter DSL generated test plan in the familiar JMeter GUI. For this, you can use the ShowInGui() method in a test plan to open JMeter GUI with the preloaded test plan.

This can be also used to debug the test plan, by adding elements (like view results tree, dummy samplers, etc.) in the GUI and running the test plan.

Here is a simple example using the method:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).ShowInGui();
+    }
+}
+

Which ends up opening a window like this one:

Test plan in JMeter GUI

Reporting

',8),Tn={href:"https://abstracta.github.io/jmeter-java-dsl/guide/#reporting",target:"_blank",rel:"noopener noreferrer"},_n={href:"https://github.com/abstracta/jmeter-dotnet-dsl/issues",target:"_blank",rel:"noopener noreferrer"},qn=t(`

Log requests and responses

The main mechanism provided by JMeter (and Abstracta.JmeterDsl) to get information about generated requests, responses, and associated metrics is through the generation of JTL files.

This can be easily achieved by using provided JtlWriter like in this example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            JtlWriter("jtls")
+        ).Run();
+    }
+}
+
`,4),xn={class:"custom-container tip"},Sn=s("p",{class:"custom-container-title"},"TIP",-1),Jn=s("code",null,"JtlWriter",-1),Dn=s("code",null,"JtlWriter",-1),Mn=s("code",null,"WithAllFields()",-1),In=s("code",null,"JtlWriter",-1),An={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/Core/Listeners/JtlWriter.cs",target:"_blank",rel:"noopener noreferrer"},Hn=t(`

TIP

JtlWriter will automatically generate .jtl files applying this format: <yyyy-MM-dd HH-mm-ss> <UUID>.jtl.

If you need a specific file name, for example for later postprocessing logic (eg: using CI build ID), you can specify it by using JtlWriter(directory, fileName).

When specifying the file name, make sure to use unique names, otherwise, the JTL contents may be appended to previous existing jtl files.

An additional option, specially targeted towards logging sample responses, is ResponseFileSaver which automatically generates a file for each received response. Here is an example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            ResponseFileSaver(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss").Replace(":", "-") + "-response")
+        ).Run();
+    }
+}
+
`,3),jn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/Core/Listeners/ResponseFileSaver.cs",target:"_blank",rel:"noopener noreferrer"},Pn=t(`

Response processing

Use part of a response in a subsequent request (aka correlation)

It is a usual requirement while creating a test plan for an application to be able to use part of a response (e.g.: a generated ID, token, etc.) in a subsequent request. This can be easily achieved using JMeter extractors and variables.

Regular expressions extraction

Here is an example with JMeter DSL using regular expressions:

using System.Net.Http.Headers;
+using System.Net.Mime;
+
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service/accounts")
+                    .Post("{\\"name\\": \\"John Doe\\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+                    .Children(
+                        RegexExtractor("ACCOUNT_ID", "\\"id\\":\\"([^\\"]+)\\"")
+                    ),
+                HttpSampler("http://my.service/accounts/\${ACCOUNT_ID}")
+            )
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+
`,6),Ln={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/Core/PostProcessors/DslRegexExtractor.cs",target:"_blank",rel:"noopener noreferrer"},zn=s("h2",{id:"protocols",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#protocols","aria-hidden":"true"},"#"),n(" Protocols")],-1),En=s("h3",{id:"http",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#http","aria-hidden":"true"},"#"),n(" HTTP")],-1),Rn=s("p",null,"Throughout this guide, several examples have been shown for simple cases of HTTP requests (mainly how to do gets and posts), but the DSL provides additional features that you might need to be aware of.",-1),Gn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/JmeterDsl.cs",target:"_blank",rel:"noopener noreferrer"},Cn={href:"https://github.com/abstracta/jmeter-dotnet-dsl/tree/master/Abstracta.JmeterDsl/Http/DslHttpSampler.cs",target:"_blank",rel:"noopener noreferrer"},Bn=t(`

Methods & body

As previously seen, you can do simple gets and posts like in the following snippet:

HttpSampler("http://my.service") // A simple get
+HttpSampler("http://my.service")
+    .Post("{\\"field\\":\\"val\\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json)) // simple post
+

But you can also use additional methods to specify any HTTP method and body:

HttpSampler("http://my.service")
+  .Method(HttpMethod.Put.Method)
+  .ContentType(new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+  .Body("{\\"field\\":\\"val\\"}")
+

Headers

You might have already noticed in some of the examples that we have shown, some ways to set some headers. For instance, in the following snippet, Content-Type header is being set in two different ways:

HttpSampler("http://my.service")
+  .Post("{\\"field\\":\\"val\\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+HttpSampler("http://my.service")
+  .ContentType(new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+

These are handy methods to specify the Content-Type header, but you can also set any header on a particular request using provided Header method, like this:

HttpSampler("http://my.service")
+  .Header("X-First-Header", "val1")
+  .Header("X-Second-Header", "val2")
+

Additionally, you can specify headers to be used by all samplers in a test plan, thread group, transaction controllers, etc. For this, you can use HttpHeaders like this:

TestPlan(
+    ThreadGroup(2, 10,
+        HttpHeaders()
+          .Header("X-Header", "val1"),
+        HttpSampler("http://my.service"),
+        HttpSampler("http://my.service/users")
+    )
+).Run();
+

Cookies & caching

JMeter DSL automatically adds a cookie manager and cache manager for automatic HTTP cookie and caching handling, emulating a browser behavior. If you need to disable them you can use something like this:

TestPlan(
+    HttpCookies().Disable(),
+    HttpCache().Disable(),
+    ThreadGroup(2, 10,
+        HttpSampler("http://my.service")
+    )
+)
+
`,15);function Nn(Fn,Un){const a=p("ExternalLinkIcon");return c(),i("div",null,[g,f,s("p",null,[n("Provided examples use "),s("a",y,[n("Nunit"),e(a)]),n(", but you can use other test libraries.")]),s("p",null,[n("Explore the DSL in your preferred IDE to discover all available features, and consider reviewing "),s("a",w,[n("existing tests"),e(a)]),n(" for additional examples.")]),s("p",null,[n("The .Net DSL currently does not support all use cases supported by the "),s("a",T,[n("Java Dsl"),e(a)]),n(", and currently only focuses on a limited set of features that cover the most commonly used cases. If you identify any particular scenario (or JMeter feature) that you need and is not currently supported, or easy to use, "),s("strong",null,[n("please let us know by "),s("a",_,[n("creating an issue"),e(a)])]),n(" and we will try to implement it as soon as possible. Usually porting JMeter features is quite fast, and porting existing Java DSL features is even faster.")]),s("div",q,[x,s("p",null,[n("If you like this project, "),s("strong",null,[n("please give it a star ⭐ in "),s("a",S,[n("GitHub"),e(a)]),n("!")]),n(". This helps the project be more visible, gain relevance and encourages us to invest more effort in new features.")])]),s("p",null,[n("For an intro to JMeter concepts and components, you can check "),s("a",J,[n("JMeter official documentation"),e(a)]),n(".")]),D,s("div",M,[I,s("p",null,[s("a",A,[n("Here"),e(a)]),n(" is a sample project in case you want to start one from scratch.")])]),s("div",H,[j,s("p",null,[n("JMeter .Net DSL uses existing JMeter Java DSL which in turn uses JMeter. JMeter Java DSL and JMeter are Java based tools. So, "),P,n(" for the proper execution of DSL test plans. One option is downloading a JVM from "),s("a",L,[n("Adoptium"),e(a)]),n(" if you don't have one already.")])]),z,s("div",E,[R,s("p",null,[n("Since JMeter uses "),s("a",G,[n("log4j2"),e(a)]),n(", if you want to control the logging level or output, you can use something similar to this "),C,n(', using "CopyToOutputDirectory" in the project item, so the file is available in dotnet build output directory as well (check [Abstracta.JmeterDsl.Test/Abstracta.JmeterDsl.Tests.csproj]).')])]),B,s("div",N,[F,s("p",null,[n("Keep in mind that you can use .Net programming to modularize and create abstractions which allow you to build complex test plans that are still easy to read, use and maintain. "),s("a",U,[n("Here is an example"),e(a)]),n(" of some complex abstraction built using Java features (you can easily extrapolate to .Net) and the DSL.")])]),W,V,s("p",null,[n("Running a load test from one machine is not always enough, since you are limited to the machine's hardware capabilities. Sometimes, is necessary to run the test using a cluster of machines to be able to generate enough load for the system under test. Currently, the .Net DSL only provides two ways to run tests at scale, but in the future, we plan to support more ("),s("a",O,[n("as Java DSL does"),e(a)]),n("). If you are interested in some not yet covered feature, please ask for it by creating an "),s("a",Y,[n("issue in the repository"),e(a)]),n(".")]),K,s("p",null,[n("To use "),s("a",Z,[n("Azure Load Testing"),e(a)]),n(" to execute your test plans at scale is as easy as including the following package to your project:")]),X,s("blockquote",null,[s("p",null,[n("This test is using "),$,n(", a custom environment variable containing "),Q,n(" with proper values for each. Check at "),s("a",nn,[n("Azure Portal tenant properties"),e(a)]),n(" the proper tenant ID for your subscription, and follow "),s("a",sn,[n("this guide"),e(a)]),n(" to register an application with proper permissions and secrets generation for tests execution.")])]),an,en,s("p",null,[n("Check "),s("a",tn,[n("AzureEngine"),e(a)]),n(" for details on usage and available settings when running tests in Azure Load Testing.")]),on,s("p",null,[n("You can easily run a JMeter test plan at scale in "),s("a",pn,[n("BlazeMeter"),e(a)]),n(" like this:")]),cn,s("p",null,[n("Note that is as simple as "),s("a",ln,[n("generating a BlazeMeter authentication token"),e(a)]),n(" and adding "),un,n(" to any existing JMeter DSL test to get it running at scale in BlazeMeter.")]),rn,dn,s("p",null,[n("Check "),s("a",kn,[n("BlazeMeterEngine"),e(a)]),n(" for details on usage and available settings when running tests in BlazeMeter.")]),mn,s("p",null,[n("Check "),s("a",hn,[n("DslThreadGroup"),e(a)]),n(" for more details.")]),vn,s("p",null,[n("In many cases, you want to be able to test part of the test plan but without directly interacting with the service under test, avoiding any potential traffic to the servers, testing some border cases which might be difficult to reproduce with the actual server, and avoid actual server interactions variability and potential unpredictability. In such scenarios, you might replace actual samplers with "),bn,n(" (which uses "),s("a",gn,[n("Dummy Sampler plugin"),e(a)]),n(") to be able to test extractors, assertions, controllers conditions, and other parts of the test plan under certain conditions/results generated by the samplers.")]),fn,s("p",null,[n("Check "),s("a",yn,[n("DslDummySampler"),e(a)]),n(" for more information o additional configuration and options.")]),wn,s("p",null,[n("Once you have a test plan you would usually want to be able to analyze the collected information. This section contains a few ways to achieve this, but in the future, we plan to support more ("),s("a",Tn,[n("as Java DSL does"),e(a)]),n("). If you are interested in some not yet covered feature, please ask for it by creating an "),s("a",_n,[n("issue in the repository"),e(a)]),n(".")]),qn,s("div",xn,[Sn,s("p",null,[n("By default, "),Jn,n(" will write the most used information to evaluate the performance of the tested service. If you want to trace all the information of each request you may use "),Dn,n(" with the "),Mn,n(" option. Doing this will provide all the information at the cost of additional computation and resource usage (fewer resources for actual load testing). You can tune which fields to include or not with "),In,n(" and only log what you need, check "),s("a",An,[n("JtlWriter"),e(a)]),n(" for more details.")])]),Hn,s("p",null,[n("Check "),s("a",jn,[n("ResponseFileSaver"),e(a)]),n(" for more details.")]),Pn,s("p",null,[n("Check "),s("a",Ln,[n("DslRegexExtractor"),e(a)]),n(" for more details and additional options.")]),zn,En,Rn,s("p",null,[n("Here we show some of them, but check "),s("a",Gn,[n("JmeterDsl"),e(a)]),n(" and "),s("a",Cn,[n("DslHttpSampler"),e(a)]),n(" to explore all available features.")]),Bn])}const Vn=o(b,[["render",Nn],["__file","index.html.vue"]]);export{Vn as default}; diff --git a/assets/index.html-46b1f23c.js b/assets/index.html-46b1f23c.js new file mode 100644 index 0000000..8e87591 --- /dev/null +++ b/assets/index.html-46b1f23c.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"","lang":"en-US","frontmatter":{"home":true,"heroHeight":68,"heroImage":"/logo.svg","actions":[{"text":"User Guide →","link":"/guide/"}],"features":[{"title":"💙 Git, IDE & Programmers Friendly","details":"Simple way of defining performance tests that takes advantage of IDEs autocompletion and inline documentation."},{"title":"💪 JMeter ecosystem & community","details":"Use the most popular performance tool and take advantage of the wide support of protocols and tools."},{"title":"😎 Built-in features & extensibility","details":"Built-in additional features which ease usage and using it in CI/CD pipelines."}],"footer":"Made by Abstracta with ❤️ | Apache 2.0 Licensed | Powered by Vuepress","footerHtml":true},"headers":[{"level":2,"title":"Example","slug":"example","link":"#example","children":[]}],"git":{},"filePathRelative":"index.md"}');export{e as data}; diff --git a/assets/index.html-808f81a0.js b/assets/index.html-808f81a0.js new file mode 100644 index 0000000..821d13e --- /dev/null +++ b/assets/index.html-808f81a0.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-fffb8e28","path":"/guide/","title":"User guide","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Setup","slug":"setup","link":"#setup","children":[]},{"level":2,"title":"Simple HTTP test plan","slug":"simple-http-test-plan","link":"#simple-http-test-plan","children":[]},{"level":2,"title":"Run test at scale","slug":"run-test-at-scale","link":"#run-test-at-scale","children":[{"level":3,"title":"Azure Load Testing","slug":"azure-load-testing","link":"#azure-load-testing","children":[]},{"level":3,"title":"BlazeMeter","slug":"blazemeter","link":"#blazemeter","children":[]}]},{"level":2,"title":"Advanced threads configuration","slug":"advanced-threads-configuration","link":"#advanced-threads-configuration","children":[{"level":3,"title":"Thread ramps and holds","slug":"thread-ramps-and-holds","link":"#thread-ramps-and-holds","children":[]}]},{"level":2,"title":"Test plan debugging","slug":"test-plan-debugging","link":"#test-plan-debugging","children":[{"level":3,"title":"View results tree","slug":"view-results-tree","link":"#view-results-tree","children":[]},{"level":3,"title":"Debug JMeter code","slug":"debug-jmeter-code","link":"#debug-jmeter-code","children":[]},{"level":3,"title":"Dummy sampler","slug":"dummy-sampler","link":"#dummy-sampler","children":[]},{"level":3,"title":"Test plan review un JMeter GUI","slug":"test-plan-review-un-jmeter-gui","link":"#test-plan-review-un-jmeter-gui","children":[]}]},{"level":2,"title":"Reporting","slug":"reporting","link":"#reporting","children":[{"level":3,"title":"Log requests and responses","slug":"log-requests-and-responses","link":"#log-requests-and-responses","children":[]}]},{"level":2,"title":"Response processing","slug":"response-processing","link":"#response-processing","children":[{"level":3,"title":"Use part of a response in a subsequent request (aka correlation)","slug":"use-part-of-a-response-in-a-subsequent-request-aka-correlation","link":"#use-part-of-a-response-in-a-subsequent-request-aka-correlation","children":[{"level":4,"title":"Regular expressions extraction","slug":"regular-expressions-extraction","link":"#regular-expressions-extraction","children":[]}]}]},{"level":2,"title":"Protocols","slug":"protocols","link":"#protocols","children":[{"level":3,"title":"HTTP","slug":"http","link":"#http","children":[{"level":4,"title":"Methods & body","slug":"methods-body","link":"#methods-body","children":[]},{"level":4,"title":"Headers","slug":"headers","link":"#headers","children":[]},{"level":4,"title":"Cookies & caching","slug":"cookies-caching","link":"#cookies-caching","children":[]}]}]}],"git":{},"filePathRelative":"guide/index.md"}');export{e as data}; diff --git a/assets/index.html-ae1e22a7.js b/assets/index.html-ae1e22a7.js new file mode 100644 index 0000000..6d5926c --- /dev/null +++ b/assets/index.html-ae1e22a7.js @@ -0,0 +1,17 @@ +import{_ as e,r as t,o as p,c,a as n,b as s,d as o,e as l}from"./app-36a3af56.js";const i={},u=l(`

Example

Add the package to your project:

dotnet add package Abstracta.JmeterDsl --version 0.3.2
+

Create performance test:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

Java 8+ is required for test plan execution.

`,6),r={href:"https://github.com/abstracta/jmeter-dotnet-dsl-sample",target:"_blank",rel:"noopener noreferrer"};function d(k,m){const a=t("ExternalLinkIcon");return p(),c("div",null,[u,n("p",null,[n("a",r,[s("Here"),o(a)]),s(" is a sample project in case you want to start one from scratch.")])])}const b=e(i,[["render",d],["__file","index.html.vue"]]);export{b as default}; diff --git a/assets/index.html-dda19cfd.js b/assets/index.html-dda19cfd.js new file mode 100644 index 0000000..ea3b1fe --- /dev/null +++ b/assets/index.html-dda19cfd.js @@ -0,0 +1 @@ +import{_ as r,r as a,o as n,c as i,a as e,b as t,d as o,e as c}from"./app-36a3af56.js";const d="/jmeter-dotnet-dsl/assets/abstracta-logo-63bce99b.png",p="/jmeter-dotnet-dsl/assets/blazemeter-logo-a5731ee5.png",l="/jmeter-dotnet-dsl/assets/octoperf-logo-dc518d38.png",u="/jmeter-dotnet-dsl/assets/azure-logo-1bad44c3.png",h={},m=e("h1",{id:"support",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#support","aria-hidden":"true"},"#"),t(" Support")],-1),g=e("h2",{id:"community-support",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#community-support","aria-hidden":"true"},"#"),t(" Community Support")],-1),f=e("p",null,"The JMeter DSL project has a vibrant and active community that provides extensive support, on a best effort basis, to its users. Community support is primarily offered through the following channels:",-1),_={href:"https://discord.gg/WNSn5hqmSd",target:"_blank",rel:"noopener noreferrer"},b={href:"https://discord.gg/WNSn5hqmSd",target:"_blank",rel:"noopener noreferrer"},v={href:"https://github.com/abstracta/jmeter-dotnet-dsl/issues",target:"_blank",rel:"noopener noreferrer"},y={href:"https://github.com/abstracta/jmeter-dotnet-dsl/issues",target:"_blank",rel:"noopener noreferrer"},S={href:"https://github.com/abstracta/jmeter-dotnet-dsl/discussions",target:"_blank",rel:"noopener noreferrer"},w={href:"https://github.com/abstracta/jmeter-dotnet-dsl/discussions",target:"_blank",rel:"noopener noreferrer"},x=e("p",null,"The community is actively involved in proposing new improvements, answering questions, assisting in design decisions, and submitting pull requests. Together, we strive to enhance the capabilities and usability of JMeter DSL.",-1),k=e("h2",{id:"enterprise-support-by-abstracta",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#enterprise-support-by-abstracta","aria-hidden":"true"},"#"),t(" Enterprise Support by Abstracta")],-1),D={href:"https://abstracta.us",target:"_blank",rel:"noopener noreferrer"},L=e("ul",null,[e("li",null,"Dedicated support team : Get prompt answers and peace of mind from a dedicated support team with the expertise to help you resolve issues faster."),e("li",null,"Customizations: Receive tailored solutions to meet your specific requirements."),e("li",null,"Consulting services: Access a team of experts to fine-tune your JMeter DSL usage, speed up implementation, work on your performance testing strategy and overall testing processes.")],-1),J=e("p",null,"Abstracta is committed to helping organizations succeed with JMeter DSL by providing comprehensive support and specialized services tailored to your enterprise needs.",-1),M={href:"https://abstracta.us/contact-us",target:"_blank",rel:"noopener noreferrer"},z=c('

Industry Support

JMeter DSL has received valuable support from industry-leading companies, contributing to the integration features and promoting the tool. We would like to acknowledge and express our gratitude to the following companies:

',4);function j(A,I){const s=a("ExternalLinkIcon");return n(),i("div",null,[m,g,f,e("ul",null,[e("li",null,[e("a",_,[t("Discord server"),o(s)]),t(": Join our "),e("a",b,[t("Discord server"),o(s)]),t(" to engage with fellow JMeter DSL enthusiasts. It's a real-time platform where you can ask questions, share experiences, and participate in discussions.")]),e("li",null,[e("a",v,[t("GitHub Issues"),o(s)]),t(": For bug reports, feature requests, or any specific problems you encounter while using JMeter DSL, "),e("a",y,[t("GitHub Issues"),o(s)]),t(" is the place to go. Create an issue, and the community will jump in to assist you, propose improvements, and collaborate on finding solutions.")]),e("li",null,[e("a",S,[t("GitHub Discussions"),o(s)]),t(": If you have open-ended discussions, ideas, or suggestions related to JMeter DSL, head over to "),e("a",w,[t("GitHub Discussions"),o(s)]),t(". It's an excellent platform for brainstorming, gathering feedback, and engaging in community-driven conversations.")])]),x,k,e("p",null,[t("In addition to community support, "),e("a",D,[t("Abstracta"),o(s)]),t(" offers enterprise-level support for JMeter DSL users. Abstracta is the main supporter of JMeter DSL development and provides specialized professional services to ensure the success of organizations using JMeter DSL. With Abstracta's enterprise support, you can accelerate your JMeter DSL implementation and have access to:")]),L,J,e("p",null,[t("To explore Abstracta's enterprise support options or discuss your specific needs, please "),e("a",M,[t("contact the Abstracta team"),o(s)]),t(".")]),z])}const C=r(h,[["render",j],["__file","index.html.vue"]]);export{C as default}; diff --git a/assets/intellij-remote-jvm-debug-448b6207.png b/assets/intellij-remote-jvm-debug-448b6207.png new file mode 100644 index 0000000..e4bfedf Binary files /dev/null and b/assets/intellij-remote-jvm-debug-448b6207.png differ diff --git a/assets/jmeter-http-sampler-debugging-ebeea624.png b/assets/jmeter-http-sampler-debugging-ebeea624.png new file mode 100644 index 0000000..388fbd8 Binary files /dev/null and b/assets/jmeter-http-sampler-debugging-ebeea624.png differ diff --git a/assets/octoperf-logo-dc518d38.png b/assets/octoperf-logo-dc518d38.png new file mode 100644 index 0000000..d39525e Binary files /dev/null and b/assets/octoperf-logo-dc518d38.png differ diff --git a/assets/search-0782d0d1.svg b/assets/search-0782d0d1.svg new file mode 100644 index 0000000..03d8391 --- /dev/null +++ b/assets/search-0782d0d1.svg @@ -0,0 +1 @@ + diff --git a/assets/style-287f3d2a.css b/assets/style-287f3d2a.css new file mode 100644 index 0000000..b6ef70c --- /dev/null +++ b/assets/style-287f3d2a.css @@ -0,0 +1 @@ +:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/jmeter-dotnet-dsl/assets/back-to-top-8efcbe56.svg) no-repeat;mask:url(/jmeter-dotnet-dsl/assets/back-to-top-8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}@media print{.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem;overflow-wrap:break-word}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{a.header-anchor{display:none}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}@media print{a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}}p,ul,ol{line-height:1.7;overflow-wrap:break-word}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(2n) code{background-color:var(--c-bg-dark)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;font-weight:600;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.375;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent!important;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{content:attr(data-ext);position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.375}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.375;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.375em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{color:var(--c-warning-text-light);background-color:var(--c-warning-bg-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.warning .external-link-icon{--external-link-icon-color: var(--c-warning-text-quote)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{color:var(--c-danger-text-light);background-color:var(--c-danger-bg-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.danger .external-link-icon{--external-link-icon-color: var(--c-danger-text-quote)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar{display:none}@media (max-width: 719px){.theme-container.no-sidebar .sidebar{display:block}}.theme-container.no-sidebar .page{padding-left:0}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media screen and (max-width: 719px){.navbar{padding-left:4rem}.navbar .site-name{display:block;width:calc(100vw - 11rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.navbar .can-hide{display:none}}.navbar-items{display:inline-block}@media print{.navbar-items{display:none}}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:0;border-bottom:none}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.toggle-color-mode-button{display:none}}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper.mobile .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}.navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.navbar-dropdown-wrapper:not(.mobile):hover .navbar-dropdown,.navbar-dropdown-wrapper:not(.mobile).open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper:not(.mobile).open:blur{display:none}.navbar-dropdown-wrapper:not(.mobile) .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}@media print{.page-meta .edit-link{display:none}}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"←"}.page-nav .next{float:right}.page-nav .next a:after{content:"→"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.collapsible{cursor:pointer}.sidebar-item.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--c-brand: #a502ce;--c-brand-light: #b55ecb;--c-shadow: rgba(0,0,0,.2)}html.dark{--c-brand: #b55ecb;--c-brand-light: #a502ce;--c-shadow: rgba(255,255,255,.2)}a.external-link>svg~span:nth-child(2){display:none}.vertical-divider{display:inline-flex;width:0;border:solid;border-width:0 thin 0 0;border-color:var(--c-border);min-height:80%;vertical-align:text-bottom;margin:0 .5rem}.hero-logo{margin:3rem auto 1.5rem;display:flex;align-items:center;justify-content:center}.hero-logo span{font-weight:500;font-size:3rem;color:var(--c-text-accent);margin:0 0 0 .7rem}.grid{display:flex}.grid-logo{display:flex;align-items:center;width:25%;height:100px;margin-right:10px;padding:10px;border:1px solid var(--c-border);border-radius:5px;box-shadow:0 4px 8px 0 var(--c-shadow)}.grid-logo a{width:100%}.grid-logo img{width:100%;-webkit-filter:drop-shadow(1px 0 0 white) drop-shadow(0 1px 0 white) drop-shadow(-1px 0 0 white) drop-shadow(0 -1px 0 white);-filter:drop-shadow(1px 0 0 white) drop-shadow(0 1px 0 white) drop-shadow(-1px 0 0 white) drop-shadow(0 -1px 0 white)}:root{--search-bg-color: #ffffff;--search-accent-color: #3eaf7c;--search-text-color: #2c3e50;--search-border-color: #eaecef;--search-item-text-color: #5d81a5;--search-item-focus-bg-color: #f3f4f5;--search-input-width: 8rem;--search-result-width: 20rem}.search-box{display:inline-block;position:relative;margin-left:1rem}@media print{.search-box{display:none}}.search-box input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all ease .3s;background:var(--search-bg-color) url(/jmeter-dotnet-dsl/assets/search-0782d0d1.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width: 719px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width: 419px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}}html.dark{--box-shadow: #0f0e0d;--card-shadow: rgba(0, 0, 0, .3);--black: #fff;--dark-grey: #999;--light-grey: #666;--white: #000;--grey3: #bbb;--grey12: #333;--grey14: #111}:root{--vp-bg: var(--c-bg, #fff);--vp-bgl: var(--c-bg-light, #f3f4f5);--vp-bglt: var(--c-bg-lighter, #eeeeee);--vp-c: var(--c-text, #2c3e50);--vp-cl: var(--c-text-light, #3a5169);--vp-clt: var(--c-text-lighter, #4e6e8e);--vp-brc: var(--c-border, #eaecef);--vp-brcd: var(--c-border-dark, #dfe2e5);--vp-tc: var(--c-brand, #3eaf7c);--vp-tcl: var(--c-brand-light, #4abf8a);--vp-ct: var(--t-color, .3s ease);--vp-tt: var(--t-transform, .3s ease);--box-shadow: #f0f1f2;--card-shadow: rgba(0, 0, 0, .15);--black: #000;--dark-grey: #666;--light-grey: #999;--white: #fff;--grey3: #333;--grey12: #bbb;--grey14: #eee}:root{--balloon-border-radius: 2px;--balloon-color: rgba(16, 16, 16, .95);--balloon-text-color: #fff;--balloon-font-size: 12px;--balloon-move: 4px}button[aria-label][data-balloon-pos]{overflow:visible}[aria-label][data-balloon-pos]{position:relative;cursor:pointer}[aria-label][data-balloon-pos]:after{opacity:0;pointer-events:none;transition:all .18s ease-out .18s;text-indent:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:400;font-style:normal;text-shadow:none;font-size:var(--balloon-font-size);background:var(--balloon-color);border-radius:2px;color:var(--balloon-text-color);border-radius:var(--balloon-border-radius);content:attr(aria-label);padding:.5em 1em;position:absolute;white-space:nowrap;z-index:10}[aria-label][data-balloon-pos]:before{width:0;height:0;border:5px solid transparent;border-top-color:var(--balloon-color);opacity:0;pointer-events:none;transition:all .18s ease-out .18s;content:"";position:absolute;z-index:10}[aria-label][data-balloon-pos]:hover:before,[aria-label][data-balloon-pos]:hover:after,[aria-label][data-balloon-pos][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-visible]:after,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after{opacity:1;pointer-events:none}[aria-label][data-balloon-pos].font-awesome:after{font-family:FontAwesome,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}[aria-label][data-balloon-pos][data-balloon-break]:after{white-space:pre}[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after{white-space:pre-line;word-break:break-word}[aria-label][data-balloon-pos][data-balloon-blunt]:before,[aria-label][data-balloon-pos][data-balloon-blunt]:after{transition:none}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:after{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:before{transform:translate(-50%)}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:after{left:0}[aria-label][data-balloon-pos][data-balloon-pos*=-left]:before{left:5px}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:after{right:0}[aria-label][data-balloon-pos][data-balloon-pos*=-right]:before{right:5px}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:after,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:after{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:before,[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:before{transform:translate(0)}[aria-label][data-balloon-pos][data-balloon-pos^=up]:before,[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{bottom:100%;transform-origin:top;transform:translateY(var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=up]:after{margin-bottom:10px}[aria-label][data-balloon-pos][data-balloon-pos=up]:before,[aria-label][data-balloon-pos][data-balloon-pos=up]:after{left:50%;transform:translate(-50%,var(--balloon-move))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before,[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{top:100%;transform:translateY(calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos^=down]:after{margin-top:10px}[aria-label][data-balloon-pos][data-balloon-pos^=down]:before{width:0;height:0;border:5px solid transparent;border-bottom-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=down]:after,[aria-label][data-balloon-pos][data-balloon-pos=down]:before{left:50%;transform:translate(-50%,calc(var(--balloon-move) * -1))}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:after,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:after{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:before,[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:before,[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:before{transform:translateY(-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after,[aria-label][data-balloon-pos][data-balloon-pos=left]:before{right:100%;top:50%;transform:translate(var(--balloon-move),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=left]:after{margin-right:10px}[aria-label][data-balloon-pos][data-balloon-pos=left]:before{width:0;height:0;border:5px solid transparent;border-left-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after,[aria-label][data-balloon-pos][data-balloon-pos=right]:before{left:100%;top:50%;transform:translate(calc(var(--balloon-move) * -1),-50%)}[aria-label][data-balloon-pos][data-balloon-pos=right]:after{margin-left:10px}[aria-label][data-balloon-pos][data-balloon-pos=right]:before{width:0;height:0;border:5px solid transparent;border-right-color:var(--balloon-color)}[aria-label][data-balloon-pos][data-balloon-length]:after{white-space:normal}[aria-label][data-balloon-pos][data-balloon-length=small]:after{width:80px}[aria-label][data-balloon-pos][data-balloon-length=medium]:after{width:150px}[aria-label][data-balloon-pos][data-balloon-length=large]:after{width:260px}[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:380px}@media screen and (max-width: 768px){[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after{width:90vw}}[aria-label][data-balloon-pos][data-balloon-length=fit]:after{width:100%}:root{--copy-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--copied-icon: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}div[class*=language-]>button.copy-code-button{border-width:0;background:transparent;position:absolute;outline:none;cursor:pointer}@media print{div[class*=language-]>button.copy-code-button{display:none}}div[class*=language-]>button.copy-code-button .copy-icon{background:currentcolor;-webkit-mask-image:var(--copy-icon);mask-image:var(--copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:1em;mask-size:1em}div[class*=language-]>button.copy-code-button:not(.fancy){border-width:0;background:transparent;cursor:pointer;position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-radius:.5rem;opacity:0;transition:opacity .4s}div[class*=language-]>button.copy-code-button:not(.fancy):hover,div[class*=language-]>button.copy-code-button:not(.fancy).copied{background:var(--code-hl-bg-color, rgba(0, 0, 0, .66))}div[class*=language-]>button.copy-code-button:not(.fancy):focus,div[class*=language-]>button.copy-code-button:not(.fancy).copied{opacity:1}div[class*=language-]>button.copy-code-button:not(.fancy).copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--code-hl-bg-color, rgba(0, 0, 0, .66));color:var(--code-ln-color, #9e9e9e);font-weight:500;line-height:1.25rem;white-space:nowrap}div[class*=language-]>button.copy-code-button:not(.fancy) .copy-icon{width:1.25rem;height:1.25rem;padding:.625rem;color:var(--code-ln-color, #9e9e9e);font-size:1.25rem}div[class*=language-]>button.copy-code-button.fancy{right:-14px;bottom:-14px;z-index:5;width:2rem;height:2rem;padding:7px 8px;border-radius:50%;background:#339af0;color:#fff}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy{right:0;bottom:0;width:28px;height:28px;border-radius:50% 10% 0}}div[class*=language-]>button.copy-code-button.fancy:hover{background:#228be6}div[class*=language-]>button.copy-code-button.fancy .copy-icon{width:100%;height:100%;color:#fff;font-size:1.25rem}@media (max-width: 419px){div[class*=language-]>button.copy-code-button.fancy .copy-icon{position:relative;top:2px;left:2px}}div[class*=language-]>button.copy-code-button.copied .copy-icon{-webkit-mask-image:var(--copied-icon);mask-image:var(--copied-icon)}div[class*=language-]:hover:before{display:none}div[class*=language-]:hover>button.copy-code-button:not(.fancy){opacity:1}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)} diff --git a/assets/test-plan-gui-a4e8b653.png b/assets/test-plan-gui-a4e8b653.png new file mode 100644 index 0000000..5de4198 Binary files /dev/null and b/assets/test-plan-gui-a4e8b653.png differ diff --git a/assets/ultimate-thread-group-gui-400bcb90.png b/assets/ultimate-thread-group-gui-400bcb90.png new file mode 100644 index 0000000..8703fb1 Binary files /dev/null and b/assets/ultimate-thread-group-gui-400bcb90.png differ diff --git a/assets/ultimate-thread-group-timeline-471befb4.png b/assets/ultimate-thread-group-timeline-471befb4.png new file mode 100644 index 0000000..71073cc Binary files /dev/null and b/assets/ultimate-thread-group-timeline-471befb4.png differ diff --git a/assets/view-results-tree-431a3001.png b/assets/view-results-tree-431a3001.png new file mode 100644 index 0000000..77bcf22 Binary files /dev/null and b/assets/view-results-tree-431a3001.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..75de640 Binary files /dev/null and b/favicon.ico differ diff --git a/guide/index.html b/guide/index.html new file mode 100644 index 0000000..0dbc769 --- /dev/null +++ b/guide/index.html @@ -0,0 +1,280 @@ + + + + + + + + + User guide | jmeter-dotnet-dsl + + + + +

User guide

Here we share some tips and examples on how to use the DSL to tackle common use cases.

Provided examples use Nunitopen in new window, but you can use other test libraries.

Explore the DSL in your preferred IDE to discover all available features, and consider reviewing existing testsopen in new window for additional examples.

The .Net DSL currently does not support all use cases supported by the Java Dslopen in new window, and currently only focuses on a limited set of features that cover the most commonly used cases. If you identify any particular scenario (or JMeter feature) that you need and is not currently supported, or easy to use, please let us know by creating an issueopen in new window and we will try to implement it as soon as possible. Usually porting JMeter features is quite fast, and porting existing Java DSL features is even faster.

TIP

If you like this project, please give it a star ⭐ in GitHubopen in new window!. This helps the project be more visible, gain relevance and encourages us to invest more effort in new features.

For an intro to JMeter concepts and components, you can check JMeter official documentationopen in new window.

Setup

To use the DSL just include it in your project:

dotnet add package Abstracta.JmeterDsl --version 0.3.2
+

TIP

Hereopen in new window is a sample project in case you want to start one from scratch.

WARNING

JMeter .Net DSL uses existing JMeter Java DSL which in turn uses JMeter. JMeter Java DSL and JMeter are Java based tools. So, Java 8+ is required for the proper execution of DSL test plans. One option is downloading a JVM from Adoptiumopen in new window if you don't have one already.

Simple HTTP test plan

To generate HTTP requests just use provided HttpSampler.

The following example uses 2 threads (concurrent users) that send 10 HTTP GET requests each to http://my.service.

Additionally, it logs collected statistics (response times, status codes, etc.) to a file (for later analysis if needed) and checks that the response time 99 percentile is less than 5 seconds.

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            //this is just to log details of each request stats
+            JtlWriter("jtls")
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

TIP

When working with multiple samplers in a test plan, specify their names (eg: HttpSampler("home", "http://my.service")) to easily check their respective statistics.

TIP

JMeter .Net DSL uses Java for executing JMeter test plans. If you need to tune JVM parameters, for example for specifying maximum heap memory size, you can use EmbeddedJMeterEngine and the JvmArgs method like in the following example:

using Abstracta.JmeterDsl.Core.Engines;
+...
+var stats = TestPlan(
+    ThreadGroup(2, 10,
+        HttpSampler("http://my.service")
+    )
+).RunIn(new EmbeddedJmeterEngine()
+    .JvmArgs("-Xmx4g")
+);
+

TIP

Since JMeter uses log4j2open in new window, if you want to control the logging level or output, you can use something similar to this log4j2.xml, using "CopyToOutputDirectory" in the project item, so the file is available in dotnet build output directory as well (check [Abstracta.JmeterDsl.Test/Abstracta.JmeterDsl.Tests.csproj]).

TIP

Depending on the test framework you use, and the way you run your tests, you might be able to see JMeter logs and output in real-time, at the end of the test, or not see them at all. This is not something we can directly control in JMeter DSL, and heavily depends on the dotnet environment and testing framework implementation.

When using Nunit, to get real-time console output from JMeter you might want to run your tests with something like dotnet test -v n and add the following code to your tests:

private TextWriter? originalConsoleOut;
+
+// Redirecting output to progress to get live stdout with nunit.
+// https://github.com/nunit/nunit3-vs-adapter/issues/343
+// https://github.com/nunit/nunit/issues/1139
+[SetUp]
+public void SetUp()
+{
+    originalConsoleOut = Console.Out;
+    Console.SetOut(TestContext.Progress);
+}
+
+[TearDown]
+public void TearDown()
+{
+    Console.SetOut(originalConsoleOut!);
+}
+

TIP

Keep in mind that you can use .Net programming to modularize and create abstractions which allow you to build complex test plans that are still easy to read, use and maintain. Here is an exampleopen in new window of some complex abstraction built using Java features (you can easily extrapolate to .Net) and the DSL.

Check HTTP performance testing for additional details while testing HTTP services.

Run test at scale

Running a load test from one machine is not always enough, since you are limited to the machine's hardware capabilities. Sometimes, is necessary to run the test using a cluster of machines to be able to generate enough load for the system under test. Currently, the .Net DSL only provides two ways to run tests at scale, but in the future, we plan to support more (as Java DSL doesopen in new window). If you are interested in some not yet covered feature, please ask for it by creating an issue in the repositoryopen in new window.

Azure Load Testing

To use Azure Load Testingopen in new window to execute your test plans at scale is as easy as including the following package to your project:

dotnet add package Abstracta.JmeterDsl.Azure --version 0.3.2
+

And using the provided engine like this:

using Abstracta.JmeterDsl.Azure;
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).RunIn(new AzureEngine(Environment.GetEnvironmentVariable("AZURE_CREDS")) // AZURE_CREDS=tenantId:clientId:secretId
+            .TestName("dsl-test")
+            /* 
+            This specifies the number of engine instances used to execute the test plan. 
+            In this case, means that it will run 2(threads in thread group)x2(engines)=4 concurrent users/threads in total. 
+            Each engine executes the test plan independently.
+            */
+            .Engines(2) 
+            .TestTimeout(TimeSpan.FromMinutes(20)));
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

This test is using AZURE_CREDS, a custom environment variable containing tenantId:clientId:clientSecret with proper values for each. Check at Azure Portal tenant propertiesopen in new window the proper tenant ID for your subscription, and follow this guideopen in new window to register an application with proper permissions and secrets generation for tests execution.

With Azure, you can not only run the test at scale but also get additional features like nice real-time reporting, historic data tracking, etc. Here is an example of how a test looks like in Azure Load Testing:

Azure Load Testing Example Execution Dashboard

Check AzureEngineopen in new window for details on usage and available settings when running tests in Azure Load Testing.

WARNING

By default, the engine is configured to time out if test execution takes more than 1 hour. This timeout exists to avoid any potential problem with Azure Load Testing execution not detected by the client, and avoid keeping the test indefinitely running until is interrupted by a user, which may incur unnecessary expenses in Azure and is especially annoying when running tests in an automated fashion, for example in CI/CD. It is strongly advised to set this timeout properly in each run, according to the expected test execution time plus some additional margin (to consider for additional delays in Azure Load Testing test setup and teardown) to avoid unexpected test plan execution failure (due to timeout) or unnecessary waits when there is some unexpected issue with Azure Load Testing execution.

TIP

If you want to get debug logs for HTTP calls to Azure API, you can include the following setting to an existing log4j2.xml configuration file:

<Logger name="us.abstracta.jmeter.javadsl.azure.AzureClient" level="DEBUG"/>
+<Logger name="okhttp3" level="DEBUG"/>
+

BlazeMeter

By including the following package:

dotnet add package Abstracta.JmeterDsl.BlazeMeter --version 0.3.2
+

You can easily run a JMeter test plan at scale in BlazeMeteropen in new window like this:

using Abstracta.JmeterDsl.BlazeMeter;
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            // number of threads and iterations are in the end overwritten by BlazeMeter engine settings 
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).RunIn(new BlazeMeterEngine(Environment.GetEnvironmentVariable("BZ_TOKEN"))
+            .TestName("DSL test")
+            .TotalUsers(500)
+            .HoldFor(TimeSpan.FromMinutes(10))
+            .ThreadsPerEngine(100)
+            .TestTimeout(TimeSpan.FromMinutes(20))
+            .TestName("dsl-test"));
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

This test is using BZ_TOKEN, a custom environment variable with <KEY_ID>:<KEY_SECRET> format, to get the BlazeMeter API authentication credentials.

Note that is as simple as generating a BlazeMeter authentication tokenopen in new window and adding .RunIn(new BlazeMeterEngine(...)) to any existing JMeter DSL test to get it running at scale in BlazeMeter.

BlazeMeter will not only allow you to run the test at scale but also provides additional features like nice real-time reporting, historic data tracking, etc. Here is an example of how a test would look in BlazeMeter:

BlazeMeter Example Execution Dashboard

Check BlazeMeterEngineopen in new window for details on usage and available settings when running tests in BlazeMeter.

WARNING

By default the engine is configured to timeout if test execution takes more than 1 hour. This timeout exists to avoid any potential problem with BlazeMeter execution not detected by the client, and avoid keeping the test indefinitely running until is interrupted by a user, which may incur in unnecessary expenses in BlazeMeter and is specially annoying when running tests in automated fashion, for example in CI/CD. It is strongly advised to set this timeout properly in each run, according to the expected test execution time plus some additional margin (to consider for additional delays in BlazeMeter test setup and teardown) to avoid unexpected test plan execution failure (due to timeout) or unnecessary waits when there is some unexpected issue with BlazeMeter execution.

WARNING

BlazeMeterEngine always returns 0 as sentBytes statistics since there is no efficient way to get it from BlazMeter.

TIP

In case you want to get debug logs for HTTP calls to BlazeMeter API, you can include the following setting to an existing log4j2.xml configuration file:

<Logger name="us.abstracta.jmeter.javadsl.blazemeter.BlazeMeterClient" level="DEBUG"/>
+<Logger name="okhttp3" level="DEBUG"/>
+

Advanced threads configuration

JMeter DSL provides two simple ways of creating thread groups which are used in most scenarios:

  • specifying threads and the number of iterations each thread should execute before ending the test plan
  • specifying threads and duration for which each thread should execute before the test plan ends

This is how they look in code:

ThreadGroup(10, 20, ...) // 10 threads for 20 iterations each
+ThreadGroup(10, TimeSpan.FromSeconds(20), ...) // 10 threads for 20 seconds each
+

But these options are not good when working with many threads or when trying to configure some complex test scenarios (like when doing incremental or peak tests).

Thread ramps and holds

When working with many threads, it is advisable to configure a ramp-up period, to avoid starting all threads at once affecting performance metrics and generation.

You can easily configure a ramp-up with the DSL like this:

ThreadGroup().RampTo(10, TimeSpan.FromSeconds(5)).HoldIterating(20) // ramp to 10 threads for 5 seconds (1 thread every half second) and iterating each thread 20 times
+ThreadGroup().RampToAndHold(10, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)) //similar as above but after ramping up holding execution for 20 seconds
+

Additionally, you can use and combine these same methods to configure more complex scenarios (incremental, peak, and any other types of tests) like the following one:

ThreadGroup()
+    .RampToAndHold(10, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20))
+    .RampToAndHold(100, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30))
+    .RampTo(200, TimeSpan.FromSeconds(10))
+    .RampToAndHold(100, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30))
+    .RampTo(0, TimeSpan.FromSeconds(5))
+    .Children(
+      HttpSampler("http://my.service")
+    )
+

Which would translate into the following threads' timeline:

Thread Group Timeline

Check DslThreadGroupopen in new window for more details.

TIP

If you are a JMeter GUI user, you may even be interested in using provided TestElement.ShowInGui() method, which shows the JMeter test element GUI that could help you understand what will DSL execute in JMeter. You can use this method with any test element generated by the DSL (not just thread groups).

For example, for the above test plan you would get a window like the following one:

UltimateThreadGroup GUI

TIP

When using multiple thread groups in a test plan, consider setting a name (eg: ThreadGroup("main", 1, 1, ...)) on them to properly identify associated requests in statistics & jtl results.

Test plan debugging

A usual requirement while building a test plan is to be able to review requests and responses and debug the test plan for potential issues in the configuration or behavior of the service under test. With JMeter DSL you have several options for this purpose.

View results tree

One option is using provided ResultsTreeVisualizer() like in the following example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            ResultsTreeVisualizer()
+        ).Run();
+    }
+}
+

This will display the JMeter built-in View Results Tree element, which allows you to review request and response contents in addition to collected metrics (spent time, sent & received bytes, etc.) for each request sent to the server, in a window like this one:

View Results Tree GUI

TIP

To debug test plans use a few iterations and threads to reduce the execution time and ease tracing by having less information to analyze.

TIP

When adding ResultsTreeVisualizer() as a child of a thread group, it will only display sample results of that thread group. When added as a child of a sampler, it will only show sample results for that sampler. You can use this to only review certain sample results in your test plan.

TIP

Remove ResultsTreeVisualizer() from test plans when are no longer needed (when debugging is finished). Leaving them might interfere with unattended test plan execution (eg: in CI) due to test plan execution not finishing until all visualizers windows are closed.

WARNING

By default, View Results Tree only displays the last 500 sample results. If you need to display more elements, use provided ResultsLimit(int) method which allows changing this value. Take into consideration that the more results are shown, the more memory that will require. So use this setting with care.

Debug JMeter code

You can even add breakpoints to JMeter or JMeter Java DSL code in your IDE and debug the code line by line providing the greatest possible detail.

Here is an example screenshot debugging HTTP Sampler:

JMeter HTTP Sampler debugging in IDE

For that, you need to:

  • have a Java IDE with JMeter or JMeter Java DSL code open.
  • set proper breakpoints in the code you are interested in debugging.
  • can configure Remote JVM Debug like in the following screenshot: IntelliJ Remote JVM Debug
  • set required JVM arguments in the JMeter .Net DSL test using EmbeddedJmeterEngine like in the following example:
    TestPlan(
    +      ThreadGroup(threads: 1, iterations: 1,
    +          HttpSampler("http://my.service")
    +      )
    +  ).RunIn(new EmbeddedJmeterEngine()
    +          .JvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"));
    +

    Note that we changed the suspend flag to y to block test execution until Remote JVM Debug is run in IDE.

  • run the JMeter .Net DSL test. The test should get stuck until you start Remote JVM Debug in the Java IDE.
  • start the Remote JVM Devug in the Java IDE.
  • wait for a breakpoint to activate and debug as usual 🙂.

TIP

JMeter class in charge of executing threads logic is org.apache.jmeter.threads.JMeterThread. You can check the classes used by each DSL-provided test element by checking the Java DSL code.

Dummy sampler

In many cases, you want to be able to test part of the test plan but without directly interacting with the service under test, avoiding any potential traffic to the servers, testing some border cases which might be difficult to reproduce with the actual server, and avoid actual server interactions variability and potential unpredictability. In such scenarios, you might replace actual samplers with DummySampler (which uses Dummy Sampler pluginopen in new window) to be able to test extractors, assertions, controllers conditions, and other parts of the test plan under certain conditions/results generated by the samplers.

Here is an example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        TestPlan(
+            ThreadGroup(2, 10,
+                // HttpSampler("http://my.service")
+                DummySampler("{\"status\" : \"OK\"}")
+            )
+        ).Run();
+    }
+}
+

TIP

The DSL configures dummy samplers by default, in contrast to what JMeter does, with response time simulation disabled. This allows to speed up the debugging process, not having to wait for proper response time simulation (sleeps/waits). If you want a more accurate emulation, you might turn it on through the ResponseTimeSimulation() method.

Check DslDummySampleropen in new window for more information o additional configuration and options.

Test plan review un JMeter GUI

A usual requirement for new DSL users that are used to Jmeter GUI, is to be able to review Jmeter DSL generated test plan in the familiar JMeter GUI. For this, you can use the ShowInGui() method in a test plan to open JMeter GUI with the preloaded test plan.

This can be also used to debug the test plan, by adding elements (like view results tree, dummy samplers, etc.) in the GUI and running the test plan.

Here is a simple example using the method:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).ShowInGui();
+    }
+}
+

Which ends up opening a window like this one:

Test plan in JMeter GUI

Reporting

Once you have a test plan you would usually want to be able to analyze the collected information. This section contains a few ways to achieve this, but in the future, we plan to support more (as Java DSL doesopen in new window). If you are interested in some not yet covered feature, please ask for it by creating an issue in the repositoryopen in new window.

Log requests and responses

The main mechanism provided by JMeter (and Abstracta.JmeterDsl) to get information about generated requests, responses, and associated metrics is through the generation of JTL files.

This can be easily achieved by using provided JtlWriter like in this example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            JtlWriter("jtls")
+        ).Run();
+    }
+}
+

TIP

By default, JtlWriter will write the most used information to evaluate the performance of the tested service. If you want to trace all the information of each request you may use JtlWriter with the WithAllFields() option. Doing this will provide all the information at the cost of additional computation and resource usage (fewer resources for actual load testing). You can tune which fields to include or not with JtlWriter and only log what you need, check JtlWriteropen in new window for more details.

TIP

JtlWriter will automatically generate .jtl files applying this format: <yyyy-MM-dd HH-mm-ss> <UUID>.jtl.

If you need a specific file name, for example for later postprocessing logic (eg: using CI build ID), you can specify it by using JtlWriter(directory, fileName).

When specifying the file name, make sure to use unique names, otherwise, the JTL contents may be appended to previous existing jtl files.

An additional option, specially targeted towards logging sample responses, is ResponseFileSaver which automatically generates a file for each received response. Here is an example:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            ),
+            ResponseFileSaver(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss").Replace(":", "-") + "-response")
+        ).Run();
+    }
+}
+

Check ResponseFileSaveropen in new window for more details.

Response processing

Use part of a response in a subsequent request (aka correlation)

It is a usual requirement while creating a test plan for an application to be able to use part of a response (e.g.: a generated ID, token, etc.) in a subsequent request. This can be easily achieved using JMeter extractors and variables.

Regular expressions extraction

Here is an example with JMeter DSL using regular expressions:

using System.Net.Http.Headers;
+using System.Net.Mime;
+
+using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service/accounts")
+                    .Post("{\"name\": \"John Doe\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+                    .Children(
+                        RegexExtractor("ACCOUNT_ID", "\"id\":\"([^\"]+)\"")
+                    ),
+                HttpSampler("http://my.service/accounts/${ACCOUNT_ID}")
+            )
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

Check DslRegexExtractoropen in new window for more details and additional options.

Protocols

HTTP

Throughout this guide, several examples have been shown for simple cases of HTTP requests (mainly how to do gets and posts), but the DSL provides additional features that you might need to be aware of.

Here we show some of them, but check JmeterDslopen in new window and DslHttpSampleropen in new window to explore all available features.

Methods & body

As previously seen, you can do simple gets and posts like in the following snippet:

HttpSampler("http://my.service") // A simple get
+HttpSampler("http://my.service")
+    .Post("{\"field\":\"val\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json)) // simple post
+

But you can also use additional methods to specify any HTTP method and body:

HttpSampler("http://my.service")
+  .Method(HttpMethod.Put.Method)
+  .ContentType(new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+  .Body("{\"field\":\"val\"}")
+

Headers

You might have already noticed in some of the examples that we have shown, some ways to set some headers. For instance, in the following snippet, Content-Type header is being set in two different ways:

HttpSampler("http://my.service")
+  .Post("{\"field\":\"val\"}", new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+HttpSampler("http://my.service")
+  .ContentType(new MediaTypeHeaderValue(MediaTypeNames.Application.Json))
+

These are handy methods to specify the Content-Type header, but you can also set any header on a particular request using provided Header method, like this:

HttpSampler("http://my.service")
+  .Header("X-First-Header", "val1")
+  .Header("X-Second-Header", "val2")
+

Additionally, you can specify headers to be used by all samplers in a test plan, thread group, transaction controllers, etc. For this, you can use HttpHeaders like this:

TestPlan(
+    ThreadGroup(2, 10,
+        HttpHeaders()
+          .Header("X-Header", "val1"),
+        HttpSampler("http://my.service"),
+        HttpSampler("http://my.service/users")
+    )
+).Run();
+

Cookies & caching

JMeter DSL automatically adds a cookie manager and cache manager for automatic HTTP cookie and caching handling, emulating a browser behavior. If you need to disable them you can use something like this:

TestPlan(
+    HttpCookies().Disable(),
+    HttpCache().Disable(),
+    ThreadGroup(2, 10,
+        HttpSampler("http://my.service")
+    )
+)
+
+ + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..8e98c32 --- /dev/null +++ b/index.html @@ -0,0 +1,54 @@ + + + + + + + + + jmeter-dotnet-dsl + + + + +

Simple JMeteropen in new window performance tests .Net API

User Guide →

💙 Git, IDE & Programmers Friendly

Simple way of defining performance tests that takes advantage of IDEs autocompletion and inline documentation.

💪 JMeter ecosystem & community

Use the most popular performance tool and take advantage of the wide support of protocols and tools.

😎 Built-in features & extensibility

Built-in additional features which ease usage and using it in CI/CD pipelines.

Example

Add the package to your project:

dotnet add package Abstracta.JmeterDsl --version 0.3.2
+

Create performance test:

using static Abstracta.JmeterDsl.JmeterDsl;
+
+public class PerformanceTest
+{
+    [Test]
+    public void LoadTest()
+    {
+        var stats = TestPlan(
+            ThreadGroup(2, 10,
+                HttpSampler("http://my.service")
+            )
+        ).Run();
+        Assert.That(stats.Overall.SampleTimePercentile99, Is.LessThan(TimeSpan.FromSeconds(5)));
+    }
+}
+

Java 8+ is required for test plan execution.

Hereopen in new window is a sample project in case you want to start one from scratch.

+ + + diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..744869d --- /dev/null +++ b/logo.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/support/index.html b/support/index.html new file mode 100644 index 0000000..a8ef9fa --- /dev/null +++ b/support/index.html @@ -0,0 +1,38 @@ + + + + + + + + + Support | jmeter-dotnet-dsl + + + + +

Support

Community Support

The JMeter DSL project has a vibrant and active community that provides extensive support, on a best effort basis, to its users. Community support is primarily offered through the following channels:

The community is actively involved in proposing new improvements, answering questions, assisting in design decisions, and submitting pull requests. Together, we strive to enhance the capabilities and usability of JMeter DSL.

Enterprise Support by Abstracta

In addition to community support, Abstractaopen in new window offers enterprise-level support for JMeter DSL users. Abstracta is the main supporter of JMeter DSL development and provides specialized professional services to ensure the success of organizations using JMeter DSL. With Abstracta's enterprise support, you can accelerate your JMeter DSL implementation and have access to:

  • Dedicated support team : Get prompt answers and peace of mind from a dedicated support team with the expertise to help you resolve issues faster.
  • Customizations: Receive tailored solutions to meet your specific requirements.
  • Consulting services: Access a team of experts to fine-tune your JMeter DSL usage, speed up implementation, work on your performance testing strategy and overall testing processes.

Abstracta is committed to helping organizations succeed with JMeter DSL by providing comprehensive support and specialized services tailored to your enterprise needs.

To explore Abstracta's enterprise support options or discuss your specific needs, please contact the Abstracta teamopen in new window.

Industry Support

JMeter DSL has received valuable support from industry-leading companies, contributing to the integration features and promoting the tool. We would like to acknowledge and express our gratitude to the following companies:

+ + +