diff --git a/004ec9e5.35989ae1.js b/004ec9e5.35989ae1.js new file mode 100644 index 0000000000..36b63a05f9 --- /dev/null +++ b/004ec9e5.35989ae1.js @@ -0,0 +1,2 @@ +/*! For license information please see 004ec9e5.35989ae1.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{153:function(n,t,e){"use strict";e.r(t);e(420);var r=e(0),u=e.n(r),i=e(437),a=e(508),o=e(422);t.default=function(n){var t=n.metadata,e=n.items,r=t.allTagsPath,c=t.name,l=t.count;return u.a.createElement(i.a,{title:'Guides tagged "'+c+'"',description:'Guide | Tagged "'+c+'"'},u.a.createElement("header",{className:"hero hero--clean"},u.a.createElement("div",{className:"container"},u.a.createElement("h1",null,l," ",function(n,t){return n>1?t+"s":t}(l,"guide"),' tagged with "',c,'"'),u.a.createElement("div",{className:"hero--subtitle"},u.a.createElement(o.a,{href:r},"View All Tags")))),u.a.createElement("main",{className:"container container--s"},u.a.createElement(a.a,{items:e})))}},415:function(n,t,e){var r;!function(){"use strict";var e={}.hasOwnProperty;function u(){for(var n=[],t=0;t1?arguments[1]:void 0)}}),e(74)("find")},437:function(n,t,e){"use strict";e(449);var r=e(0),u=e.n(r),i=e(450),a=e(435),o=e(1),c=(e(438),e(439),e(451),e(422)),l=e(452),f=e(432),s=e.n(f),v=e(453),h=e.n(v),d=e(428),p=e(415),D=e.n(p),g=e(135),_=e.n(g),m=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.moon)})},y=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.sun)})},b=function(n){var t=Object(d.a)().isClient;return u.a.createElement(h.a,Object(o.a)({disabled:!t,icons:{checked:u.a.createElement(m,null),unchecked:u.a.createElement(y,null)}},n))};function E(){var n=Object(d.a)().siteConfig,t=(void 0===n?{}:n).customFields.metadata.latest_post,e=Date.parse(t.date),r=new Date,u=Math.abs(r-e),i=Math.ceil(u/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!a||a0&&u.a.createElement("div",{className:"row footer__links"},u.a.createElement("div",{className:"col col--5 footer__col"},u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement(s.a,{className:"navbar__logo",src:h,alt:"Qovery",width:"150",height:"auto"})),u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),u.a.createElement("div",null,u.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},u.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},u.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},u.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},u.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(n,t){return u.a.createElement("div",{key:t,className:"col footer__col"},null!=n.title?u.a.createElement("h4",{className:"footer__title"},n.title):null,null!=n.items&&Array.isArray(n.items)&&n.items.length>0?u.a.createElement("ul",{className:"footer__items"},n.items.map((function(n,t){return n.html?u.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):u.a.createElement("li",{key:n.href||n.to,className:"footer__item"},u.a.createElement(R,n))}))):null)}))),(f||a)&&u.a.createElement("div",{className:"text--center"},f&&f.src&&u.a.createElement("div",{className:"margin-bottom--sm"},f.href?u.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:L.a.footerLogoLink},u.a.createElement(T,{alt:f.alt,url:v})):u.a.createElement(T,{alt:f.alt,url:v})),u.a.createElement("small",null,a),u.a.createElement("br",null))))},W=e(454),M=e(455),U=e(3);e(138);t.a=function(n){var t=Object(d.a)().siteConfig,e=void 0===t?{}:t,r=e.favicon,o=(e.tagline,e.title),c=e.themeConfig.image,l=e.url,f=n.children,s=n.title,v=n.noFooter,h=n.description,p=n.image,D=n.keywords,g=(n.permalink,n.version),_=s?s+" | "+o:o,m=p||c,y=l+Object(F.a)(m),b=Object(F.a)(r),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return u.a.createElement(M.a,null,u.a.createElement(W.a,null,u.a.createElement(a.a,null,u.a.createElement("html",{lang:"en"}),u.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&u.a.createElement("title",null,_),_&&u.a.createElement("meta",{property:"og:title",content:_}),r&&u.a.createElement("link",{rel:"shortcut icon",href:b}),h&&u.a.createElement("meta",{name:"description",content:h}),h&&u.a.createElement("meta",{property:"og:description",content:h}),g&&u.a.createElement("meta",{name:"docsearch:version",content:g}),D&&D.length&&u.a.createElement("meta",{name:"keywords",content:D.join(",")}),m&&u.a.createElement("meta",{property:"og:image",content:y}),m&&u.a.createElement("meta",{property:"twitter:image",content:y}),m&&u.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),w&&u.a.createElement("meta",{property:"og:url",content:w}),u.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&u.a.createElement("link",{rel:"canonical",href:w})),u.a.createElement(i.a,null),u.a.createElement(B,null),u.a.createElement("div",{className:"main-wrapper"},f),!v&&u.a.createElement(z,null)))}},442:function(n,t,e){"use strict";var r=e(9),u=e(0),i=e.n(u),a=e(415),o=e.n(a),c=e(428),l=(e(139),e(140)),f=e.n(l);t.a=function(n){return function(t){var e,u=t.id,a=Object(r.a)(t,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,v=(s=void 0===s?{}:s).navbar,h=(v=void 0===v?{}:v).hideOnScroll,d=void 0!==h&&h;return u?i.a.createElement(n,a,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(e={},e[f.a.enhancedAnchor]=!d,e)),id:u}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+u,title:"Direct link to heading"},"#"),a.children):i.a.createElement(n,a)}}},443:function(n,t,e){(function(n,r){var u;(function(){var i="Expected a function",a="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",v="[object Error]",h="[object Function]",d="[object GeneratorFunction]",p="[object Map]",D="[object Number]",g="[object Object]",_="[object RegExp]",m="[object Set]",y="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",C="[object Float32Array]",k="[object Float64Array]",A="[object Int8Array]",x="[object Int16Array]",j="[object Int32Array]",O="[object Uint8Array]",N="[object Uint16Array]",B="[object Uint32Array]",I=/\b__p \+= '';/g,S=/\b(__p \+=) '' \+/g,L=/(__e\(.*?\)|\b__t\)) \+\n'';/g,R=/&(?:amp|lt|gt|quot|#39);/g,T=/[&<>"']/g,z=RegExp(R.source),W=RegExp(T.source),M=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,P=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,V=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/[\\^$.*+?()[\]{}|]/g,Z=RegExp(G.source),K=/^\s+|\s+$/g,H=/^\s+/,Q=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,nn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tn=/\\(\\)?/g,en=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,rn=/\w*$/,un=/^[-+]0x[0-9a-f]+$/i,an=/^0b[01]+$/i,on=/^\[object .+?Constructor\]$/,cn=/^0o[0-7]+$/i,ln=/^(?:0|[1-9]\d*)$/,fn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,sn=/($^)/,vn=/['\n\r\u2028\u2029\\]/g,hn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",dn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pn="[\\ud800-\\udfff]",Dn="["+dn+"]",gn="["+hn+"]",_n="\\d+",mn="[\\u2700-\\u27bf]",yn="[a-z\\xdf-\\xf6\\xf8-\\xff]",bn="[^\\ud800-\\udfff"+dn+_n+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",En="\\ud83c[\\udffb-\\udfff]",wn="[^\\ud800-\\udfff]",Fn="(?:\\ud83c[\\udde6-\\uddff]){2}",Cn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="[A-Z\\xc0-\\xd6\\xd8-\\xde]",An="(?:"+yn+"|"+bn+")",xn="(?:"+kn+"|"+bn+")",jn="(?:"+gn+"|"+En+")"+"?",On="[\\ufe0e\\ufe0f]?"+jn+("(?:\\u200d(?:"+[wn,Fn,Cn].join("|")+")[\\ufe0e\\ufe0f]?"+jn+")*"),Nn="(?:"+[mn,Fn,Cn].join("|")+")"+On,Bn="(?:"+[wn+gn+"?",gn,Fn,Cn,pn].join("|")+")",In=RegExp("['\u2019]","g"),Sn=RegExp(gn,"g"),Ln=RegExp(En+"(?="+En+")|"+Bn+On,"g"),Rn=RegExp([kn+"?"+yn+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[Dn,kn,"$"].join("|")+")",xn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[Dn,kn+An,"$"].join("|")+")",kn+"?"+An+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",kn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_n,Nn].join("|"),"g"),Tn=RegExp("[\\u200d\\ud800-\\udfff"+hn+"\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,Un={};Un[C]=Un[k]=Un[A]=Un[x]=Un[j]=Un[O]=Un["[object Uint8ClampedArray]"]=Un[N]=Un[B]=!0,Un[c]=Un[l]=Un[w]=Un[f]=Un[F]=Un[s]=Un[v]=Un[h]=Un[p]=Un[D]=Un[g]=Un[_]=Un[m]=Un[y]=Un[E]=!1;var Pn={};Pn[c]=Pn[l]=Pn[w]=Pn[F]=Pn[f]=Pn[s]=Pn[C]=Pn[k]=Pn[A]=Pn[x]=Pn[j]=Pn[p]=Pn[D]=Pn[g]=Pn[_]=Pn[m]=Pn[y]=Pn[b]=Pn[O]=Pn["[object Uint8ClampedArray]"]=Pn[N]=Pn[B]=!0,Pn[v]=Pn[h]=Pn[E]=!1;var $n={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},qn=parseFloat,Vn=parseInt,Gn="object"==typeof n&&n&&n.Object===Object&&n,Zn="object"==typeof self&&self&&self.Object===Object&&self,Kn=Gn||Zn||Function("return this")(),Hn=t&&!t.nodeType&&t,Qn=Hn&&"object"==typeof r&&r&&!r.nodeType&&r,Jn=Qn&&Qn.exports===Hn,Yn=Jn&&Gn.process,Xn=function(){try{var n=Qn&&Qn.require&&Qn.require("util").types;return n||Yn&&Yn.binding&&Yn.binding("util")}catch(t){}}(),nt=Xn&&Xn.isArrayBuffer,tt=Xn&&Xn.isDate,et=Xn&&Xn.isMap,rt=Xn&&Xn.isRegExp,ut=Xn&&Xn.isSet,it=Xn&&Xn.isTypedArray;function at(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function ot(n,t,e,r){for(var u=-1,i=null==n?0:n.length;++u-1}function ht(n,t,e){for(var r=-1,u=null==n?0:n.length;++r-1;);return e}function Lt(n,t){for(var e=n.length;e--&&Et(t,n[e],0)>-1;);return e}function Rt(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}var Tt=At({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),zt=At({"&":"&","<":"<",">":">",'"':""","'":"'"});function Wt(n){return"\\"+$n[n]}function Mt(n){return Tn.test(n)}function Ut(n){var t=-1,e=Array(n.size);return n.forEach((function(n,r){e[++t]=[r,n]})),e}function Pt(n,t){return function(e){return n(t(e))}}function $t(n,t){for(var e=-1,r=n.length,u=0,i=[];++e",""":'"',"'":"'"});var Ht=function n(t){var e,r=(t=null==t?Kn:Ht.defaults(Kn.Object(),t,Ht.pick(Kn,Wn))).Array,u=t.Date,hn=t.Error,dn=t.Function,pn=t.Math,Dn=t.Object,gn=t.RegExp,_n=t.String,mn=t.TypeError,yn=r.prototype,bn=dn.prototype,En=Dn.prototype,wn=t["__core-js_shared__"],Fn=bn.toString,Cn=En.hasOwnProperty,kn=0,An=(e=/[^.]+$/.exec(wn&&wn.keys&&wn.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",xn=En.toString,jn=Fn.call(Dn),On=Kn._,Nn=gn("^"+Fn.call(Cn).replace(G,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Bn=Jn?t.Buffer:void 0,Ln=t.Symbol,Tn=t.Uint8Array,$n=Bn?Bn.allocUnsafe:void 0,Gn=Pt(Dn.getPrototypeOf,Dn),Zn=Dn.create,Hn=En.propertyIsEnumerable,Qn=yn.splice,Yn=Ln?Ln.isConcatSpreadable:void 0,Xn=Ln?Ln.iterator:void 0,mt=Ln?Ln.toStringTag:void 0,At=function(){try{var n=Xu(Dn,"defineProperty");return n({},"",{}),n}catch(t){}}(),Qt=t.clearTimeout!==Kn.clearTimeout&&t.clearTimeout,Jt=u&&u.now!==Kn.Date.now&&u.now,Yt=t.setTimeout!==Kn.setTimeout&&t.setTimeout,Xt=pn.ceil,ne=pn.floor,te=Dn.getOwnPropertySymbols,ee=Bn?Bn.isBuffer:void 0,re=t.isFinite,ue=yn.join,ie=Pt(Dn.keys,Dn),ae=pn.max,oe=pn.min,ce=u.now,le=t.parseInt,fe=pn.random,se=yn.reverse,ve=Xu(t,"DataView"),he=Xu(t,"Map"),de=Xu(t,"Promise"),pe=Xu(t,"Set"),De=Xu(t,"WeakMap"),ge=Xu(Dn,"create"),_e=De&&new De,me={},ye=ki(ve),be=ki(he),Ee=ki(de),we=ki(pe),Fe=ki(De),Ce=Ln?Ln.prototype:void 0,ke=Ce?Ce.valueOf:void 0,Ae=Ce?Ce.toString:void 0;function xe(n){if($a(n)&&!Ba(n)&&!(n instanceof Be)){if(n instanceof Ne)return n;if(Cn.call(n,"__wrapped__"))return Ai(n)}return new Ne(n)}var je=function(){function n(){}return function(t){if(!Pa(t))return{};if(Zn)return Zn(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}();function Oe(){}function Ne(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Be(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Ie(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Qe(n,t,e,r,u,i){var a,o=1&t,l=2&t,v=4&t;if(e&&(a=u?e(n,r,u,i):e(n)),void 0!==a)return a;if(!Pa(n))return n;var E=Ba(n);if(E){if(a=function(n){var t=n.length,e=new n.constructor(t);t&&"string"==typeof n[0]&&Cn.call(n,"index")&&(e.index=n.index,e.input=n.input);return e}(n),!o)return gu(n,a)}else{var I=ei(n),S=I==h||I==d;if(Ra(n))return su(n,o);if(I==g||I==c||S&&!u){if(a=l||S?{}:ui(n),!o)return l?function(n,t){return _u(n,ti(n),t)}(n,function(n,t){return n&&_u(t,bo(t),n)}(a,n)):function(n,t){return _u(n,ni(n),t)}(n,Ge(a,n))}else{if(!Pn[I])return u?n:{};a=function(n,t,e){var r=n.constructor;switch(t){case w:return vu(n);case f:case s:return new r(+n);case F:return function(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case C:case k:case A:case x:case j:case O:case"[object Uint8ClampedArray]":case N:case B:return hu(n,e);case p:return new r;case D:case y:return new r(n);case _:return function(n){var t=new n.constructor(n.source,rn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case m:return new r;case b:return u=n,ke?Dn(ke.call(u)):{}}var u}(n,I,o)}}i||(i=new Te);var L=i.get(n);if(L)return L;i.set(n,a),Ka(n)?n.forEach((function(r){a.add(Qe(r,t,e,r,n,i))})):qa(n)&&n.forEach((function(r,u){a.set(u,Qe(r,t,e,u,n,i))}));var R=E?void 0:(v?l?Gu:Vu:l?bo:yo)(n);return ct(R||n,(function(r,u){R&&(r=n[u=r]),$e(a,u,Qe(r,t,e,u,n,i))})),a}function Je(n,t,e){var r=e.length;if(null==n)return!r;for(n=Dn(n);r--;){var u=e[r],i=t[u],a=n[u];if(void 0===a&&!(u in n)||!i(a))return!1}return!0}function Ye(n,t,e){if("function"!=typeof n)throw new mn(i);return mi((function(){n.apply(void 0,e)}),t)}function Xe(n,t,e,r){var u=-1,i=vt,a=!0,o=n.length,c=[],l=t.length;if(!o)return c;e&&(t=dt(t,Nt(e))),r?(i=ht,a=!1):t.length>=200&&(i=It,a=!1,t=new Re(t));n:for(;++u-1},Se.prototype.set=function(n,t){var e=this.__data__,r=qe(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},Le.prototype.clear=function(){this.size=0,this.__data__={hash:new Ie,map:new(he||Se),string:new Ie}},Le.prototype.delete=function(n){var t=Ju(this,n).delete(n);return this.size-=t?1:0,t},Le.prototype.get=function(n){return Ju(this,n).get(n)},Le.prototype.has=function(n){return Ju(this,n).has(n)},Le.prototype.set=function(n,t){var e=Ju(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Re.prototype.add=Re.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Re.prototype.has=function(n){return this.__data__.has(n)},Te.prototype.clear=function(){this.__data__=new Se,this.size=0},Te.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},Te.prototype.get=function(n){return this.__data__.get(n)},Te.prototype.has=function(n){return this.__data__.has(n)},Te.prototype.set=function(n,t){var e=this.__data__;if(e instanceof Se){var r=e.__data__;if(!he||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new Le(r)}return e.set(n,t),this.size=e.size,this};var nr=bu(cr),tr=bu(lr,!0);function er(n,t){var e=!0;return nr(n,(function(n,r,u){return e=!!t(n,r,u)})),e}function rr(n,t,e){for(var r=-1,u=n.length;++r0&&e(o)?t>1?ir(o,t-1,e,r,u):pt(u,o):r||(u[u.length]=o)}return u}var ar=Eu(),or=Eu(!0);function cr(n,t){return n&&ar(n,t,yo)}function lr(n,t){return n&&or(n,t,yo)}function fr(n,t){return st(t,(function(t){return Wa(n[t])}))}function sr(n,t){for(var e=0,r=(t=ou(t,n)).length;null!=n&&et}function pr(n,t){return null!=n&&Cn.call(n,t)}function Dr(n,t){return null!=n&&t in Dn(n)}function gr(n,t,e){for(var u=e?ht:vt,i=n[0].length,a=n.length,o=a,c=r(a),l=1/0,f=[];o--;){var s=n[o];o&&t&&(s=dt(s,Nt(t))),l=oe(s.length,l),c[o]=!e&&(t||i>=120&&s.length>=120)?new Re(o&&s):void 0}s=n[0];var v=-1,h=c[0];n:for(;++v=o)return c;var l=e[r];return c*("desc"==l?-1:1)}}return n.index-t.index}(n,t,e)}))}function Ir(n,t,e){for(var r=-1,u=t.length,i={};++r-1;)o!==n&&Qn.call(o,c,1),Qn.call(n,c,1);return n}function Lr(n,t){for(var e=n?t.length:0,r=e-1;e--;){var u=t[e];if(e==r||u!==i){var i=u;ai(u)?Qn.call(n,u,1):Xr(n,u)}}return n}function Rr(n,t){return n+ne(fe()*(t-n+1))}function Tr(n,t){var e="";if(!n||t<1||t>9007199254740991)return e;do{t%2&&(e+=n),(t=ne(t/2))&&(n+=n)}while(t);return e}function zr(n,t){return yi(di(n,t,Go),n+"")}function Wr(n){return We(jo(n))}function Mr(n,t){var e=jo(n);return wi(e,He(t,0,e.length))}function Ur(n,t,e,r){if(!Pa(n))return n;for(var u=-1,i=(t=ou(t,n)).length,a=i-1,o=n;null!=o&&++ui?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var a=r(i);++u>>1,a=n[i];null!==a&&!Qa(a)&&(e?a<=t:a=200){var l=t?null:Tu(n);if(l)return qt(l);a=!1,u=It,c=new Re}else c=t?[]:o;n:for(;++r=r?n:Vr(n,t,e)}var fu=Qt||function(n){return Kn.clearTimeout(n)};function su(n,t){if(t)return n.slice();var e=n.length,r=$n?$n(e):new n.constructor(e);return n.copy(r),r}function vu(n){var t=new n.constructor(n.byteLength);return new Tn(t).set(new Tn(n)),t}function hu(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function du(n,t){if(n!==t){var e=void 0!==n,r=null===n,u=n==n,i=Qa(n),a=void 0!==t,o=null===t,c=t==t,l=Qa(t);if(!o&&!l&&!i&&n>t||i&&a&&c&&!o&&!l||r&&a&&c||!e&&c||!u)return 1;if(!r&&!i&&!l&&n1?e[u-1]:void 0,a=u>2?e[2]:void 0;for(i=n.length>3&&"function"==typeof i?(u--,i):void 0,a&&oi(e[0],e[1],a)&&(i=u<3?void 0:i,u=1),t=Dn(t);++r-1?u[i?t[a]:a]:void 0}}function Au(n){return qu((function(t){var e=t.length,r=e,u=Ne.prototype.thru;for(n&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new mn(i);if(u&&!o&&"wrapper"==Ku(a))var o=new Ne([],!0)}for(r=o?r:e;++r1&&m.reverse(),s&&l<_&&(m.length=l),this&&this!==Kn&&this instanceof g&&(C=D||Cu(C)),C.apply(F,m)}}function ju(n,t){return function(e,r){return function(n,t,e,r){return cr(n,(function(n,u,i){t(r,e(n),u,i)})),r}(e,n,t(r),{})}}function Ou(n,t){return function(e,r){var u;if(void 0===e&&void 0===r)return t;if(void 0!==e&&(u=e),void 0!==r){if(void 0===u)return r;"string"==typeof e||"string"==typeof r?(e=Jr(e),r=Jr(r)):(e=Qr(e),r=Qr(r)),u=n(e,r)}return u}}function Nu(n){return qu((function(t){return t=dt(t,Nt(Qu())),zr((function(e){var r=this;return n(t,(function(n){return at(n,r,e)}))}))}))}function Bu(n,t){var e=(t=void 0===t?" ":Jr(t)).length;if(e<2)return e?Tr(t,n):t;var r=Tr(t,Xt(n/Gt(t)));return Mt(t)?lu(Zt(r),0,n).join(""):r.slice(0,n)}function Iu(n){return function(t,e,u){return u&&"number"!=typeof u&&oi(t,e,u)&&(e=u=void 0),t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e,u){for(var i=-1,a=ae(Xt((t-n)/(e||1)),0),o=r(a);a--;)o[u?a:++i]=n,n+=e;return o}(t,e,u=void 0===u?to))return!1;var l=i.get(n);if(l&&i.get(t))return l==t;var f=-1,s=!0,v=2&e?new Re:void 0;for(i.set(n,t),i.set(t,n);++f-1&&n%1==0&&n1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(J,"{\n/* [wrapped with "+t+"] */\n")}(r,function(n,t){return ct(o,(function(e){var r="_."+e[0];t&e[1]&&!vt(n,r)&&n.push(r)})),n.sort()}(function(n){var t=n.match(Y);return t?t[1].split(X):[]}(r),e)))}function Ei(n){var t=0,e=0;return function(){var r=ce(),u=16-(r-e);if(e=r,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}function wi(n,t){var e=-1,r=n.length,u=r-1;for(t=void 0===t?r:t;++e1?n[t-1]:void 0;return e="function"==typeof e?(n.pop(),e):void 0,Zi(n,e)}));function na(n){var t=xe(n);return t.__chain__=!0,t}function ta(n,t){return t(n)}var ea=qu((function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,u=function(t){return Ke(t,n)};return!(t>1||this.__actions__.length)&&r instanceof Be&&ai(e)?((r=r.slice(e,+e+(t?1:0))).__actions__.push({func:ta,args:[u],thisArg:void 0}),new Ne(r,this.__chain__).thru((function(n){return t&&!n.length&&n.push(void 0),n}))):this.thru(u)}));var ra=mu((function(n,t,e){Cn.call(n,e)?++n[e]:Ze(n,e,1)}));var ua=ku(Ni),ia=ku(Bi);function aa(n,t){return(Ba(n)?ct:nr)(n,Qu(t,3))}function oa(n,t){return(Ba(n)?lt:tr)(n,Qu(t,3))}var ca=mu((function(n,t,e){Cn.call(n,e)?n[e].push(t):Ze(n,e,[t])}));var la=zr((function(n,t,e){var u=-1,i="function"==typeof t,a=Sa(n)?r(n.length):[];return nr(n,(function(n){a[++u]=i?at(t,n,e):_r(n,t,e)})),a})),fa=mu((function(n,t,e){Ze(n,e,t)}));function sa(n,t){return(Ba(n)?dt:Ar)(n,Qu(t,3))}var va=mu((function(n,t,e){n[e?0:1].push(t)}),(function(){return[[],[]]}));var ha=zr((function(n,t){if(null==n)return[];var e=t.length;return e>1&&oi(n,t[0],t[1])?t=[]:e>2&&oi(t[0],t[1],t[2])&&(t=[t[0]]),Br(n,ir(t,1),[])})),da=Jt||function(){return Kn.Date.now()};function pa(n,t,e){return t=e?void 0:t,Wu(n,128,void 0,void 0,void 0,void 0,t=n&&null==t?n.length:t)}function Da(n,t){var e;if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=void 0),e}}var ga=zr((function(n,t,e){var r=1;if(e.length){var u=$t(e,Hu(ga));r|=32}return Wu(n,r,t,e,u)})),_a=zr((function(n,t,e){var r=3;if(e.length){var u=$t(e,Hu(_a));r|=32}return Wu(t,r,n,e,u)}));function ma(n,t,e){var r,u,a,o,c,l,f=0,s=!1,v=!1,h=!0;if("function"!=typeof n)throw new mn(i);function d(t){var e=r,i=u;return r=u=void 0,f=t,o=n.apply(i,e)}function p(n){return f=n,c=mi(g,t),s?d(n):o}function D(n){var e=n-l;return void 0===l||e>=t||e<0||v&&n-f>=a}function g(){var n=da();if(D(n))return _(n);c=mi(g,function(n){var e=t-(n-l);return v?oe(e,a-(n-f)):e}(n))}function _(n){return c=void 0,h&&r?d(n):(r=u=void 0,o)}function m(){var n=da(),e=D(n);if(r=arguments,u=this,l=n,e){if(void 0===c)return p(l);if(v)return fu(c),c=mi(g,t),d(l)}return void 0===c&&(c=mi(g,t)),o}return t=uo(t)||0,Pa(e)&&(s=!!e.leading,a=(v="maxWait"in e)?ae(uo(e.maxWait)||0,t):a,h="trailing"in e?!!e.trailing:h),m.cancel=function(){void 0!==c&&fu(c),f=0,r=l=u=c=void 0},m.flush=function(){return void 0===c?o:_(da())},m}var ya=zr((function(n,t){return Ye(n,1,t)})),ba=zr((function(n,t,e){return Ye(n,uo(t)||0,e)}));function Ea(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new mn(i);var e=function(){var r=arguments,u=t?t.apply(this,r):r[0],i=e.cache;if(i.has(u))return i.get(u);var a=n.apply(this,r);return e.cache=i.set(u,a)||i,a};return e.cache=new(Ea.Cache||Le),e}function wa(n){if("function"!=typeof n)throw new mn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Ea.Cache=Le;var Fa=cu((function(n,t){var e=(t=1==t.length&&Ba(t[0])?dt(t[0],Nt(Qu())):dt(ir(t,1),Nt(Qu()))).length;return zr((function(r){for(var u=-1,i=oe(r.length,e);++u=t})),Na=mr(function(){return arguments}())?mr:function(n){return $a(n)&&Cn.call(n,"callee")&&!Hn.call(n,"callee")},Ba=r.isArray,Ia=nt?Nt(nt):function(n){return $a(n)&&hr(n)==w};function Sa(n){return null!=n&&Ua(n.length)&&!Wa(n)}function La(n){return $a(n)&&Sa(n)}var Ra=ee||ic,Ta=tt?Nt(tt):function(n){return $a(n)&&hr(n)==s};function za(n){if(!$a(n))return!1;var t=hr(n);return t==v||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Ga(n)}function Wa(n){if(!Pa(n))return!1;var t=hr(n);return t==h||t==d||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ma(n){return"number"==typeof n&&n==eo(n)}function Ua(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=9007199254740991}function Pa(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function $a(n){return null!=n&&"object"==typeof n}var qa=et?Nt(et):function(n){return $a(n)&&ei(n)==p};function Va(n){return"number"==typeof n||$a(n)&&hr(n)==D}function Ga(n){if(!$a(n)||hr(n)!=g)return!1;var t=Gn(n);if(null===t)return!0;var e=Cn.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&Fn.call(e)==jn}var Za=rt?Nt(rt):function(n){return $a(n)&&hr(n)==_};var Ka=ut?Nt(ut):function(n){return $a(n)&&ei(n)==m};function Ha(n){return"string"==typeof n||!Ba(n)&&$a(n)&&hr(n)==y}function Qa(n){return"symbol"==typeof n||$a(n)&&hr(n)==b}var Ja=it?Nt(it):function(n){return $a(n)&&Ua(n.length)&&!!Un[hr(n)]};var Ya=Su(kr),Xa=Su((function(n,t){return n<=t}));function no(n){if(!n)return[];if(Sa(n))return Ha(n)?Zt(n):gu(n);if(Xn&&n[Xn])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[Xn]());var t=ei(n);return(t==p?Ut:t==m?qt:jo)(n)}function to(n){return n?(n=uo(n))===1/0||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function eo(n){var t=to(n),e=t%1;return t==t?e?t-e:t:0}function ro(n){return n?He(eo(n),0,4294967295):0}function uo(n){if("number"==typeof n)return n;if(Qa(n))return NaN;if(Pa(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Pa(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(K,"");var e=an.test(n);return e||cn.test(n)?Vn(n.slice(2),e?2:8):un.test(n)?NaN:+n}function io(n){return _u(n,bo(n))}function ao(n){return null==n?"":Jr(n)}var oo=yu((function(n,t){if(si(t)||Sa(t))_u(t,yo(t),n);else for(var e in t)Cn.call(t,e)&&$e(n,e,t[e])})),co=yu((function(n,t){_u(t,bo(t),n)})),lo=yu((function(n,t,e,r){_u(t,bo(t),n,r)})),fo=yu((function(n,t,e,r){_u(t,yo(t),n,r)})),so=qu(Ke);var vo=zr((function(n,t){n=Dn(n);var e=-1,r=t.length,u=r>2?t[2]:void 0;for(u&&oi(t[0],t[1],u)&&(r=1);++e1),t})),_u(n,Gu(n),e),r&&(e=Qe(e,7,Pu));for(var u=t.length;u--;)Xr(e,t[u]);return e}));var Co=qu((function(n,t){return null==n?{}:function(n,t){return Ir(n,t,(function(t,e){return Do(n,e)}))}(n,t)}));function ko(n,t){if(null==n)return{};var e=dt(Gu(n),(function(n){return[n]}));return t=Qu(t),Ir(n,e,(function(n,e){return t(n,e[0])}))}var Ao=zu(yo),xo=zu(bo);function jo(n){return null==n?[]:Bt(n,yo(n))}var Oo=Fu((function(n,t,e){return t=t.toLowerCase(),n+(e?No(t):t)}));function No(n){return Wo(ao(n).toLowerCase())}function Bo(n){return(n=ao(n))&&n.replace(fn,Tt).replace(Sn,"")}var Io=Fu((function(n,t,e){return n+(e?"-":"")+t.toLowerCase()})),So=Fu((function(n,t,e){return n+(e?" ":"")+t.toLowerCase()})),Lo=wu("toLowerCase");var Ro=Fu((function(n,t,e){return n+(e?"_":"")+t.toLowerCase()}));var To=Fu((function(n,t,e){return n+(e?" ":"")+Wo(t)}));var zo=Fu((function(n,t,e){return n+(e?" ":"")+t.toUpperCase()})),Wo=wu("toUpperCase");function Mo(n,t,e){return n=ao(n),void 0===(t=e?void 0:t)?function(n){return zn.test(n)}(n)?function(n){return n.match(Rn)||[]}(n):function(n){return n.match(nn)||[]}(n):n.match(t)||[]}var Uo=zr((function(n,t){try{return at(n,void 0,t)}catch(e){return za(e)?e:new hn(e)}})),Po=qu((function(n,t){return ct(t,(function(t){t=Ci(t),Ze(n,t,ga(n[t],n))})),n}));function $o(n){return function(){return n}}var qo=Au(),Vo=Au(!0);function Go(n){return n}function Zo(n){return wr("function"==typeof n?n:Qe(n,1))}var Ko=zr((function(n,t){return function(e){return _r(e,n,t)}})),Ho=zr((function(n,t){return function(e){return _r(n,e,t)}}));function Qo(n,t,e){var r=yo(t),u=fr(t,r);null!=e||Pa(t)&&(u.length||!r.length)||(e=t,t=n,n=this,u=fr(t,yo(t)));var i=!(Pa(e)&&"chain"in e&&!e.chain),a=Wa(n);return ct(u,(function(e){var r=t[e];n[e]=r,a&&(n.prototype[e]=function(){var t=this.__chain__;if(i||t){var e=n(this.__wrapped__),u=e.__actions__=gu(this.__actions__);return u.push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,pt([this.value()],arguments))})})),n}function Jo(){}var Yo=Nu(dt),Xo=Nu(ft),nc=Nu(_t);function tc(n){return ci(n)?kt(Ci(n)):function(n){return function(t){return sr(t,n)}}(n)}var ec=Iu(),rc=Iu(!0);function uc(){return[]}function ic(){return!1}var ac=Ou((function(n,t){return n+t}),0),oc=Ru("ceil"),cc=Ou((function(n,t){return n/t}),1),lc=Ru("floor");var fc,sc=Ou((function(n,t){return n*t}),1),vc=Ru("round"),hc=Ou((function(n,t){return n-t}),0);return xe.after=function(n,t){if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){if(--n<1)return t.apply(this,arguments)}},xe.ary=pa,xe.assign=oo,xe.assignIn=co,xe.assignInWith=lo,xe.assignWith=fo,xe.at=so,xe.before=Da,xe.bind=ga,xe.bindAll=Po,xe.bindKey=_a,xe.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Ba(n)?n:[n]},xe.chain=na,xe.chunk=function(n,t,e){t=(e?oi(n,t,e):void 0===t)?1:ae(eo(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,a=0,o=r(Xt(u/t));iu?0:u+e),(r=void 0===r||r>u?u:eo(r))<0&&(r+=u),r=e>r?0:ro(r);e>>0)?(n=ao(n))&&("string"==typeof t||null!=t&&!Za(t))&&!(t=Jr(t))&&Mt(n)?lu(Zt(n),0,e):n.split(t,e):[]},xe.spread=function(n,t){if("function"!=typeof n)throw new mn(i);return t=null==t?0:ae(eo(t),0),zr((function(e){var r=e[t],u=lu(e,0,t);return r&&pt(u,r),at(n,this,u)}))},xe.tail=function(n){var t=null==n?0:n.length;return t?Vr(n,1,t):[]},xe.take=function(n,t,e){return n&&n.length?Vr(n,0,(t=e||void 0===t?1:eo(t))<0?0:t):[]},xe.takeRight=function(n,t,e){var r=null==n?0:n.length;return r?Vr(n,(t=r-(t=e||void 0===t?1:eo(t)))<0?0:t,r):[]},xe.takeRightWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3),!1,!0):[]},xe.takeWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3)):[]},xe.tap=function(n,t){return t(n),n},xe.throttle=function(n,t,e){var r=!0,u=!0;if("function"!=typeof n)throw new mn(i);return Pa(e)&&(r="leading"in e?!!e.leading:r,u="trailing"in e?!!e.trailing:u),ma(n,t,{leading:r,maxWait:t,trailing:u})},xe.thru=ta,xe.toArray=no,xe.toPairs=Ao,xe.toPairsIn=xo,xe.toPath=function(n){return Ba(n)?dt(n,Ci):Qa(n)?[n]:gu(Fi(ao(n)))},xe.toPlainObject=io,xe.transform=function(n,t,e){var r=Ba(n),u=r||Ra(n)||Ja(n);if(t=Qu(t,4),null==e){var i=n&&n.constructor;e=u?r?new i:[]:Pa(n)&&Wa(i)?je(Gn(n)):{}}return(u?ct:cr)(n,(function(n,r,u){return t(e,n,r,u)})),e},xe.unary=function(n){return pa(n,1)},xe.union=$i,xe.unionBy=qi,xe.unionWith=Vi,xe.uniq=function(n){return n&&n.length?Yr(n):[]},xe.uniqBy=function(n,t){return n&&n.length?Yr(n,Qu(t,2)):[]},xe.uniqWith=function(n,t){return t="function"==typeof t?t:void 0,n&&n.length?Yr(n,void 0,t):[]},xe.unset=function(n,t){return null==n||Xr(n,t)},xe.unzip=Gi,xe.unzipWith=Zi,xe.update=function(n,t,e){return null==n?n:nu(n,t,au(e))},xe.updateWith=function(n,t,e,r){return r="function"==typeof r?r:void 0,null==n?n:nu(n,t,au(e),r)},xe.values=jo,xe.valuesIn=function(n){return null==n?[]:Bt(n,bo(n))},xe.without=Ki,xe.words=Mo,xe.wrap=function(n,t){return Ca(au(t),n)},xe.xor=Hi,xe.xorBy=Qi,xe.xorWith=Ji,xe.zip=Yi,xe.zipObject=function(n,t){return uu(n||[],t||[],$e)},xe.zipObjectDeep=function(n,t){return uu(n||[],t||[],Ur)},xe.zipWith=Xi,xe.entries=Ao,xe.entriesIn=xo,xe.extend=co,xe.extendWith=lo,Qo(xe,xe),xe.add=ac,xe.attempt=Uo,xe.camelCase=Oo,xe.capitalize=No,xe.ceil=oc,xe.clamp=function(n,t,e){return void 0===e&&(e=t,t=void 0),void 0!==e&&(e=(e=uo(e))==e?e:0),void 0!==t&&(t=(t=uo(t))==t?t:0),He(uo(n),t,e)},xe.clone=function(n){return Qe(n,4)},xe.cloneDeep=function(n){return Qe(n,5)},xe.cloneDeepWith=function(n,t){return Qe(n,5,t="function"==typeof t?t:void 0)},xe.cloneWith=function(n,t){return Qe(n,4,t="function"==typeof t?t:void 0)},xe.conformsTo=function(n,t){return null==t||Je(n,t,yo(t))},xe.deburr=Bo,xe.defaultTo=function(n,t){return null==n||n!=n?t:n},xe.divide=cc,xe.endsWith=function(n,t,e){n=ao(n),t=Jr(t);var r=n.length,u=e=void 0===e?r:He(eo(e),0,r);return(e-=t.length)>=0&&n.slice(e,u)==t},xe.eq=xa,xe.escape=function(n){return(n=ao(n))&&W.test(n)?n.replace(T,zt):n},xe.escapeRegExp=function(n){return(n=ao(n))&&Z.test(n)?n.replace(G,"\\$&"):n},xe.every=function(n,t,e){var r=Ba(n)?ft:er;return e&&oi(n,t,e)&&(t=void 0),r(n,Qu(t,3))},xe.find=ua,xe.findIndex=Ni,xe.findKey=function(n,t){return yt(n,Qu(t,3),cr)},xe.findLast=ia,xe.findLastIndex=Bi,xe.findLastKey=function(n,t){return yt(n,Qu(t,3),lr)},xe.floor=lc,xe.forEach=aa,xe.forEachRight=oa,xe.forIn=function(n,t){return null==n?n:ar(n,Qu(t,3),bo)},xe.forInRight=function(n,t){return null==n?n:or(n,Qu(t,3),bo)},xe.forOwn=function(n,t){return n&&cr(n,Qu(t,3))},xe.forOwnRight=function(n,t){return n&&lr(n,Qu(t,3))},xe.get=po,xe.gt=ja,xe.gte=Oa,xe.has=function(n,t){return null!=n&&ri(n,t,pr)},xe.hasIn=Do,xe.head=Si,xe.identity=Go,xe.includes=function(n,t,e,r){n=Sa(n)?n:jo(n),e=e&&!r?eo(e):0;var u=n.length;return e<0&&(e=ae(u+e,0)),Ha(n)?e<=u&&n.indexOf(t,e)>-1:!!u&&Et(n,t,e)>-1},xe.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=null==e?0:eo(e);return u<0&&(u=ae(r+u,0)),Et(n,t,u)},xe.inRange=function(n,t,e){return t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e){return n>=oe(t,e)&&n=-9007199254740991&&n<=9007199254740991},xe.isSet=Ka,xe.isString=Ha,xe.isSymbol=Qa,xe.isTypedArray=Ja,xe.isUndefined=function(n){return void 0===n},xe.isWeakMap=function(n){return $a(n)&&ei(n)==E},xe.isWeakSet=function(n){return $a(n)&&"[object WeakSet]"==hr(n)},xe.join=function(n,t){return null==n?"":ue.call(n,t)},xe.kebabCase=Io,xe.last=zi,xe.lastIndexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=r;return void 0!==e&&(u=(u=eo(e))<0?ae(r+u,0):oe(u,r-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,u):bt(n,Ft,u,!0)},xe.lowerCase=So,xe.lowerFirst=Lo,xe.lt=Ya,xe.lte=Xa,xe.max=function(n){return n&&n.length?rr(n,Go,dr):void 0},xe.maxBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),dr):void 0},xe.mean=function(n){return Ct(n,Go)},xe.meanBy=function(n,t){return Ct(n,Qu(t,2))},xe.min=function(n){return n&&n.length?rr(n,Go,kr):void 0},xe.minBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),kr):void 0},xe.stubArray=uc,xe.stubFalse=ic,xe.stubObject=function(){return{}},xe.stubString=function(){return""},xe.stubTrue=function(){return!0},xe.multiply=sc,xe.nth=function(n,t){return n&&n.length?Nr(n,eo(t)):void 0},xe.noConflict=function(){return Kn._===this&&(Kn._=On),this},xe.noop=Jo,xe.now=da,xe.pad=function(n,t,e){n=ao(n);var r=(t=eo(t))?Gt(n):0;if(!t||r>=t)return n;var u=(t-r)/2;return Bu(ne(u),e)+n+Bu(Xt(u),e)},xe.padEnd=function(n,t,e){n=ao(n);var r=(t=eo(t))?Gt(n):0;return t&&rt){var r=n;n=t,t=r}if(e||n%1||t%1){var u=fe();return oe(n+u*(t-n+qn("1e-"+((u+"").length-1))),t)}return Rr(n,t)},xe.reduce=function(n,t,e){var r=Ba(n)?Dt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,nr)},xe.reduceRight=function(n,t,e){var r=Ba(n)?gt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,tr)},xe.repeat=function(n,t,e){return t=(e?oi(n,t,e):void 0===t)?1:eo(t),Tr(ao(n),t)},xe.replace=function(){var n=arguments,t=ao(n[0]);return n.length<3?t:t.replace(n[1],n[2])},xe.result=function(n,t,e){var r=-1,u=(t=ou(t,n)).length;for(u||(u=1,n=void 0);++r9007199254740991)return[];var e=4294967295,r=oe(n,4294967295);n-=4294967295;for(var u=Ot(r,t=Qu(t));++e=i)return n;var o=e-Gt(r);if(o<1)return r;var c=a?lu(a,0,o).join(""):n.slice(0,o);if(void 0===u)return c+r;if(a&&(o+=c.length-o),Za(u)){if(n.slice(o).search(u)){var l,f=c;for(u.global||(u=gn(u.source,ao(rn.exec(u))+"g")),u.lastIndex=0;l=u.exec(f);)var s=l.index;c=c.slice(0,void 0===s?o:s)}}else if(n.indexOf(Jr(u),o)!=o){var v=c.lastIndexOf(u);v>-1&&(c=c.slice(0,v))}return c+r},xe.unescape=function(n){return(n=ao(n))&&z.test(n)?n.replace(R,Kt):n},xe.uniqueId=function(n){var t=++kn;return ao(n)+t},xe.upperCase=zo,xe.upperFirst=Wo,xe.each=aa,xe.eachRight=oa,xe.first=Si,Qo(xe,(fc={},cr(xe,(function(n,t){Cn.call(xe.prototype,t)||(fc[t]=n)})),fc),{chain:!1}),xe.VERSION="4.17.15",ct(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){xe[n].placeholder=xe})),ct(["drop","take"],(function(n,t){Be.prototype[n]=function(e){e=void 0===e?1:ae(eo(e),0);var r=this.__filtered__&&!t?new Be(this):this.clone();return r.__filtered__?r.__takeCount__=oe(e,r.__takeCount__):r.__views__.push({size:oe(e,4294967295),type:n+(r.__dir__<0?"Right":"")}),r},Be.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),ct(["filter","map","takeWhile"],(function(n,t){var e=t+1,r=1==e||3==e;Be.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Qu(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}})),ct(["head","last"],(function(n,t){var e="take"+(t?"Right":"");Be.prototype[n]=function(){return this[e](1).value()[0]}})),ct(["initial","tail"],(function(n,t){var e="drop"+(t?"":"Right");Be.prototype[n]=function(){return this.__filtered__?new Be(this):this[e](1)}})),Be.prototype.compact=function(){return this.filter(Go)},Be.prototype.find=function(n){return this.filter(n).head()},Be.prototype.findLast=function(n){return this.reverse().find(n)},Be.prototype.invokeMap=zr((function(n,t){return"function"==typeof n?new Be(this):this.map((function(e){return _r(e,n,t)}))})),Be.prototype.reject=function(n){return this.filter(wa(Qu(n)))},Be.prototype.slice=function(n,t){n=eo(n);var e=this;return e.__filtered__&&(n>0||t<0)?new Be(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),void 0!==t&&(e=(t=eo(t))<0?e.dropRight(-t):e.take(t-n)),e)},Be.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Be.prototype.toArray=function(){return this.take(4294967295)},cr(Be.prototype,(function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),u=xe[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);u&&(xe.prototype[t]=function(){var t=this.__wrapped__,a=r?[1]:arguments,o=t instanceof Be,c=a[0],l=o||Ba(t),f=function(n){var t=u.apply(xe,pt([n],a));return r&&s?t[0]:t};l&&e&&"function"==typeof c&&1!=c.length&&(o=l=!1);var s=this.__chain__,v=!!this.__actions__.length,h=i&&!s,d=o&&!v;if(!i&&l){t=d?t:new Be(this);var p=n.apply(t,a);return p.__actions__.push({func:ta,args:[f],thisArg:void 0}),new Ne(p,s)}return h&&d?n.apply(this,a):(p=this.thru(f),h?r?p.value()[0]:p.value():p)})})),ct(["pop","push","shift","sort","splice","unshift"],(function(n){var t=yn[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);xe.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var u=this.value();return t.apply(Ba(u)?u:[],n)}return this[e]((function(e){return t.apply(Ba(e)?e:[],n)}))}})),cr(Be.prototype,(function(n,t){var e=xe[t];if(e){var r=e.name+"";Cn.call(me,r)||(me[r]=[]),me[r].push({name:t,func:e})}})),me[xu(void 0,2).name]=[{name:"wrapper",func:void 0}],Be.prototype.clone=function(){var n=new Be(this.__wrapped__);return n.__actions__=gu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=gu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=gu(this.__views__),n},Be.prototype.reverse=function(){if(this.__filtered__){var n=new Be(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Be.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Ba(n),r=t<0,u=e?n.length:0,i=function(n,t,e){var r=-1,u=e.length;for(;++r=this.__values__.length;return{done:n,value:n?void 0:this.__values__[this.__index__++]}},xe.prototype.plant=function(n){for(var t,e=this;e instanceof Oe;){var r=Ai(e);r.__index__=0,r.__values__=void 0,t?u.__wrapped__=r:t=r;var u=r;e=e.__wrapped__}return u.__wrapped__=n,t},xe.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Be){var t=n;return this.__actions__.length&&(t=new Be(this)),(t=t.reverse()).__actions__.push({func:ta,args:[Pi],thisArg:void 0}),new Ne(t,this.__chain__)}return this.thru(Pi)},xe.prototype.toJSON=xe.prototype.valueOf=xe.prototype.value=function(){return eu(this.__wrapped__,this.__actions__)},xe.prototype.first=xe.prototype.head,Xn&&(xe.prototype[Xn]=function(){return this}),xe}();Kn._=Ht,void 0===(u=function(){return Ht}.call(t,e,t,r))||(r.exports=u)}).call(this)}).call(this,e(76),e(448)(n))},446:function(n,t,e){"use strict";var r=e(0),u=Object(r.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=u},447:function(n,t,e){"use strict";e.d(t,"a",(function(){return i}));e(77),e(465),e(431),e(78);var r=e(467),u=e.n(r);function i(n,t){var e=new u.a;return n.map((function(n){var r=n;return"string"==typeof n&&(r={label:n,permalink:"/blog/tags/"+e.slug(n)}),function(n,t){var e=n.label.split(": ",2),r=e[0],u=e[1],i="primary";switch(t){case"blog":case"guides":i=function(n){switch(n){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(r)}return{category:r,count:n.count,label:n.label,permalink:n.permalink,style:i,value:u}}(r,t)}))}},448:function(n,t){n.exports=function(n){return n.webpackPolyfill||(n.deprecate=function(){},n.paths=[],n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),n.webpackPolyfill=1),n}},457:function(n,t,e){var r=e(30),u=e(54),i=e(27),a=e(26),o=e(458);n.exports=function(n,t){var e=1==n,c=2==n,l=3==n,f=4==n,s=6==n,v=5==n||s,h=t||o;return function(t,o,d){for(var p,D,g=i(t),_=u(g),m=r(o,d,3),y=a(_.length),b=0,E=e?h(t,y):c?h(t,0):void 0;y>b;b++)if((v||b in _)&&(D=m(p=_[b],b,g),n))if(e)E[b]=D;else if(D)switch(n){case 3:return!0;case 5:return p;case 6:return b;case 2:E.push(p)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(n,t,e){var r=e(459);n.exports=function(n,t){return new(r(n))(t)}},459:function(n,t,e){var r=e(13),u=e(460),i=e(2)("species");n.exports=function(n){var t;return u(n)&&("function"!=typeof(t=n.constructor)||t!==Array&&!u(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(n,t,e){var r=e(23);n.exports=Array.isArray||function(n){return"Array"==r(n)}},466:function(n,t,e){"use strict";var r=e(0),u=e.n(r),i=e(422),a=e(415),o=e.n(a);t.a=function(n){var t=n.count,e=n.label,r=n.permalink,a=n.style,c=n.value,l=n.valueOnly;return u.a.createElement(i.a,{to:r+"/",className:o()("badge","badge--rounded","badge--"+a)},l?c:e,t&&u.a.createElement(u.a.Fragment,null," (",t,")"))}},467:function(n,t,e){var r=e(468);n.exports=o;var u=Object.hasOwnProperty,i=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function c(n,t){return"string"!=typeof n?"":(t||(n=n.toLowerCase()),n.trim().replace(a,"").replace(r(),"").replace(i,"-"))}o.prototype.slug=function(n,t){for(var e=c(n,!0===t),r=e;u.call(this.occurrences,e);)this.occurrences[r]++,e=r+"-"+this.occurrences[r];return this.occurrences[e]=0,e},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=c},468:function(n,t){n.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},472:function(n,t,e){"use strict";var r=e(1),u=e(0),i=e.n(u),a=(e(422),e(466)),o=e(415),c=e.n(o),l=e(447),f=e(141),s=e.n(f);t.a=function(n){var t,e=n.block,u=n.colorProfile,o=n.tags,f=n.valuesOnly,v=Object(l.a)(o,u);return i.a.createElement("div",{className:c()(s.a.tags,(t={},t[s.a.tagsBlock]=e,t))},v.map((function(n,t){return i.a.createElement(a.a,Object(r.a)({key:t,valueOnly:f},n))})))}},508:function(n,t,e){"use strict";e(29),e(22),e(21),e(52);var r=e(0),u=e.n(r),i=(e(420),e(431),e(422)),a=e(432),o=e.n(a),c=e(472),l=e(447),f=e(428),s=e(433);e(142);var v=function(n){var t=n.frontMatter,e=n.metadata,r=(n.isGuidePage,Object(s.a)().isDarkTheme),a=e.categories,v=(e.description,e.permalink),h=(e.readingTime,e.seriesPosition),d=e.tags,p=(t.author_github,t.cover_label),D=(t.last_modified_on,t.title),g=Object(l.a)(d,"guides"),_=g.find((function(n){return"domain"==n.category})),m=_?_.value:"default",y=g.find((function(n){return"language"==n.category})),b=y?y.value:null,E=g.find((function(n){return"framework"==n.category})),w=E?E.value:null,F=g.find((function(n){return"technology"==n.category})),C=F?F.value:null,k=g.find((function(n){return"cloud_provider"==n.category})),A=k?k.value:null,x=g.find((function(n){return"platform"==n.category})),j=x?x.value:null,O=g.find((function(n){return"source"==n.category})),N=O?O.value:null,B=g.find((function(n){return"sink"==n.category})),I=B?B.value:null,S=Object(f.a)().siteConfig.customFields.metadata,L=S.installation,R=S.sources,T=S.sinks,z=S.languages,W=S.frameworks,M=S.technologies,U=S.cloud_providers,P=L.platforms,$=j&&P[j],q=N&&R[N],V=I&&T[I],G=b&&z.find((function(n){return n.name===b})),Z=w&&W.find((function(n){return n.name===w})),K=C&&M.find((function(n){return n.name===C})),H=A&&U.find((function(n){return n.name===A})),Q=null!==($||q),J=null!=V,Y=null;Z?Y=r?Z.dark_logo_path:Z.logo_path:K?Y=r?K.dark_logo_path:K.logo_path:H?Y=r?H.dark_logo_path:H.logo_path:G?Y=r?G.dark_logo_path:G.logo_path:$?Y=$.logo_path:q&&(Y=q.logo_path);var X=null;return V&&(X=V.logo_path),u.a.createElement(i.a,{to:v+"/",className:"guide-item"},u.a.createElement("article",null,u.a.createElement("div",{className:"domain-bg domain-bg--"+m+" domain-bg--hover"},u.a.createElement("header",null,u.a.createElement("div",{className:"category"},a[0].name),u.a.createElement("h2",{title:D},h&&h+". ",p||D)),u.a.createElement("footer",null,Y&&u.a.createElement(o.a,{src:Y,className:"logo"}),!Y&&Q&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),X&&u.a.createElement(o.a,{src:X,className:"logo"}),!X&&J&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),!Y&&!X&&!Q&&!J&&u.a.createElement(c.a,{colorProfile:"guides",tags:d}),u.a.createElement("div",{className:"action"},"read now")))))},h=e(442),d=e(443),p=e.n(d),D=e(415),g=e.n(D);e(143);function _(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered,a=p()(e).map((function(n){return n.content.metadata.categories[t-1]})).uniqBy("permalink").sortBy("title").keyBy("permalink").value(),o=p.a.groupBy(e,(function(n){return n.content.metadata.categories[t-1].permalink})),c=Object(h.a)("h"+(t+1));return Object.keys(a).map((function(n,t){var e=o[n],l=a[n];return u.a.createElement("section",{key:t},u.a.createElement(c,{id:n},l.title),l.description&&u.a.createElement("div",{className:"sub-title"},l.description),u.a.createElement(m,{items:e,large:r,staggered:i}))}))}function m(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered;if(t)return u.a.createElement(_,{groupLevel:t,items:e});var a,o=(a=e,p.a.sortBy(a,["content.metadata.seriesPosition",function(n){return n.content.metadata.coverLabel.toLowerCase()}]));return u.a.createElement("div",{className:"guides"},u.a.createElement("div",{className:g()("guide-items",{"guide-items--l":r,"guide-items--staggered":i})},o.map((function(n){var t=n.content;return u.a.createElement(v,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:t.metadata.truncated},u.a.createElement(t,null))}))))}t.a=m}}]); \ No newline at end of file diff --git a/004ec9e5.5ea4bd6e.js.LICENSE.txt b/004ec9e5.35989ae1.js.LICENSE.txt similarity index 100% rename from 004ec9e5.5ea4bd6e.js.LICENSE.txt rename to 004ec9e5.35989ae1.js.LICENSE.txt diff --git a/004ec9e5.5ea4bd6e.js b/004ec9e5.5ea4bd6e.js deleted file mode 100644 index bd49a88e9f..0000000000 --- a/004ec9e5.5ea4bd6e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 004ec9e5.5ea4bd6e.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{153:function(n,t,e){"use strict";e.r(t);e(420);var r=e(0),u=e.n(r),i=e(437),a=e(508),o=e(422);t.default=function(n){var t=n.metadata,e=n.items,r=t.allTagsPath,c=t.name,l=t.count;return u.a.createElement(i.a,{title:'Guides tagged "'+c+'"',description:'Guide | Tagged "'+c+'"'},u.a.createElement("header",{className:"hero hero--clean"},u.a.createElement("div",{className:"container"},u.a.createElement("h1",null,l," ",function(n,t){return n>1?t+"s":t}(l,"guide"),' tagged with "',c,'"'),u.a.createElement("div",{className:"hero--subtitle"},u.a.createElement(o.a,{href:r},"View All Tags")))),u.a.createElement("main",{className:"container container--s"},u.a.createElement(a.a,{items:e})))}},415:function(n,t,e){var r;!function(){"use strict";var e={}.hasOwnProperty;function u(){for(var n=[],t=0;t1?arguments[1]:void 0)}}),e(74)("find")},437:function(n,t,e){"use strict";e(449);var r=e(0),u=e.n(r),i=e(450),a=e(435),o=e(1),c=(e(438),e(439),e(451),e(422)),l=e(452),f=e(432),s=e.n(f),v=e(453),h=e.n(v),d=e(428),p=e(415),D=e.n(p),g=e(135),_=e.n(g),m=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.moon)})},y=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.sun)})},b=function(n){var t=Object(d.a)().isClient;return u.a.createElement(h.a,Object(o.a)({disabled:!t,icons:{checked:u.a.createElement(m,null),unchecked:u.a.createElement(y,null)}},n))};function E(){var n=Object(d.a)().siteConfig,t=(void 0===n?{}:n).customFields.metadata.latest_post,e=Date.parse(t.date),r=new Date,u=Math.abs(r-e),i=Math.ceil(u/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!a||a0&&u.a.createElement("div",{className:"row footer__links"},u.a.createElement("div",{className:"col col--5 footer__col"},u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement(s.a,{className:"navbar__logo",src:h,alt:"Qovery",width:"150",height:"auto"})),u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),u.a.createElement("div",null,u.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},u.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},u.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},u.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},u.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(n,t){return u.a.createElement("div",{key:t,className:"col footer__col"},null!=n.title?u.a.createElement("h4",{className:"footer__title"},n.title):null,null!=n.items&&Array.isArray(n.items)&&n.items.length>0?u.a.createElement("ul",{className:"footer__items"},n.items.map((function(n,t){return n.html?u.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):u.a.createElement("li",{key:n.href||n.to,className:"footer__item"},u.a.createElement(R,n))}))):null)}))),(f||a)&&u.a.createElement("div",{className:"text--center"},f&&f.src&&u.a.createElement("div",{className:"margin-bottom--sm"},f.href?u.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:L.a.footerLogoLink},u.a.createElement(T,{alt:f.alt,url:v})):u.a.createElement(T,{alt:f.alt,url:v})),u.a.createElement("small",null,a),u.a.createElement("br",null))))},W=e(454),M=e(455),U=e(3);e(138);t.a=function(n){var t=Object(d.a)().siteConfig,e=void 0===t?{}:t,r=e.favicon,o=(e.tagline,e.title),c=e.themeConfig.image,l=e.url,f=n.children,s=n.title,v=n.noFooter,h=n.description,p=n.image,D=n.keywords,g=(n.permalink,n.version),_=s?s+" | "+o:o,m=p||c,y=l+Object(F.a)(m),b=Object(F.a)(r),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return u.a.createElement(M.a,null,u.a.createElement(W.a,null,u.a.createElement(a.a,null,u.a.createElement("html",{lang:"en"}),u.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&u.a.createElement("title",null,_),_&&u.a.createElement("meta",{property:"og:title",content:_}),r&&u.a.createElement("link",{rel:"shortcut icon",href:b}),h&&u.a.createElement("meta",{name:"description",content:h}),h&&u.a.createElement("meta",{property:"og:description",content:h}),g&&u.a.createElement("meta",{name:"docsearch:version",content:g}),D&&D.length&&u.a.createElement("meta",{name:"keywords",content:D.join(",")}),m&&u.a.createElement("meta",{property:"og:image",content:y}),m&&u.a.createElement("meta",{property:"twitter:image",content:y}),m&&u.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),w&&u.a.createElement("meta",{property:"og:url",content:w}),u.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&u.a.createElement("link",{rel:"canonical",href:w})),u.a.createElement(i.a,null),u.a.createElement(B,null),u.a.createElement("div",{className:"main-wrapper"},f),!v&&u.a.createElement(z,null)))}},442:function(n,t,e){"use strict";var r=e(9),u=e(0),i=e.n(u),a=e(415),o=e.n(a),c=e(428),l=(e(139),e(140)),f=e.n(l);t.a=function(n){return function(t){var e,u=t.id,a=Object(r.a)(t,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,v=(s=void 0===s?{}:s).navbar,h=(v=void 0===v?{}:v).hideOnScroll,d=void 0!==h&&h;return u?i.a.createElement(n,a,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(e={},e[f.a.enhancedAnchor]=!d,e)),id:u}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+u,title:"Direct link to heading"},"#"),a.children):i.a.createElement(n,a)}}},443:function(n,t,e){(function(n,r){var u;(function(){var i="Expected a function",a="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",v="[object Error]",h="[object Function]",d="[object GeneratorFunction]",p="[object Map]",D="[object Number]",g="[object Object]",_="[object RegExp]",m="[object Set]",y="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",C="[object Float32Array]",k="[object Float64Array]",A="[object Int8Array]",x="[object Int16Array]",j="[object Int32Array]",O="[object Uint8Array]",N="[object Uint16Array]",B="[object Uint32Array]",I=/\b__p \+= '';/g,S=/\b(__p \+=) '' \+/g,L=/(__e\(.*?\)|\b__t\)) \+\n'';/g,R=/&(?:amp|lt|gt|quot|#39);/g,T=/[&<>"']/g,z=RegExp(R.source),W=RegExp(T.source),M=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,P=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,V=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/[\\^$.*+?()[\]{}|]/g,Z=RegExp(G.source),K=/^\s+|\s+$/g,H=/^\s+/,Q=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,nn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tn=/\\(\\)?/g,en=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,rn=/\w*$/,un=/^[-+]0x[0-9a-f]+$/i,an=/^0b[01]+$/i,on=/^\[object .+?Constructor\]$/,cn=/^0o[0-7]+$/i,ln=/^(?:0|[1-9]\d*)$/,fn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,sn=/($^)/,vn=/['\n\r\u2028\u2029\\]/g,hn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",dn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pn="[\\ud800-\\udfff]",Dn="["+dn+"]",gn="["+hn+"]",_n="\\d+",mn="[\\u2700-\\u27bf]",yn="[a-z\\xdf-\\xf6\\xf8-\\xff]",bn="[^\\ud800-\\udfff"+dn+_n+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",En="\\ud83c[\\udffb-\\udfff]",wn="[^\\ud800-\\udfff]",Fn="(?:\\ud83c[\\udde6-\\uddff]){2}",Cn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="[A-Z\\xc0-\\xd6\\xd8-\\xde]",An="(?:"+yn+"|"+bn+")",xn="(?:"+kn+"|"+bn+")",jn="(?:"+gn+"|"+En+")"+"?",On="[\\ufe0e\\ufe0f]?"+jn+("(?:\\u200d(?:"+[wn,Fn,Cn].join("|")+")[\\ufe0e\\ufe0f]?"+jn+")*"),Nn="(?:"+[mn,Fn,Cn].join("|")+")"+On,Bn="(?:"+[wn+gn+"?",gn,Fn,Cn,pn].join("|")+")",In=RegExp("['\u2019]","g"),Sn=RegExp(gn,"g"),Ln=RegExp(En+"(?="+En+")|"+Bn+On,"g"),Rn=RegExp([kn+"?"+yn+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[Dn,kn,"$"].join("|")+")",xn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[Dn,kn+An,"$"].join("|")+")",kn+"?"+An+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",kn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_n,Nn].join("|"),"g"),Tn=RegExp("[\\u200d\\ud800-\\udfff"+hn+"\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,Un={};Un[C]=Un[k]=Un[A]=Un[x]=Un[j]=Un[O]=Un["[object Uint8ClampedArray]"]=Un[N]=Un[B]=!0,Un[c]=Un[l]=Un[w]=Un[f]=Un[F]=Un[s]=Un[v]=Un[h]=Un[p]=Un[D]=Un[g]=Un[_]=Un[m]=Un[y]=Un[E]=!1;var Pn={};Pn[c]=Pn[l]=Pn[w]=Pn[F]=Pn[f]=Pn[s]=Pn[C]=Pn[k]=Pn[A]=Pn[x]=Pn[j]=Pn[p]=Pn[D]=Pn[g]=Pn[_]=Pn[m]=Pn[y]=Pn[b]=Pn[O]=Pn["[object Uint8ClampedArray]"]=Pn[N]=Pn[B]=!0,Pn[v]=Pn[h]=Pn[E]=!1;var $n={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},qn=parseFloat,Vn=parseInt,Gn="object"==typeof n&&n&&n.Object===Object&&n,Zn="object"==typeof self&&self&&self.Object===Object&&self,Kn=Gn||Zn||Function("return this")(),Hn=t&&!t.nodeType&&t,Qn=Hn&&"object"==typeof r&&r&&!r.nodeType&&r,Jn=Qn&&Qn.exports===Hn,Yn=Jn&&Gn.process,Xn=function(){try{var n=Qn&&Qn.require&&Qn.require("util").types;return n||Yn&&Yn.binding&&Yn.binding("util")}catch(t){}}(),nt=Xn&&Xn.isArrayBuffer,tt=Xn&&Xn.isDate,et=Xn&&Xn.isMap,rt=Xn&&Xn.isRegExp,ut=Xn&&Xn.isSet,it=Xn&&Xn.isTypedArray;function at(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function ot(n,t,e,r){for(var u=-1,i=null==n?0:n.length;++u-1}function ht(n,t,e){for(var r=-1,u=null==n?0:n.length;++r-1;);return e}function Lt(n,t){for(var e=n.length;e--&&Et(t,n[e],0)>-1;);return e}function Rt(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}var Tt=At({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),zt=At({"&":"&","<":"<",">":">",'"':""","'":"'"});function Wt(n){return"\\"+$n[n]}function Mt(n){return Tn.test(n)}function Ut(n){var t=-1,e=Array(n.size);return n.forEach((function(n,r){e[++t]=[r,n]})),e}function Pt(n,t){return function(e){return n(t(e))}}function $t(n,t){for(var e=-1,r=n.length,u=0,i=[];++e",""":'"',"'":"'"});var Ht=function n(t){var e,r=(t=null==t?Kn:Ht.defaults(Kn.Object(),t,Ht.pick(Kn,Wn))).Array,u=t.Date,hn=t.Error,dn=t.Function,pn=t.Math,Dn=t.Object,gn=t.RegExp,_n=t.String,mn=t.TypeError,yn=r.prototype,bn=dn.prototype,En=Dn.prototype,wn=t["__core-js_shared__"],Fn=bn.toString,Cn=En.hasOwnProperty,kn=0,An=(e=/[^.]+$/.exec(wn&&wn.keys&&wn.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",xn=En.toString,jn=Fn.call(Dn),On=Kn._,Nn=gn("^"+Fn.call(Cn).replace(G,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Bn=Jn?t.Buffer:void 0,Ln=t.Symbol,Tn=t.Uint8Array,$n=Bn?Bn.allocUnsafe:void 0,Gn=Pt(Dn.getPrototypeOf,Dn),Zn=Dn.create,Hn=En.propertyIsEnumerable,Qn=yn.splice,Yn=Ln?Ln.isConcatSpreadable:void 0,Xn=Ln?Ln.iterator:void 0,mt=Ln?Ln.toStringTag:void 0,At=function(){try{var n=Xu(Dn,"defineProperty");return n({},"",{}),n}catch(t){}}(),Qt=t.clearTimeout!==Kn.clearTimeout&&t.clearTimeout,Jt=u&&u.now!==Kn.Date.now&&u.now,Yt=t.setTimeout!==Kn.setTimeout&&t.setTimeout,Xt=pn.ceil,ne=pn.floor,te=Dn.getOwnPropertySymbols,ee=Bn?Bn.isBuffer:void 0,re=t.isFinite,ue=yn.join,ie=Pt(Dn.keys,Dn),ae=pn.max,oe=pn.min,ce=u.now,le=t.parseInt,fe=pn.random,se=yn.reverse,ve=Xu(t,"DataView"),he=Xu(t,"Map"),de=Xu(t,"Promise"),pe=Xu(t,"Set"),De=Xu(t,"WeakMap"),ge=Xu(Dn,"create"),_e=De&&new De,me={},ye=ki(ve),be=ki(he),Ee=ki(de),we=ki(pe),Fe=ki(De),Ce=Ln?Ln.prototype:void 0,ke=Ce?Ce.valueOf:void 0,Ae=Ce?Ce.toString:void 0;function xe(n){if($a(n)&&!Ba(n)&&!(n instanceof Be)){if(n instanceof Ne)return n;if(Cn.call(n,"__wrapped__"))return Ai(n)}return new Ne(n)}var je=function(){function n(){}return function(t){if(!Pa(t))return{};if(Zn)return Zn(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}();function Oe(){}function Ne(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Be(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Ie(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Qe(n,t,e,r,u,i){var a,o=1&t,l=2&t,v=4&t;if(e&&(a=u?e(n,r,u,i):e(n)),void 0!==a)return a;if(!Pa(n))return n;var E=Ba(n);if(E){if(a=function(n){var t=n.length,e=new n.constructor(t);t&&"string"==typeof n[0]&&Cn.call(n,"index")&&(e.index=n.index,e.input=n.input);return e}(n),!o)return gu(n,a)}else{var I=ei(n),S=I==h||I==d;if(Ra(n))return su(n,o);if(I==g||I==c||S&&!u){if(a=l||S?{}:ui(n),!o)return l?function(n,t){return _u(n,ti(n),t)}(n,function(n,t){return n&&_u(t,bo(t),n)}(a,n)):function(n,t){return _u(n,ni(n),t)}(n,Ge(a,n))}else{if(!Pn[I])return u?n:{};a=function(n,t,e){var r=n.constructor;switch(t){case w:return vu(n);case f:case s:return new r(+n);case F:return function(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case C:case k:case A:case x:case j:case O:case"[object Uint8ClampedArray]":case N:case B:return hu(n,e);case p:return new r;case D:case y:return new r(n);case _:return function(n){var t=new n.constructor(n.source,rn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case m:return new r;case b:return u=n,ke?Dn(ke.call(u)):{}}var u}(n,I,o)}}i||(i=new Te);var L=i.get(n);if(L)return L;i.set(n,a),Ka(n)?n.forEach((function(r){a.add(Qe(r,t,e,r,n,i))})):qa(n)&&n.forEach((function(r,u){a.set(u,Qe(r,t,e,u,n,i))}));var R=E?void 0:(v?l?Gu:Vu:l?bo:yo)(n);return ct(R||n,(function(r,u){R&&(r=n[u=r]),$e(a,u,Qe(r,t,e,u,n,i))})),a}function Je(n,t,e){var r=e.length;if(null==n)return!r;for(n=Dn(n);r--;){var u=e[r],i=t[u],a=n[u];if(void 0===a&&!(u in n)||!i(a))return!1}return!0}function Ye(n,t,e){if("function"!=typeof n)throw new mn(i);return mi((function(){n.apply(void 0,e)}),t)}function Xe(n,t,e,r){var u=-1,i=vt,a=!0,o=n.length,c=[],l=t.length;if(!o)return c;e&&(t=dt(t,Nt(e))),r?(i=ht,a=!1):t.length>=200&&(i=It,a=!1,t=new Re(t));n:for(;++u-1},Se.prototype.set=function(n,t){var e=this.__data__,r=qe(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},Le.prototype.clear=function(){this.size=0,this.__data__={hash:new Ie,map:new(he||Se),string:new Ie}},Le.prototype.delete=function(n){var t=Ju(this,n).delete(n);return this.size-=t?1:0,t},Le.prototype.get=function(n){return Ju(this,n).get(n)},Le.prototype.has=function(n){return Ju(this,n).has(n)},Le.prototype.set=function(n,t){var e=Ju(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Re.prototype.add=Re.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Re.prototype.has=function(n){return this.__data__.has(n)},Te.prototype.clear=function(){this.__data__=new Se,this.size=0},Te.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},Te.prototype.get=function(n){return this.__data__.get(n)},Te.prototype.has=function(n){return this.__data__.has(n)},Te.prototype.set=function(n,t){var e=this.__data__;if(e instanceof Se){var r=e.__data__;if(!he||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new Le(r)}return e.set(n,t),this.size=e.size,this};var nr=bu(cr),tr=bu(lr,!0);function er(n,t){var e=!0;return nr(n,(function(n,r,u){return e=!!t(n,r,u)})),e}function rr(n,t,e){for(var r=-1,u=n.length;++r0&&e(o)?t>1?ir(o,t-1,e,r,u):pt(u,o):r||(u[u.length]=o)}return u}var ar=Eu(),or=Eu(!0);function cr(n,t){return n&&ar(n,t,yo)}function lr(n,t){return n&&or(n,t,yo)}function fr(n,t){return st(t,(function(t){return Wa(n[t])}))}function sr(n,t){for(var e=0,r=(t=ou(t,n)).length;null!=n&&et}function pr(n,t){return null!=n&&Cn.call(n,t)}function Dr(n,t){return null!=n&&t in Dn(n)}function gr(n,t,e){for(var u=e?ht:vt,i=n[0].length,a=n.length,o=a,c=r(a),l=1/0,f=[];o--;){var s=n[o];o&&t&&(s=dt(s,Nt(t))),l=oe(s.length,l),c[o]=!e&&(t||i>=120&&s.length>=120)?new Re(o&&s):void 0}s=n[0];var v=-1,h=c[0];n:for(;++v=o)return c;var l=e[r];return c*("desc"==l?-1:1)}}return n.index-t.index}(n,t,e)}))}function Ir(n,t,e){for(var r=-1,u=t.length,i={};++r-1;)o!==n&&Qn.call(o,c,1),Qn.call(n,c,1);return n}function Lr(n,t){for(var e=n?t.length:0,r=e-1;e--;){var u=t[e];if(e==r||u!==i){var i=u;ai(u)?Qn.call(n,u,1):Xr(n,u)}}return n}function Rr(n,t){return n+ne(fe()*(t-n+1))}function Tr(n,t){var e="";if(!n||t<1||t>9007199254740991)return e;do{t%2&&(e+=n),(t=ne(t/2))&&(n+=n)}while(t);return e}function zr(n,t){return yi(di(n,t,Go),n+"")}function Wr(n){return We(jo(n))}function Mr(n,t){var e=jo(n);return wi(e,He(t,0,e.length))}function Ur(n,t,e,r){if(!Pa(n))return n;for(var u=-1,i=(t=ou(t,n)).length,a=i-1,o=n;null!=o&&++ui?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var a=r(i);++u>>1,a=n[i];null!==a&&!Qa(a)&&(e?a<=t:a=200){var l=t?null:Tu(n);if(l)return qt(l);a=!1,u=It,c=new Re}else c=t?[]:o;n:for(;++r=r?n:Vr(n,t,e)}var fu=Qt||function(n){return Kn.clearTimeout(n)};function su(n,t){if(t)return n.slice();var e=n.length,r=$n?$n(e):new n.constructor(e);return n.copy(r),r}function vu(n){var t=new n.constructor(n.byteLength);return new Tn(t).set(new Tn(n)),t}function hu(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function du(n,t){if(n!==t){var e=void 0!==n,r=null===n,u=n==n,i=Qa(n),a=void 0!==t,o=null===t,c=t==t,l=Qa(t);if(!o&&!l&&!i&&n>t||i&&a&&c&&!o&&!l||r&&a&&c||!e&&c||!u)return 1;if(!r&&!i&&!l&&n1?e[u-1]:void 0,a=u>2?e[2]:void 0;for(i=n.length>3&&"function"==typeof i?(u--,i):void 0,a&&oi(e[0],e[1],a)&&(i=u<3?void 0:i,u=1),t=Dn(t);++r-1?u[i?t[a]:a]:void 0}}function Au(n){return qu((function(t){var e=t.length,r=e,u=Ne.prototype.thru;for(n&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new mn(i);if(u&&!o&&"wrapper"==Ku(a))var o=new Ne([],!0)}for(r=o?r:e;++r1&&m.reverse(),s&&l<_&&(m.length=l),this&&this!==Kn&&this instanceof g&&(C=D||Cu(C)),C.apply(F,m)}}function ju(n,t){return function(e,r){return function(n,t,e,r){return cr(n,(function(n,u,i){t(r,e(n),u,i)})),r}(e,n,t(r),{})}}function Ou(n,t){return function(e,r){var u;if(void 0===e&&void 0===r)return t;if(void 0!==e&&(u=e),void 0!==r){if(void 0===u)return r;"string"==typeof e||"string"==typeof r?(e=Jr(e),r=Jr(r)):(e=Qr(e),r=Qr(r)),u=n(e,r)}return u}}function Nu(n){return qu((function(t){return t=dt(t,Nt(Qu())),zr((function(e){var r=this;return n(t,(function(n){return at(n,r,e)}))}))}))}function Bu(n,t){var e=(t=void 0===t?" ":Jr(t)).length;if(e<2)return e?Tr(t,n):t;var r=Tr(t,Xt(n/Gt(t)));return Mt(t)?lu(Zt(r),0,n).join(""):r.slice(0,n)}function Iu(n){return function(t,e,u){return u&&"number"!=typeof u&&oi(t,e,u)&&(e=u=void 0),t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e,u){for(var i=-1,a=ae(Xt((t-n)/(e||1)),0),o=r(a);a--;)o[u?a:++i]=n,n+=e;return o}(t,e,u=void 0===u?to))return!1;var l=i.get(n);if(l&&i.get(t))return l==t;var f=-1,s=!0,v=2&e?new Re:void 0;for(i.set(n,t),i.set(t,n);++f-1&&n%1==0&&n1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(J,"{\n/* [wrapped with "+t+"] */\n")}(r,function(n,t){return ct(o,(function(e){var r="_."+e[0];t&e[1]&&!vt(n,r)&&n.push(r)})),n.sort()}(function(n){var t=n.match(Y);return t?t[1].split(X):[]}(r),e)))}function Ei(n){var t=0,e=0;return function(){var r=ce(),u=16-(r-e);if(e=r,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}function wi(n,t){var e=-1,r=n.length,u=r-1;for(t=void 0===t?r:t;++e1?n[t-1]:void 0;return e="function"==typeof e?(n.pop(),e):void 0,Zi(n,e)}));function na(n){var t=xe(n);return t.__chain__=!0,t}function ta(n,t){return t(n)}var ea=qu((function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,u=function(t){return Ke(t,n)};return!(t>1||this.__actions__.length)&&r instanceof Be&&ai(e)?((r=r.slice(e,+e+(t?1:0))).__actions__.push({func:ta,args:[u],thisArg:void 0}),new Ne(r,this.__chain__).thru((function(n){return t&&!n.length&&n.push(void 0),n}))):this.thru(u)}));var ra=mu((function(n,t,e){Cn.call(n,e)?++n[e]:Ze(n,e,1)}));var ua=ku(Ni),ia=ku(Bi);function aa(n,t){return(Ba(n)?ct:nr)(n,Qu(t,3))}function oa(n,t){return(Ba(n)?lt:tr)(n,Qu(t,3))}var ca=mu((function(n,t,e){Cn.call(n,e)?n[e].push(t):Ze(n,e,[t])}));var la=zr((function(n,t,e){var u=-1,i="function"==typeof t,a=Sa(n)?r(n.length):[];return nr(n,(function(n){a[++u]=i?at(t,n,e):_r(n,t,e)})),a})),fa=mu((function(n,t,e){Ze(n,e,t)}));function sa(n,t){return(Ba(n)?dt:Ar)(n,Qu(t,3))}var va=mu((function(n,t,e){n[e?0:1].push(t)}),(function(){return[[],[]]}));var ha=zr((function(n,t){if(null==n)return[];var e=t.length;return e>1&&oi(n,t[0],t[1])?t=[]:e>2&&oi(t[0],t[1],t[2])&&(t=[t[0]]),Br(n,ir(t,1),[])})),da=Jt||function(){return Kn.Date.now()};function pa(n,t,e){return t=e?void 0:t,Wu(n,128,void 0,void 0,void 0,void 0,t=n&&null==t?n.length:t)}function Da(n,t){var e;if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=void 0),e}}var ga=zr((function(n,t,e){var r=1;if(e.length){var u=$t(e,Hu(ga));r|=32}return Wu(n,r,t,e,u)})),_a=zr((function(n,t,e){var r=3;if(e.length){var u=$t(e,Hu(_a));r|=32}return Wu(t,r,n,e,u)}));function ma(n,t,e){var r,u,a,o,c,l,f=0,s=!1,v=!1,h=!0;if("function"!=typeof n)throw new mn(i);function d(t){var e=r,i=u;return r=u=void 0,f=t,o=n.apply(i,e)}function p(n){return f=n,c=mi(g,t),s?d(n):o}function D(n){var e=n-l;return void 0===l||e>=t||e<0||v&&n-f>=a}function g(){var n=da();if(D(n))return _(n);c=mi(g,function(n){var e=t-(n-l);return v?oe(e,a-(n-f)):e}(n))}function _(n){return c=void 0,h&&r?d(n):(r=u=void 0,o)}function m(){var n=da(),e=D(n);if(r=arguments,u=this,l=n,e){if(void 0===c)return p(l);if(v)return fu(c),c=mi(g,t),d(l)}return void 0===c&&(c=mi(g,t)),o}return t=uo(t)||0,Pa(e)&&(s=!!e.leading,a=(v="maxWait"in e)?ae(uo(e.maxWait)||0,t):a,h="trailing"in e?!!e.trailing:h),m.cancel=function(){void 0!==c&&fu(c),f=0,r=l=u=c=void 0},m.flush=function(){return void 0===c?o:_(da())},m}var ya=zr((function(n,t){return Ye(n,1,t)})),ba=zr((function(n,t,e){return Ye(n,uo(t)||0,e)}));function Ea(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new mn(i);var e=function(){var r=arguments,u=t?t.apply(this,r):r[0],i=e.cache;if(i.has(u))return i.get(u);var a=n.apply(this,r);return e.cache=i.set(u,a)||i,a};return e.cache=new(Ea.Cache||Le),e}function wa(n){if("function"!=typeof n)throw new mn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Ea.Cache=Le;var Fa=cu((function(n,t){var e=(t=1==t.length&&Ba(t[0])?dt(t[0],Nt(Qu())):dt(ir(t,1),Nt(Qu()))).length;return zr((function(r){for(var u=-1,i=oe(r.length,e);++u=t})),Na=mr(function(){return arguments}())?mr:function(n){return $a(n)&&Cn.call(n,"callee")&&!Hn.call(n,"callee")},Ba=r.isArray,Ia=nt?Nt(nt):function(n){return $a(n)&&hr(n)==w};function Sa(n){return null!=n&&Ua(n.length)&&!Wa(n)}function La(n){return $a(n)&&Sa(n)}var Ra=ee||ic,Ta=tt?Nt(tt):function(n){return $a(n)&&hr(n)==s};function za(n){if(!$a(n))return!1;var t=hr(n);return t==v||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Ga(n)}function Wa(n){if(!Pa(n))return!1;var t=hr(n);return t==h||t==d||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ma(n){return"number"==typeof n&&n==eo(n)}function Ua(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=9007199254740991}function Pa(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function $a(n){return null!=n&&"object"==typeof n}var qa=et?Nt(et):function(n){return $a(n)&&ei(n)==p};function Va(n){return"number"==typeof n||$a(n)&&hr(n)==D}function Ga(n){if(!$a(n)||hr(n)!=g)return!1;var t=Gn(n);if(null===t)return!0;var e=Cn.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&Fn.call(e)==jn}var Za=rt?Nt(rt):function(n){return $a(n)&&hr(n)==_};var Ka=ut?Nt(ut):function(n){return $a(n)&&ei(n)==m};function Ha(n){return"string"==typeof n||!Ba(n)&&$a(n)&&hr(n)==y}function Qa(n){return"symbol"==typeof n||$a(n)&&hr(n)==b}var Ja=it?Nt(it):function(n){return $a(n)&&Ua(n.length)&&!!Un[hr(n)]};var Ya=Su(kr),Xa=Su((function(n,t){return n<=t}));function no(n){if(!n)return[];if(Sa(n))return Ha(n)?Zt(n):gu(n);if(Xn&&n[Xn])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[Xn]());var t=ei(n);return(t==p?Ut:t==m?qt:jo)(n)}function to(n){return n?(n=uo(n))===1/0||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function eo(n){var t=to(n),e=t%1;return t==t?e?t-e:t:0}function ro(n){return n?He(eo(n),0,4294967295):0}function uo(n){if("number"==typeof n)return n;if(Qa(n))return NaN;if(Pa(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Pa(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(K,"");var e=an.test(n);return e||cn.test(n)?Vn(n.slice(2),e?2:8):un.test(n)?NaN:+n}function io(n){return _u(n,bo(n))}function ao(n){return null==n?"":Jr(n)}var oo=yu((function(n,t){if(si(t)||Sa(t))_u(t,yo(t),n);else for(var e in t)Cn.call(t,e)&&$e(n,e,t[e])})),co=yu((function(n,t){_u(t,bo(t),n)})),lo=yu((function(n,t,e,r){_u(t,bo(t),n,r)})),fo=yu((function(n,t,e,r){_u(t,yo(t),n,r)})),so=qu(Ke);var vo=zr((function(n,t){n=Dn(n);var e=-1,r=t.length,u=r>2?t[2]:void 0;for(u&&oi(t[0],t[1],u)&&(r=1);++e1),t})),_u(n,Gu(n),e),r&&(e=Qe(e,7,Pu));for(var u=t.length;u--;)Xr(e,t[u]);return e}));var Co=qu((function(n,t){return null==n?{}:function(n,t){return Ir(n,t,(function(t,e){return Do(n,e)}))}(n,t)}));function ko(n,t){if(null==n)return{};var e=dt(Gu(n),(function(n){return[n]}));return t=Qu(t),Ir(n,e,(function(n,e){return t(n,e[0])}))}var Ao=zu(yo),xo=zu(bo);function jo(n){return null==n?[]:Bt(n,yo(n))}var Oo=Fu((function(n,t,e){return t=t.toLowerCase(),n+(e?No(t):t)}));function No(n){return Wo(ao(n).toLowerCase())}function Bo(n){return(n=ao(n))&&n.replace(fn,Tt).replace(Sn,"")}var Io=Fu((function(n,t,e){return n+(e?"-":"")+t.toLowerCase()})),So=Fu((function(n,t,e){return n+(e?" ":"")+t.toLowerCase()})),Lo=wu("toLowerCase");var Ro=Fu((function(n,t,e){return n+(e?"_":"")+t.toLowerCase()}));var To=Fu((function(n,t,e){return n+(e?" ":"")+Wo(t)}));var zo=Fu((function(n,t,e){return n+(e?" ":"")+t.toUpperCase()})),Wo=wu("toUpperCase");function Mo(n,t,e){return n=ao(n),void 0===(t=e?void 0:t)?function(n){return zn.test(n)}(n)?function(n){return n.match(Rn)||[]}(n):function(n){return n.match(nn)||[]}(n):n.match(t)||[]}var Uo=zr((function(n,t){try{return at(n,void 0,t)}catch(e){return za(e)?e:new hn(e)}})),Po=qu((function(n,t){return ct(t,(function(t){t=Ci(t),Ze(n,t,ga(n[t],n))})),n}));function $o(n){return function(){return n}}var qo=Au(),Vo=Au(!0);function Go(n){return n}function Zo(n){return wr("function"==typeof n?n:Qe(n,1))}var Ko=zr((function(n,t){return function(e){return _r(e,n,t)}})),Ho=zr((function(n,t){return function(e){return _r(n,e,t)}}));function Qo(n,t,e){var r=yo(t),u=fr(t,r);null!=e||Pa(t)&&(u.length||!r.length)||(e=t,t=n,n=this,u=fr(t,yo(t)));var i=!(Pa(e)&&"chain"in e&&!e.chain),a=Wa(n);return ct(u,(function(e){var r=t[e];n[e]=r,a&&(n.prototype[e]=function(){var t=this.__chain__;if(i||t){var e=n(this.__wrapped__),u=e.__actions__=gu(this.__actions__);return u.push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,pt([this.value()],arguments))})})),n}function Jo(){}var Yo=Nu(dt),Xo=Nu(ft),nc=Nu(_t);function tc(n){return ci(n)?kt(Ci(n)):function(n){return function(t){return sr(t,n)}}(n)}var ec=Iu(),rc=Iu(!0);function uc(){return[]}function ic(){return!1}var ac=Ou((function(n,t){return n+t}),0),oc=Ru("ceil"),cc=Ou((function(n,t){return n/t}),1),lc=Ru("floor");var fc,sc=Ou((function(n,t){return n*t}),1),vc=Ru("round"),hc=Ou((function(n,t){return n-t}),0);return xe.after=function(n,t){if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){if(--n<1)return t.apply(this,arguments)}},xe.ary=pa,xe.assign=oo,xe.assignIn=co,xe.assignInWith=lo,xe.assignWith=fo,xe.at=so,xe.before=Da,xe.bind=ga,xe.bindAll=Po,xe.bindKey=_a,xe.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Ba(n)?n:[n]},xe.chain=na,xe.chunk=function(n,t,e){t=(e?oi(n,t,e):void 0===t)?1:ae(eo(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,a=0,o=r(Xt(u/t));iu?0:u+e),(r=void 0===r||r>u?u:eo(r))<0&&(r+=u),r=e>r?0:ro(r);e>>0)?(n=ao(n))&&("string"==typeof t||null!=t&&!Za(t))&&!(t=Jr(t))&&Mt(n)?lu(Zt(n),0,e):n.split(t,e):[]},xe.spread=function(n,t){if("function"!=typeof n)throw new mn(i);return t=null==t?0:ae(eo(t),0),zr((function(e){var r=e[t],u=lu(e,0,t);return r&&pt(u,r),at(n,this,u)}))},xe.tail=function(n){var t=null==n?0:n.length;return t?Vr(n,1,t):[]},xe.take=function(n,t,e){return n&&n.length?Vr(n,0,(t=e||void 0===t?1:eo(t))<0?0:t):[]},xe.takeRight=function(n,t,e){var r=null==n?0:n.length;return r?Vr(n,(t=r-(t=e||void 0===t?1:eo(t)))<0?0:t,r):[]},xe.takeRightWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3),!1,!0):[]},xe.takeWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3)):[]},xe.tap=function(n,t){return t(n),n},xe.throttle=function(n,t,e){var r=!0,u=!0;if("function"!=typeof n)throw new mn(i);return Pa(e)&&(r="leading"in e?!!e.leading:r,u="trailing"in e?!!e.trailing:u),ma(n,t,{leading:r,maxWait:t,trailing:u})},xe.thru=ta,xe.toArray=no,xe.toPairs=Ao,xe.toPairsIn=xo,xe.toPath=function(n){return Ba(n)?dt(n,Ci):Qa(n)?[n]:gu(Fi(ao(n)))},xe.toPlainObject=io,xe.transform=function(n,t,e){var r=Ba(n),u=r||Ra(n)||Ja(n);if(t=Qu(t,4),null==e){var i=n&&n.constructor;e=u?r?new i:[]:Pa(n)&&Wa(i)?je(Gn(n)):{}}return(u?ct:cr)(n,(function(n,r,u){return t(e,n,r,u)})),e},xe.unary=function(n){return pa(n,1)},xe.union=$i,xe.unionBy=qi,xe.unionWith=Vi,xe.uniq=function(n){return n&&n.length?Yr(n):[]},xe.uniqBy=function(n,t){return n&&n.length?Yr(n,Qu(t,2)):[]},xe.uniqWith=function(n,t){return t="function"==typeof t?t:void 0,n&&n.length?Yr(n,void 0,t):[]},xe.unset=function(n,t){return null==n||Xr(n,t)},xe.unzip=Gi,xe.unzipWith=Zi,xe.update=function(n,t,e){return null==n?n:nu(n,t,au(e))},xe.updateWith=function(n,t,e,r){return r="function"==typeof r?r:void 0,null==n?n:nu(n,t,au(e),r)},xe.values=jo,xe.valuesIn=function(n){return null==n?[]:Bt(n,bo(n))},xe.without=Ki,xe.words=Mo,xe.wrap=function(n,t){return Ca(au(t),n)},xe.xor=Hi,xe.xorBy=Qi,xe.xorWith=Ji,xe.zip=Yi,xe.zipObject=function(n,t){return uu(n||[],t||[],$e)},xe.zipObjectDeep=function(n,t){return uu(n||[],t||[],Ur)},xe.zipWith=Xi,xe.entries=Ao,xe.entriesIn=xo,xe.extend=co,xe.extendWith=lo,Qo(xe,xe),xe.add=ac,xe.attempt=Uo,xe.camelCase=Oo,xe.capitalize=No,xe.ceil=oc,xe.clamp=function(n,t,e){return void 0===e&&(e=t,t=void 0),void 0!==e&&(e=(e=uo(e))==e?e:0),void 0!==t&&(t=(t=uo(t))==t?t:0),He(uo(n),t,e)},xe.clone=function(n){return Qe(n,4)},xe.cloneDeep=function(n){return Qe(n,5)},xe.cloneDeepWith=function(n,t){return Qe(n,5,t="function"==typeof t?t:void 0)},xe.cloneWith=function(n,t){return Qe(n,4,t="function"==typeof t?t:void 0)},xe.conformsTo=function(n,t){return null==t||Je(n,t,yo(t))},xe.deburr=Bo,xe.defaultTo=function(n,t){return null==n||n!=n?t:n},xe.divide=cc,xe.endsWith=function(n,t,e){n=ao(n),t=Jr(t);var r=n.length,u=e=void 0===e?r:He(eo(e),0,r);return(e-=t.length)>=0&&n.slice(e,u)==t},xe.eq=xa,xe.escape=function(n){return(n=ao(n))&&W.test(n)?n.replace(T,zt):n},xe.escapeRegExp=function(n){return(n=ao(n))&&Z.test(n)?n.replace(G,"\\$&"):n},xe.every=function(n,t,e){var r=Ba(n)?ft:er;return e&&oi(n,t,e)&&(t=void 0),r(n,Qu(t,3))},xe.find=ua,xe.findIndex=Ni,xe.findKey=function(n,t){return yt(n,Qu(t,3),cr)},xe.findLast=ia,xe.findLastIndex=Bi,xe.findLastKey=function(n,t){return yt(n,Qu(t,3),lr)},xe.floor=lc,xe.forEach=aa,xe.forEachRight=oa,xe.forIn=function(n,t){return null==n?n:ar(n,Qu(t,3),bo)},xe.forInRight=function(n,t){return null==n?n:or(n,Qu(t,3),bo)},xe.forOwn=function(n,t){return n&&cr(n,Qu(t,3))},xe.forOwnRight=function(n,t){return n&&lr(n,Qu(t,3))},xe.get=po,xe.gt=ja,xe.gte=Oa,xe.has=function(n,t){return null!=n&&ri(n,t,pr)},xe.hasIn=Do,xe.head=Si,xe.identity=Go,xe.includes=function(n,t,e,r){n=Sa(n)?n:jo(n),e=e&&!r?eo(e):0;var u=n.length;return e<0&&(e=ae(u+e,0)),Ha(n)?e<=u&&n.indexOf(t,e)>-1:!!u&&Et(n,t,e)>-1},xe.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=null==e?0:eo(e);return u<0&&(u=ae(r+u,0)),Et(n,t,u)},xe.inRange=function(n,t,e){return t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e){return n>=oe(t,e)&&n=-9007199254740991&&n<=9007199254740991},xe.isSet=Ka,xe.isString=Ha,xe.isSymbol=Qa,xe.isTypedArray=Ja,xe.isUndefined=function(n){return void 0===n},xe.isWeakMap=function(n){return $a(n)&&ei(n)==E},xe.isWeakSet=function(n){return $a(n)&&"[object WeakSet]"==hr(n)},xe.join=function(n,t){return null==n?"":ue.call(n,t)},xe.kebabCase=Io,xe.last=zi,xe.lastIndexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=r;return void 0!==e&&(u=(u=eo(e))<0?ae(r+u,0):oe(u,r-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,u):bt(n,Ft,u,!0)},xe.lowerCase=So,xe.lowerFirst=Lo,xe.lt=Ya,xe.lte=Xa,xe.max=function(n){return n&&n.length?rr(n,Go,dr):void 0},xe.maxBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),dr):void 0},xe.mean=function(n){return Ct(n,Go)},xe.meanBy=function(n,t){return Ct(n,Qu(t,2))},xe.min=function(n){return n&&n.length?rr(n,Go,kr):void 0},xe.minBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),kr):void 0},xe.stubArray=uc,xe.stubFalse=ic,xe.stubObject=function(){return{}},xe.stubString=function(){return""},xe.stubTrue=function(){return!0},xe.multiply=sc,xe.nth=function(n,t){return n&&n.length?Nr(n,eo(t)):void 0},xe.noConflict=function(){return Kn._===this&&(Kn._=On),this},xe.noop=Jo,xe.now=da,xe.pad=function(n,t,e){n=ao(n);var r=(t=eo(t))?Gt(n):0;if(!t||r>=t)return n;var u=(t-r)/2;return Bu(ne(u),e)+n+Bu(Xt(u),e)},xe.padEnd=function(n,t,e){n=ao(n);var r=(t=eo(t))?Gt(n):0;return t&&rt){var r=n;n=t,t=r}if(e||n%1||t%1){var u=fe();return oe(n+u*(t-n+qn("1e-"+((u+"").length-1))),t)}return Rr(n,t)},xe.reduce=function(n,t,e){var r=Ba(n)?Dt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,nr)},xe.reduceRight=function(n,t,e){var r=Ba(n)?gt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,tr)},xe.repeat=function(n,t,e){return t=(e?oi(n,t,e):void 0===t)?1:eo(t),Tr(ao(n),t)},xe.replace=function(){var n=arguments,t=ao(n[0]);return n.length<3?t:t.replace(n[1],n[2])},xe.result=function(n,t,e){var r=-1,u=(t=ou(t,n)).length;for(u||(u=1,n=void 0);++r9007199254740991)return[];var e=4294967295,r=oe(n,4294967295);n-=4294967295;for(var u=Ot(r,t=Qu(t));++e=i)return n;var o=e-Gt(r);if(o<1)return r;var c=a?lu(a,0,o).join(""):n.slice(0,o);if(void 0===u)return c+r;if(a&&(o+=c.length-o),Za(u)){if(n.slice(o).search(u)){var l,f=c;for(u.global||(u=gn(u.source,ao(rn.exec(u))+"g")),u.lastIndex=0;l=u.exec(f);)var s=l.index;c=c.slice(0,void 0===s?o:s)}}else if(n.indexOf(Jr(u),o)!=o){var v=c.lastIndexOf(u);v>-1&&(c=c.slice(0,v))}return c+r},xe.unescape=function(n){return(n=ao(n))&&z.test(n)?n.replace(R,Kt):n},xe.uniqueId=function(n){var t=++kn;return ao(n)+t},xe.upperCase=zo,xe.upperFirst=Wo,xe.each=aa,xe.eachRight=oa,xe.first=Si,Qo(xe,(fc={},cr(xe,(function(n,t){Cn.call(xe.prototype,t)||(fc[t]=n)})),fc),{chain:!1}),xe.VERSION="4.17.15",ct(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){xe[n].placeholder=xe})),ct(["drop","take"],(function(n,t){Be.prototype[n]=function(e){e=void 0===e?1:ae(eo(e),0);var r=this.__filtered__&&!t?new Be(this):this.clone();return r.__filtered__?r.__takeCount__=oe(e,r.__takeCount__):r.__views__.push({size:oe(e,4294967295),type:n+(r.__dir__<0?"Right":"")}),r},Be.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),ct(["filter","map","takeWhile"],(function(n,t){var e=t+1,r=1==e||3==e;Be.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Qu(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}})),ct(["head","last"],(function(n,t){var e="take"+(t?"Right":"");Be.prototype[n]=function(){return this[e](1).value()[0]}})),ct(["initial","tail"],(function(n,t){var e="drop"+(t?"":"Right");Be.prototype[n]=function(){return this.__filtered__?new Be(this):this[e](1)}})),Be.prototype.compact=function(){return this.filter(Go)},Be.prototype.find=function(n){return this.filter(n).head()},Be.prototype.findLast=function(n){return this.reverse().find(n)},Be.prototype.invokeMap=zr((function(n,t){return"function"==typeof n?new Be(this):this.map((function(e){return _r(e,n,t)}))})),Be.prototype.reject=function(n){return this.filter(wa(Qu(n)))},Be.prototype.slice=function(n,t){n=eo(n);var e=this;return e.__filtered__&&(n>0||t<0)?new Be(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),void 0!==t&&(e=(t=eo(t))<0?e.dropRight(-t):e.take(t-n)),e)},Be.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Be.prototype.toArray=function(){return this.take(4294967295)},cr(Be.prototype,(function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),u=xe[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);u&&(xe.prototype[t]=function(){var t=this.__wrapped__,a=r?[1]:arguments,o=t instanceof Be,c=a[0],l=o||Ba(t),f=function(n){var t=u.apply(xe,pt([n],a));return r&&s?t[0]:t};l&&e&&"function"==typeof c&&1!=c.length&&(o=l=!1);var s=this.__chain__,v=!!this.__actions__.length,h=i&&!s,d=o&&!v;if(!i&&l){t=d?t:new Be(this);var p=n.apply(t,a);return p.__actions__.push({func:ta,args:[f],thisArg:void 0}),new Ne(p,s)}return h&&d?n.apply(this,a):(p=this.thru(f),h?r?p.value()[0]:p.value():p)})})),ct(["pop","push","shift","sort","splice","unshift"],(function(n){var t=yn[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);xe.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var u=this.value();return t.apply(Ba(u)?u:[],n)}return this[e]((function(e){return t.apply(Ba(e)?e:[],n)}))}})),cr(Be.prototype,(function(n,t){var e=xe[t];if(e){var r=e.name+"";Cn.call(me,r)||(me[r]=[]),me[r].push({name:t,func:e})}})),me[xu(void 0,2).name]=[{name:"wrapper",func:void 0}],Be.prototype.clone=function(){var n=new Be(this.__wrapped__);return n.__actions__=gu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=gu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=gu(this.__views__),n},Be.prototype.reverse=function(){if(this.__filtered__){var n=new Be(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Be.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Ba(n),r=t<0,u=e?n.length:0,i=function(n,t,e){var r=-1,u=e.length;for(;++r=this.__values__.length;return{done:n,value:n?void 0:this.__values__[this.__index__++]}},xe.prototype.plant=function(n){for(var t,e=this;e instanceof Oe;){var r=Ai(e);r.__index__=0,r.__values__=void 0,t?u.__wrapped__=r:t=r;var u=r;e=e.__wrapped__}return u.__wrapped__=n,t},xe.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Be){var t=n;return this.__actions__.length&&(t=new Be(this)),(t=t.reverse()).__actions__.push({func:ta,args:[Pi],thisArg:void 0}),new Ne(t,this.__chain__)}return this.thru(Pi)},xe.prototype.toJSON=xe.prototype.valueOf=xe.prototype.value=function(){return eu(this.__wrapped__,this.__actions__)},xe.prototype.first=xe.prototype.head,Xn&&(xe.prototype[Xn]=function(){return this}),xe}();Kn._=Ht,void 0===(u=function(){return Ht}.call(t,e,t,r))||(r.exports=u)}).call(this)}).call(this,e(76),e(448)(n))},446:function(n,t,e){"use strict";var r=e(0),u=Object(r.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=u},447:function(n,t,e){"use strict";e.d(t,"a",(function(){return i}));e(77),e(465),e(431),e(78);var r=e(467),u=e.n(r);function i(n,t){var e=new u.a;return n.map((function(n){var r=n;return"string"==typeof n&&(r={label:n,permalink:"/blog/tags/"+e.slug(n)}),function(n,t){var e=n.label.split(": ",2),r=e[0],u=e[1],i="primary";switch(t){case"blog":case"guides":i=function(n){switch(n){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(r)}return{category:r,count:n.count,label:n.label,permalink:n.permalink,style:i,value:u}}(r,t)}))}},448:function(n,t){n.exports=function(n){return n.webpackPolyfill||(n.deprecate=function(){},n.paths=[],n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),n.webpackPolyfill=1),n}},457:function(n,t,e){var r=e(30),u=e(54),i=e(27),a=e(26),o=e(458);n.exports=function(n,t){var e=1==n,c=2==n,l=3==n,f=4==n,s=6==n,v=5==n||s,h=t||o;return function(t,o,d){for(var p,D,g=i(t),_=u(g),m=r(o,d,3),y=a(_.length),b=0,E=e?h(t,y):c?h(t,0):void 0;y>b;b++)if((v||b in _)&&(D=m(p=_[b],b,g),n))if(e)E[b]=D;else if(D)switch(n){case 3:return!0;case 5:return p;case 6:return b;case 2:E.push(p)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(n,t,e){var r=e(459);n.exports=function(n,t){return new(r(n))(t)}},459:function(n,t,e){var r=e(13),u=e(460),i=e(2)("species");n.exports=function(n){var t;return u(n)&&("function"!=typeof(t=n.constructor)||t!==Array&&!u(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(n,t,e){var r=e(23);n.exports=Array.isArray||function(n){return"Array"==r(n)}},466:function(n,t,e){"use strict";var r=e(0),u=e.n(r),i=e(422),a=e(415),o=e.n(a);t.a=function(n){var t=n.count,e=n.label,r=n.permalink,a=n.style,c=n.value,l=n.valueOnly;return u.a.createElement(i.a,{to:r+"/",className:o()("badge","badge--rounded","badge--"+a)},l?c:e,t&&u.a.createElement(u.a.Fragment,null," (",t,")"))}},467:function(n,t,e){var r=e(468);n.exports=o;var u=Object.hasOwnProperty,i=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function c(n,t){return"string"!=typeof n?"":(t||(n=n.toLowerCase()),n.trim().replace(a,"").replace(r(),"").replace(i,"-"))}o.prototype.slug=function(n,t){for(var e=c(n,!0===t),r=e;u.call(this.occurrences,e);)this.occurrences[r]++,e=r+"-"+this.occurrences[r];return this.occurrences[e]=0,e},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=c},468:function(n,t){n.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},472:function(n,t,e){"use strict";var r=e(1),u=e(0),i=e.n(u),a=(e(422),e(466)),o=e(415),c=e.n(o),l=e(447),f=e(141),s=e.n(f);t.a=function(n){var t,e=n.block,u=n.colorProfile,o=n.tags,f=n.valuesOnly,v=Object(l.a)(o,u);return i.a.createElement("div",{className:c()(s.a.tags,(t={},t[s.a.tagsBlock]=e,t))},v.map((function(n,t){return i.a.createElement(a.a,Object(r.a)({key:t,valueOnly:f},n))})))}},508:function(n,t,e){"use strict";e(29),e(22),e(21),e(52);var r=e(0),u=e.n(r),i=(e(420),e(431),e(422)),a=e(432),o=e.n(a),c=e(472),l=e(447),f=e(428),s=e(433);e(142);var v=function(n){var t=n.frontMatter,e=n.metadata,r=(n.isGuidePage,Object(s.a)().isDarkTheme),a=e.categories,v=(e.description,e.permalink),h=(e.readingTime,e.seriesPosition),d=e.tags,p=(t.author_github,t.cover_label),D=(t.last_modified_on,t.title),g=Object(l.a)(d,"guides"),_=g.find((function(n){return"domain"==n.category})),m=_?_.value:"default",y=g.find((function(n){return"language"==n.category})),b=y?y.value:null,E=g.find((function(n){return"framework"==n.category})),w=E?E.value:null,F=g.find((function(n){return"technology"==n.category})),C=F?F.value:null,k=g.find((function(n){return"cloud_provider"==n.category})),A=k?k.value:null,x=g.find((function(n){return"platform"==n.category})),j=x?x.value:null,O=g.find((function(n){return"source"==n.category})),N=O?O.value:null,B=g.find((function(n){return"sink"==n.category})),I=B?B.value:null,S=Object(f.a)().siteConfig.customFields.metadata,L=S.installation,R=S.sources,T=S.sinks,z=S.languages,W=S.frameworks,M=S.technologies,U=S.cloud_providers,P=L.platforms,$=j&&P[j],q=N&&R[N],V=I&&T[I],G=b&&z.find((function(n){return n.name===b})),Z=w&&W.find((function(n){return n.name===w})),K=C&&M.find((function(n){return n.name===C})),H=A&&U.find((function(n){return n.name===A})),Q=null!==($||q),J=null!=V,Y=null;Z?Y=r?Z.dark_logo_path:Z.logo_path:K?Y=r?K.dark_logo_path:K.logo_path:H?Y=r?H.dark_logo_path:H.logo_path:G?Y=r?G.dark_logo_path:G.logo_path:$?Y=$.logo_path:q&&(Y=q.logo_path);var X=null;return V&&(X=V.logo_path),u.a.createElement(i.a,{to:v+"/",className:"guide-item"},u.a.createElement("article",null,u.a.createElement("div",{className:"domain-bg domain-bg--"+m+" domain-bg--hover"},u.a.createElement("header",null,u.a.createElement("div",{className:"category"},a[0].name),u.a.createElement("h2",{title:D},h&&h+". ",p||D)),u.a.createElement("footer",null,Y&&u.a.createElement(o.a,{src:Y,className:"logo"}),!Y&&Q&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),X&&u.a.createElement(o.a,{src:X,className:"logo"}),!X&&J&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),!Y&&!X&&!Q&&!J&&u.a.createElement(c.a,{colorProfile:"guides",tags:d}),u.a.createElement("div",{className:"action"},"read now")))))},h=e(442),d=e(443),p=e.n(d),D=e(415),g=e.n(D);e(143);function _(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered,a=p()(e).map((function(n){return n.content.metadata.categories[t-1]})).uniqBy("permalink").sortBy("title").keyBy("permalink").value(),o=p.a.groupBy(e,(function(n){return n.content.metadata.categories[t-1].permalink})),c=Object(h.a)("h"+(t+1));return Object.keys(a).map((function(n,t){var e=o[n],l=a[n];return u.a.createElement("section",{key:t},u.a.createElement(c,{id:n},l.title),l.description&&u.a.createElement("div",{className:"sub-title"},l.description),u.a.createElement(m,{items:e,large:r,staggered:i}))}))}function m(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered;if(t)return u.a.createElement(_,{groupLevel:t,items:e});var a,o=(a=e,p.a.sortBy(a,["content.metadata.seriesPosition",function(n){return n.content.metadata.coverLabel.toLowerCase()}]));return u.a.createElement("div",{className:"guides"},u.a.createElement("div",{className:g()("guide-items",{"guide-items--l":r,"guide-items--staggered":i})},o.map((function(n){var t=n.content;return u.a.createElement(v,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:t.metadata.truncated},u.a.createElement(t,null))}))))}t.a=m}}]); \ No newline at end of file diff --git a/1be78505.b6b716e6.js b/1be78505.b6b716e6.js new file mode 100644 index 0000000000..5167a7f390 --- /dev/null +++ b/1be78505.b6b716e6.js @@ -0,0 +1,2 @@ +/*! For license information please see 1be78505.b6b716e6.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33,262],{412:function(e,t,n){"use strict";n.r(t);n(29),n(22),n(21),n(52),n(431);var a=n(0),r=n.n(a),i=n(417),o=n(415),l=n.n(o),s=n(428),c=n(67),u=n(437),d=n(1),p=(n(78),n(438),n(439),n(422)),m=n(432),f=n.n(m);n(430);var b=n(444),g=n(445),h=n(182),y=n.n(h);n(183);function v(e){var t=e.item,n=e.level,i=e.onItemClick,o=e.collapsible,s=t.items,c=t.href,u=t.label,m=t.type,f=Object(a.useState)(t.collapsed),b=f[0],g=f[1],h=Object(a.useState)(null),y=h[0],k=h[1];switch(t.collapsed!==y&&(k(t.collapsed),g(t.collapsed)),m){case"category":if(0==s.length)return!1;if(1==n)return r.a.createElement("li",{className:l()("menu__list-item"),key:u},r.a.createElement("div",{className:"title"},u),r.a.createElement("ul",{className:"menu__list"},s.map((function(e){return r.a.createElement(v,{key:e.label,item:e,level:n+1,onItemClick:i,collapsible:o})}))));var w=s[0].href;return r.a.createElement("li",{className:l()("menu__list-item",{"menu__list-item--collapsed":b}),key:u},r.a.createElement(p.a,{activeClassName:"menu__link--active",className:l()("menu__link",{"menu__link--sublist":o}),to:w+"/",onClick:o&&"#!"==w?function(){return g(!b)}:void 0},u),r.a.createElement("ul",{className:"menu__list"},s.map((function(e){return r.a.createElement(v,{key:e.label,item:e,level:n+1,onItemClick:i,collapsible:o})}))));case"link":default:var E=[],_=u;if(u.includes("|")){var x=u.split("|",2);_=x[0],E=JSON.parse(x[1])}var O="hidden"==_;return r.a.createElement("li",{className:l()("menu__list-item",O&&"menu__list-item-hidden"),key:u},r.a.createElement(p.a,Object(d.a)({className:"menu__link",to:c+"/"},/^\/(?!\/)/.test(c)?{activeClassName:"menu__link--active",exact:!0,onClick:i}:{target:"_blank",rel:"noreferrer noopener"}),_,E.length>0&&r.a.createElement("span",{className:"badges"},E.includes("log")&&r.a.createElement("span",{className:"badge badge--secondary",title:"This component works with log events."},"L"),E.includes("metric")&&r.a.createElement("span",{className:"badge badge--secondary",title:"This component works with metric events."},"M"))))}}var k=function(e){var t=Object(a.useState)(!1),n=t[0],i=t[1],o=Object(s.a)(),c=o.siteConfig,u=(c=void 0===c?{}:c).themeConfig.navbar,m=(u=void 0===u?{}:u).title,h=o.isClient,k=Object(g.a)(),w=k.logoLink,E=k.logoLinkProps,_=k.logoImageUrl,x=k.logoAlt,O=e.docsSidebars,j=e.path,S=e.sidebar,N=e.sidebarCollapsible;if(Object(b.a)(n),!S)return null;var T=O[S];if(!T)throw new Error('Cannot find the sidebar "'+S+'" in the sidebar config!');return N&&T.forEach((function(e){return function e(t,n){var a=t.items,r=t.href;switch(t.type){case"category":var i=a.map((function(t){return e(t,n)})).filter((function(e){return e})).length>0;return t.collapsed=!i,i;case"link":default:return r===n}}(e,j)})),r.a.createElement("div",{className:l()("docs-sidebar",y.a.sidebar)},r.a.createElement(p.a,Object(d.a)({className:y.a.sidebarLogo,style:{maxWidth:"130px"},to:w},E),null!=_&&r.a.createElement(f.a,{key:h,src:_,alt:x}),null!=m&&r.a.createElement("strong",null,m)),r.a.createElement("div",{className:l()("menu","menu--responsive",y.a.menu,{"menu--show":n})},r.a.createElement("button",{"aria-label":n?"Close Menu":"Open Menu",className:"button button--secondary button--sm menu__button",type:"button",onClick:function(){i(!n)}},n?r.a.createElement("span",{className:l()(y.a.sidebarMenuIcon,y.a.sidebarMenuCloseIcon)},"\xd7"):r.a.createElement("svg",{className:y.a.sidebarMenuIcon,xmlns:"http://www.w3.org/2000/svg",height:24,width:24,viewBox:"0 0 32 32",role:"img",focusable:"false"},r.a.createElement("title",null,"Menu"),r.a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))),r.a.createElement("ul",{className:"menu__list"},T.map((function(e){return e.items.length>0&&r.a.createElement(v,{key:e.label,item:e,level:1,onItemClick:function(){i(!1)},collapsible:N})})))))},w=n(521),E=n(556),_=n(464),x=n(184),O=n.n(x);t.default=function(e){var t=e.route,n=e.docsMetadata,a=e.location,o=t.routes.find((function(e){return Object(_.b)(a.pathname,e)}))||{},d=n.permalinkToSidebar,p=n.docsSidebars,m=n.version,f=d[o.path],b=Object(s.a)(),g=b.siteConfig,h=(g=void 0===g?{}:g).themeConfig,y=void 0===h?{}:h,v=b.isClient,x=y.sidebarCollapsible,j=void 0===x||x;return 0===Object.keys(o).length?r.a.createElement(E.default,e):r.a.createElement(u.a,{version:m,key:v},r.a.createElement("div",{className:l()(O.a.container,"container","container--l")},f&&r.a.createElement("div",{className:l()(O.a.sidebar)},r.a.createElement(k,{docsSidebars:p,path:o.path,sidebar:f,sidebarCollapsible:j})),r.a.createElement("main",{className:O.a.main},r.a.createElement(i.a,{components:w.a},Object(c.a)(t.routes)))))}},415:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=r.a.createContext({}),u=function(e){var t=r.a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l({},t,{},e)),n},d=function(e){var t=u(e.components);return r.a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,o=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(o,".").concat(m)]||d[m]||p[m]||i;return n?r.a.createElement(f,l({ref:t},c,{components:n})):r.a.createElement(f,l({ref:t},c))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var c=2;c1?arguments[1]:void 0)}}),n(74)("find")},437:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),i=n(450),o=n(435),l=n(1),s=(n(438),n(439),n(451),n(422)),c=n(452),u=n(432),d=n.n(u),p=n(453),m=n.n(p),f=n(428),b=n(415),g=n.n(b),h=n(135),y=n.n(h),v=function(){return r.a.createElement("span",{className:g()(y.a.toggle,y.a.moon)})},k=function(){return r.a.createElement("span",{className:g()(y.a.toggle,y.a.sun)})},w=function(e){var t=Object(f.a)().isClient;return r.a.createElement(m.a,Object(l.a)({disabled:!t,icons:{checked:r.a.createElement(v,null),unchecked:r.a.createElement(k,null)}},e))};function E(){var e=Object(f.a)().siteConfig,t=(void 0===e?{}:e).customFields.metadata.latest_post,n=Date.parse(t.date),a=new Date,r=Math.abs(a-n),i=Math.ceil(r/864e5),o=null;return"undefined"!=typeof window&&(o=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!o||o0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(d.a,{className:"navbar__logo",src:m,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),s.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(R,e))}))):null)}))),(u||o)&&r.a.createElement("div",{className:"text--center"},u&&u.src&&r.a.createElement("div",{className:"margin-bottom--sm"},u.href?r.a.createElement("a",{href:u.href,target:"_blank",rel:"noopener noreferrer",className:I.a.footerLogoLink},r.a.createElement(D,{alt:u.alt,url:p})):r.a.createElement(D,{alt:u.alt,url:p})),r.a.createElement("small",null,o),r.a.createElement("br",null))))},M=n(454),F=n(455),q=n(3);n(138);t.a=function(e){var t=Object(f.a)().siteConfig,n=void 0===t?{}:t,a=n.favicon,l=(n.tagline,n.title),s=n.themeConfig.image,c=n.url,u=e.children,d=e.title,p=e.noFooter,m=e.description,b=e.image,g=e.keywords,h=(e.permalink,e.version),y=d?d+" | "+l:l,v=b||s,k=c+Object(x.a)(v),w=Object(x.a)(a),E=Object(q.h)(),_=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return r.a.createElement(F.a,null,r.a.createElement(M.a,null,r.a.createElement(o.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),y&&r.a.createElement("title",null,y),y&&r.a.createElement("meta",{property:"og:title",content:y}),a&&r.a.createElement("link",{rel:"shortcut icon",href:w}),m&&r.a.createElement("meta",{name:"description",content:m}),m&&r.a.createElement("meta",{property:"og:description",content:m}),h&&r.a.createElement("meta",{name:"docsearch:version",content:h}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),v&&r.a.createElement("meta",{property:"og:image",content:k}),v&&r.a.createElement("meta",{property:"twitter:image",content:k}),v&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+y}),_&&r.a.createElement("meta",{property:"og:url",content:_}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),_&&r.a.createElement("link",{rel:"canonical",href:_})),r.a.createElement(i.a,null),r.a.createElement(A,null),r.a.createElement("div",{className:"main-wrapper"},u),!p&&r.a.createElement($,null)))}},442:function(e,t,n){"use strict";var a=n(9),r=n(0),i=n.n(r),o=n(415),l=n.n(o),s=n(428),c=(n(139),n(140)),u=n.n(c);t.a=function(e){return function(t){var n,r=t.id,o=Object(a.a)(t,["id"]),c=Object(s.a)().siteConfig,d=(c=void 0===c?{}:c).themeConfig,p=(d=void 0===d?{}:d).navbar,m=(p=void 0===p?{}:p).hideOnScroll,f=void 0!==m&&m;return r?i.a.createElement(e,o,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:l()("anchor",(n={},n[u.a.enhancedAnchor]=!f,n)),id:r}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),o.children):i.a.createElement(e,o)}}},446:function(e,t,n){"use strict";var a=n(0),r=Object(a.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},457:function(e,t,n){var a=n(30),r=n(54),i=n(27),o=n(26),l=n(458);e.exports=function(e,t){var n=1==e,s=2==e,c=3==e,u=4==e,d=6==e,p=5==e||d,m=t||l;return function(t,l,f){for(var b,g,h=i(t),y=r(h),v=a(l,f,3),k=o(y.length),w=0,E=n?m(t,k):s?m(t,0):void 0;k>w;w++)if((p||w in y)&&(g=v(b=y[w],w,h),e))if(n)E[w]=g;else if(g)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:E.push(b)}else if(u)return!1;return d?-1:c||u?u:E}}},458:function(e,t,n){var a=n(459);e.exports=function(e,t){return new(a(e))(t)}},459:function(e,t,n){var a=n(13),r=n(460),i=n(2)("species");e.exports=function(e){var t;return r(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!r(t.prototype)||(t=void 0),a(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(e,t,n){var a=n(23);e.exports=Array.isArray||function(e){return"Array"==a(e)}},479:function(e,t,n){"use strict";(function(e){var a=n(1),r=(n(438),n(439),n(78),n(77),n(522),n(0)),i=n.n(r),o=n(523),l=n.n(o),s=n(555),c=n(53),u=n(415),d=n.n(u),p=n(535),m=n.n(p),f=n(524),b=n.n(f),g=n(428),h=n(433),y=n(148),v=n.n(y);(void 0!==e?e:window).Prism=c.a,n(525),n(526),n(527),n(528),n(90),n(529),n(530),n(531),n(532),n(533),n(534);var k=/{([\d,-]+)}/,w=/title=".*"/;t.a=function(e){var t=e.children,n=e.className,o=e.metastring,c=Object(g.a)().siteConfig.themeConfig.prism,u=void 0===c?{}:c,p=Object(r.useState)(!1),f=p[0],y=p[1],E=Object(r.useState)(!1),_=E[0],x=E[1];Object(r.useEffect)((function(){x(!0)}),[]);var O=Object(r.useRef)(null),j=Object(r.useRef)(null),S=[],N="",T=Object(h.a)().isDarkTheme,C=u.theme||m.a,P=u.darkTheme||C,A=T?P:C;if(o&&k.test(o)){var z=o.match(k)[1];S=b.a.parse(z).filter((function(e){return e>0}))}o&&w.test(o)&&(N=o.match(w)[0].split("title=")[1].replace(/"+/g,"")),Object(r.useEffect)((function(){var e;return j.current&&(e=new l.a(j.current,{target:function(){return O.current}})),function(){e&&e.destroy()}}),[j.current,O.current]);var L=n&&n.replace(/language-/,"");!L&&u.defaultLanguage&&(L=u.defaultLanguage);var I=function(){window.getSelection().empty(),y(!0),setTimeout((function(){return y(!1)}),2e3)};return i.a.createElement(s.a,Object(a.a)({},s.b,{key:_,theme:A,code:t.trim(),language:L}),(function(e){var t,n,r=e.className,o=e.style,l=e.tokens,s=e.getLineProps,c=e.getTokenProps;return i.a.createElement(i.a.Fragment,null,N&&i.a.createElement("div",{style:o,className:v.a.codeBlockTitle},N),i.a.createElement("div",{className:v.a.codeBlockContent},i.a.createElement("button",{ref:j,type:"button","aria-label":"Copy code to clipboard",className:d()(v.a.copyButton,(t={},t[v.a.copyButtonWithTitle]=N,t)),onClick:I},f?"Copied":"Copy"),i.a.createElement("pre",{className:d()(r,v.a.codeBlock,(n={},n[v.a.codeBlockWithTitle]=N,n))},i.a.createElement("div",{ref:O,className:v.a.codeBlockLines,style:o},l.map((function(e,t){1===e.length&&""===e[0].content&&(e[0].content="\n");var n=s({line:e,key:t});return S.includes(t+1)&&(n.className=n.className+" docusaurus-highlight-code-line"),i.a.createElement("div",Object(a.a)({key:t},n),e.map((function(e,t){return i.a.createElement("span",Object(a.a)({key:t},c({token:e,key:t})))})))}))))))}))}}).call(this,n(76))},521:function(e,t,n){"use strict";var a=n(1),r=n(0),i=n.n(r),o=n(422),l=n(479),s=n(442),c=n(149),u=n.n(c);t.a={code:function(e){var t=e.children;return"string"==typeof t?i.a.createElement(l.a,e):t},a:function(e){return/\.[^./]+$/.test(e.href)?i.a.createElement("a",e):i.a.createElement(o.a,e)},pre:function(e){return i.a.createElement("div",Object(a.a)({className:u.a.mdxCodeBlock},e))},h1:Object(s.a)("h1"),h2:Object(s.a)("h2"),h3:Object(s.a)("h3"),h4:Object(s.a)("h4"),h5:Object(s.a)("h5"),h6:Object(s.a)("h6")}},522:function(e,t,n){"use strict";var a=n(8),r=n(26),i=n(60),o=n(55);n(56)("match",1,(function(e,t,n,l){return[function(n){var a=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,a):new RegExp(n)[t](String(a))},function(e){var t=l(n,e,this);if(t.done)return t.value;var s=a(e),c=String(this);if(!s.global)return o(s,c);var u=s.unicode;s.lastIndex=0;for(var d,p=[],m=0;null!==(d=o(s,c));){var f=String(d[0]);p[m]=f,""===f&&(s.lastIndex=i(c,r(s.lastIndex),u)),m++}return 0===m?null:p}]}))},523:function(e,t,n){var a;a=function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var a=window.getSelection(),r=document.createRange();r.selectNodeContents(e),a.removeAllRanges(),a.addRange(r),t=a.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var a=this.e||(this.e={});return(a[e]||(a[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var a=this;function r(){a.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),a=0,r=n.length;a0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=r()(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=r()(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}(),s=n(1),c=n.n(s),u=n(2),d=n.n(u),p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===p(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=d()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return b("action",e)}},{key:"defaultTarget",value:function(e){var t=b("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return b("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}]),t}(c.a);function b(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}t.default=f}]).default},e.exports=a()},524:function(e,t){e.exports.parse=function(e){var t=e.split(",").map((function(e){return function(e){if(/^-?\d+$/.test(e))return parseInt(e,10);var t;if(t=e.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){var n=t[1],a=t[2],r=t[3];if(n&&r){var i=[],o=(n=parseInt(n))<(r=parseInt(r))?1:-1;"-"!=a&&".."!=a&&"\u2025"!=a||(r+=o);for(var l=n;l!=r;l+=o)i.push(l);return i}}return[]}(e)}));return 0===t.length?[]:1===t.length?Array.isArray(t[0])?t[0]:t:t.reduce((function(e,t){return Array.isArray(e)||(e=[e]),Array.isArray(t)||(t=[t]),e.concat(t)}))}},525:function(e,t){!function(e){function t(e){return RegExp("(^(?:"+e+"):[ \t]*(?![ \t]))[^]+","i")}e.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:e.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:t(/Content-Security-Policy/.source),lookbehind:!0,alias:["csp","languages-csp"],inside:e.languages.csp},{pattern:t(/Public-Key-Pins(?:-Report-Only)?/.source),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:e.languages.hpkp},{pattern:t(/Strict-Transport-Security/.source),lookbehind:!0,alias:["hsts","languages-hsts"],inside:e.languages.hsts},{pattern:t(/[^:]+/.source),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var n,a=e.languages,r={"application/javascript":a.javascript,"application/json":a.json||a.javascript,"application/xml":a.xml,"text/xml":a.xml,"text/html":a.html,"text/css":a.css,"text/plain":a.plain},i={"application/json":!0,"application/xml":!0};function o(e){var t=e.replace(/^[a-z]+\//,"");return"(?:"+e+"|"+("\\w+/(?:[\\w.-]+\\+)+"+t+"(?![+\\w.-])")+")"}for(var l in r)if(r[l]){n=n||{};var s=i[l]?o(l):l;n[l.replace(/\//g,"-")]={pattern:RegExp("("+/content-type:\s*/.source+s+/(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source+")"+/[^ \t\w-][\s\S]*/.source,"i"),lookbehind:!0,inside:r[l]}}n&&e.languages.insertBefore("http","header",n)}(Prism)},526:function(e,t){Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},527:function(e,t){!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},528:function(e,t){!function(e){var t=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:t}},builtin:t,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism)},529:function(e,t){!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},530:function(e,t){!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(Prism)},531:function(e,t){!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(n+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},532:function(e,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},533:function(e,t){!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:r,punctuation:i};var o={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:o}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:o}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:r,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},534:function(e,t){!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function o(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return"(?:"+r+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:o(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:o(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:o(i),lookbehind:!0,greedy:!0},number:{pattern:o(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},535:function(e,t){e.exports={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]}},555:function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var a=n(53),r={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","at-rule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},i=n(0),o={Prism:a.a,theme:r};function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return(s=Object.assign||function(e){for(var t=1;t0&&e[n-1]===t?e:e.concat(t)},p=function(e,t){var n=e.plain,a=Object.create(null),r=e.styles.reduce((function(e,n){var a=n.languages,r=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=s({},e[t],r);e[t]=n})),e}),a);return r.root=n,r.plain=s({},n,{backgroundColor:null}),r};function m(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}var f=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),l(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?p(e.theme,e.language):void 0;return t.themeDict=n})),l(this,"getLineProps",(function(e){var n=e.key,a=e.className,r=e.style,i=s({},m(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(i.style=o.plain),void 0!==r&&(i.style=void 0!==i.style?s({},i.style,r):r),void 0!==n&&(i.key=n),a&&(i.className+=" "+a),i})),l(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,r=n.length,i=t.getThemeDict(t.props);if(void 0!==i){if(1===r&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===r&&!a)return i[n[0]];var o=a?{display:"inline-block"}:{},l=n.map((function(e){return i[e]}));return Object.assign.apply(Object,[o].concat(l))}})),l(this,"getTokenProps",(function(e){var n=e.key,a=e.className,r=e.style,i=e.token,o=s({},m(e,["key","className","style","token"]),{className:"token "+i.types.join(" "),children:i.content,style:t.getStyleForToken(i),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?s({},o.style,r):r),void 0!==n&&(o.key=n),a&&(o.className+=" "+a),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,r=e.children,i=this.getThemeDict(this.props),o=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],i=0,o=0,l=[],s=[l];o>-1;){for(;(i=a[o]++)0?m:["plain"],p=f):(m=d(m,f.type),f.alias&&(m=d(m,f.alias)),p=f.content),"string"==typeof p){var b=p.split(c),g=b.length;l.push({types:m,content:b[0]});for(var h=1;h0&&r.a.createElement("span",{className:"badges"},E.includes("log")&&r.a.createElement("span",{className:"badge badge--secondary",title:"This component works with log events."},"L"),E.includes("metric")&&r.a.createElement("span",{className:"badge badge--secondary",title:"This component works with metric events."},"M"))))}}var k=function(e){var t=Object(a.useState)(!1),n=t[0],i=t[1],o=Object(s.a)(),c=o.siteConfig,u=(c=void 0===c?{}:c).themeConfig.navbar,m=(u=void 0===u?{}:u).title,h=o.isClient,k=Object(g.a)(),w=k.logoLink,E=k.logoLinkProps,_=k.logoImageUrl,x=k.logoAlt,O=e.docsSidebars,S=e.path,j=e.sidebar,N=e.sidebarCollapsible;if(Object(b.a)(n),!j)return null;var T=O[j];if(!T)throw new Error('Cannot find the sidebar "'+j+'" in the sidebar config!');return N&&T.forEach((function(e){return function e(t,n){var a=t.items,r=t.href;switch(t.type){case"category":var i=a.map((function(t){return e(t,n)})).filter((function(e){return e})).length>0;return t.collapsed=!i,i;case"link":default:return r===n}}(e,S)})),r.a.createElement("div",{className:l()("docs-sidebar",y.a.sidebar)},r.a.createElement(p.a,Object(d.a)({className:y.a.sidebarLogo,style:{maxWidth:"130px"},to:w},E),null!=_&&r.a.createElement(f.a,{key:h,src:_,alt:x}),null!=m&&r.a.createElement("strong",null,m)),r.a.createElement("div",{className:l()("menu","menu--responsive",y.a.menu,{"menu--show":n})},r.a.createElement("button",{"aria-label":n?"Close Menu":"Open Menu",className:"button button--secondary button--sm menu__button",type:"button",onClick:function(){i(!n)}},n?r.a.createElement("span",{className:l()(y.a.sidebarMenuIcon,y.a.sidebarMenuCloseIcon)},"\xd7"):r.a.createElement("svg",{className:y.a.sidebarMenuIcon,xmlns:"http://www.w3.org/2000/svg",height:24,width:24,viewBox:"0 0 32 32",role:"img",focusable:"false"},r.a.createElement("title",null,"Menu"),r.a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))),r.a.createElement("ul",{className:"menu__list"},T.map((function(e){return e.items.length>0&&r.a.createElement(v,{key:e.label,item:e,level:1,onItemClick:function(){i(!1)},collapsible:N})})))))},w=n(521),E=n(556),_=n(464),x=n(184),O=n.n(x);t.default=function(e){var t=e.route,n=e.docsMetadata,a=e.location,o=t.routes.find((function(e){return Object(_.b)(a.pathname,e)}))||{},d=n.permalinkToSidebar,p=n.docsSidebars,m=n.version,f=d[o.path],b=Object(s.a)(),g=b.siteConfig,h=(g=void 0===g?{}:g).themeConfig,y=void 0===h?{}:h,v=b.isClient,x=y.sidebarCollapsible,S=void 0===x||x;return 0===Object.keys(o).length?r.a.createElement(E.default,e):r.a.createElement(u.a,{version:m,key:v},r.a.createElement("div",{className:l()(O.a.container,"container","container--l")},f&&r.a.createElement("div",{className:l()(O.a.sidebar)},r.a.createElement(k,{docsSidebars:p,path:o.path,sidebar:f,sidebarCollapsible:S})),r.a.createElement("main",{className:O.a.main},r.a.createElement(i.a,{components:w.a},Object(c.a)(t.routes)))))}},415:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=r.a.createContext({}),u=function(e){var t=r.a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l({},t,{},e)),n},d=function(e){var t=u(e.components);return r.a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},m=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,o=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(o,".").concat(m)]||d[m]||p[m]||i;return n?r.a.createElement(f,l({ref:t},c,{components:n})):r.a.createElement(f,l({ref:t},c))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var c=2;c1?arguments[1]:void 0)}}),n(74)("find")},437:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),i=n(450),o=n(435),l=n(1),s=(n(438),n(439),n(451),n(422)),c=n(452),u=n(432),d=n.n(u),p=n(453),m=n.n(p),f=n(428),b=n(415),g=n.n(b),h=n(135),y=n.n(h),v=function(){return r.a.createElement("span",{className:g()(y.a.toggle,y.a.moon)})},k=function(){return r.a.createElement("span",{className:g()(y.a.toggle,y.a.sun)})},w=function(e){var t=Object(f.a)().isClient;return r.a.createElement(m.a,Object(l.a)({disabled:!t,icons:{checked:r.a.createElement(v,null),unchecked:r.a.createElement(k,null)}},e))};function E(){var e=Object(f.a)().siteConfig,t=(void 0===e?{}:e).customFields.metadata.latest_post,n=Date.parse(t.date),a=new Date,r=Math.abs(a-n),i=Math.ceil(r/864e5),o=null;return"undefined"!=typeof window&&(o=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!o||o0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(d.a,{className:"navbar__logo",src:m,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),s.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(R,e))}))):null)}))),(u||o)&&r.a.createElement("div",{className:"text--center"},u&&u.src&&r.a.createElement("div",{className:"margin-bottom--sm"},u.href?r.a.createElement("a",{href:u.href,target:"_blank",rel:"noopener noreferrer",className:I.a.footerLogoLink},r.a.createElement($,{alt:u.alt,url:p})):r.a.createElement($,{alt:u.alt,url:p})),r.a.createElement("small",null,o),r.a.createElement("br",null))))},M=n(454),F=n(455),q=n(3);n(138);t.a=function(e){var t=Object(f.a)().siteConfig,n=void 0===t?{}:t,a=n.favicon,l=(n.tagline,n.title),s=n.themeConfig.image,c=n.url,u=e.children,d=e.title,p=e.noFooter,m=e.description,b=e.image,g=e.keywords,h=(e.permalink,e.version),y=d?d+" | "+l:l,v=b||s,k=c+Object(x.a)(v),w=Object(x.a)(a),E=Object(q.h)(),_=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return r.a.createElement(F.a,null,r.a.createElement(M.a,null,r.a.createElement(o.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),y&&r.a.createElement("title",null,y),y&&r.a.createElement("meta",{property:"og:title",content:y}),a&&r.a.createElement("link",{rel:"shortcut icon",href:w}),m&&r.a.createElement("meta",{name:"description",content:m}),m&&r.a.createElement("meta",{property:"og:description",content:m}),h&&r.a.createElement("meta",{name:"docsearch:version",content:h}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),v&&r.a.createElement("meta",{property:"og:image",content:k}),v&&r.a.createElement("meta",{property:"twitter:image",content:k}),v&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+y}),_&&r.a.createElement("meta",{property:"og:url",content:_}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),_&&r.a.createElement("link",{rel:"canonical",href:_})),r.a.createElement(i.a,null),r.a.createElement(A,null),r.a.createElement("div",{className:"main-wrapper"},u),!p&&r.a.createElement(D,null)))}},442:function(e,t,n){"use strict";var a=n(9),r=n(0),i=n.n(r),o=n(415),l=n.n(o),s=n(428),c=(n(139),n(140)),u=n.n(c);t.a=function(e){return function(t){var n,r=t.id,o=Object(a.a)(t,["id"]),c=Object(s.a)().siteConfig,d=(c=void 0===c?{}:c).themeConfig,p=(d=void 0===d?{}:d).navbar,m=(p=void 0===p?{}:p).hideOnScroll,f=void 0!==m&&m;return r?i.a.createElement(e,o,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:l()("anchor",(n={},n[u.a.enhancedAnchor]=!f,n)),id:r}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),o.children):i.a.createElement(e,o)}}},446:function(e,t,n){"use strict";var a=n(0),r=Object(a.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},457:function(e,t,n){var a=n(30),r=n(54),i=n(27),o=n(26),l=n(458);e.exports=function(e,t){var n=1==e,s=2==e,c=3==e,u=4==e,d=6==e,p=5==e||d,m=t||l;return function(t,l,f){for(var b,g,h=i(t),y=r(h),v=a(l,f,3),k=o(y.length),w=0,E=n?m(t,k):s?m(t,0):void 0;k>w;w++)if((p||w in y)&&(g=v(b=y[w],w,h),e))if(n)E[w]=g;else if(g)switch(e){case 3:return!0;case 5:return b;case 6:return w;case 2:E.push(b)}else if(u)return!1;return d?-1:c||u?u:E}}},458:function(e,t,n){var a=n(459);e.exports=function(e,t){return new(a(e))(t)}},459:function(e,t,n){var a=n(13),r=n(460),i=n(2)("species");e.exports=function(e){var t;return r(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!r(t.prototype)||(t=void 0),a(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(e,t,n){var a=n(23);e.exports=Array.isArray||function(e){return"Array"==a(e)}},479:function(e,t,n){"use strict";(function(e){var a=n(1),r=(n(438),n(439),n(78),n(77),n(522),n(0)),i=n.n(r),o=n(523),l=n.n(o),s=n(555),c=n(53),u=n(415),d=n.n(u),p=n(535),m=n.n(p),f=n(524),b=n.n(f),g=n(428),h=n(433),y=n(148),v=n.n(y);(void 0!==e?e:window).Prism=c.a,n(525),n(526),n(527),n(528),n(90),n(529),n(530),n(531),n(532),n(533),n(534);var k=/{([\d,-]+)}/,w=/title=".*"/;t.a=function(e){var t=e.children,n=e.className,o=e.metastring,c=Object(g.a)().siteConfig.themeConfig.prism,u=void 0===c?{}:c,p=Object(r.useState)(!1),f=p[0],y=p[1],E=Object(r.useState)(!1),_=E[0],x=E[1];Object(r.useEffect)((function(){x(!0)}),[]);var O=Object(r.useRef)(null),S=Object(r.useRef)(null),j=[],N="",T=Object(h.a)().isDarkTheme,C=u.theme||m.a,P=u.darkTheme||C,A=T?P:C;if(o&&k.test(o)){var z=o.match(k)[1];j=b.a.parse(z).filter((function(e){return e>0}))}o&&w.test(o)&&(N=o.match(w)[0].split("title=")[1].replace(/"+/g,"")),Object(r.useEffect)((function(){var e;return S.current&&(e=new l.a(S.current,{target:function(){return O.current}})),function(){e&&e.destroy()}}),[S.current,O.current]);var L=n&&n.replace(/language-/,"");!L&&u.defaultLanguage&&(L=u.defaultLanguage);var I=function(){window.getSelection().empty(),y(!0),setTimeout((function(){return y(!1)}),2e3)};return i.a.createElement(s.a,Object(a.a)({},s.b,{key:_,theme:A,code:t.trim(),language:L}),(function(e){var t,n,r=e.className,o=e.style,l=e.tokens,s=e.getLineProps,c=e.getTokenProps;return i.a.createElement(i.a.Fragment,null,N&&i.a.createElement("div",{style:o,className:v.a.codeBlockTitle},N),i.a.createElement("div",{className:v.a.codeBlockContent},i.a.createElement("button",{ref:S,type:"button","aria-label":"Copy code to clipboard",className:d()(v.a.copyButton,(t={},t[v.a.copyButtonWithTitle]=N,t)),onClick:I},f?"Copied":"Copy"),i.a.createElement("pre",{className:d()(r,v.a.codeBlock,(n={},n[v.a.codeBlockWithTitle]=N,n))},i.a.createElement("div",{ref:O,className:v.a.codeBlockLines,style:o},l.map((function(e,t){1===e.length&&""===e[0].content&&(e[0].content="\n");var n=s({line:e,key:t});return j.includes(t+1)&&(n.className=n.className+" docusaurus-highlight-code-line"),i.a.createElement("div",Object(a.a)({key:t},n),e.map((function(e,t){return i.a.createElement("span",Object(a.a)({key:t},c({token:e,key:t})))})))}))))))}))}}).call(this,n(76))},521:function(e,t,n){"use strict";var a=n(1),r=n(0),i=n.n(r),o=n(422),l=n(479),s=n(442),c=n(149),u=n.n(c);t.a={code:function(e){var t=e.children;return"string"==typeof t?i.a.createElement(l.a,e):t},a:function(e){return/\.[^./]+$/.test(e.href)?i.a.createElement("a",e):i.a.createElement(o.a,e)},pre:function(e){return i.a.createElement("div",Object(a.a)({className:u.a.mdxCodeBlock},e))},h1:Object(s.a)("h1"),h2:Object(s.a)("h2"),h3:Object(s.a)("h3"),h4:Object(s.a)("h4"),h5:Object(s.a)("h5"),h6:Object(s.a)("h6")}},522:function(e,t,n){"use strict";var a=n(8),r=n(26),i=n(60),o=n(55);n(56)("match",1,(function(e,t,n,l){return[function(n){var a=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,a):new RegExp(n)[t](String(a))},function(e){var t=l(n,e,this);if(t.done)return t.value;var s=a(e),c=String(this);if(!s.global)return o(s,c);var u=s.unicode;s.lastIndex=0;for(var d,p=[],m=0;null!==(d=o(s,c));){var f=String(d[0]);p[m]=f,""===f&&(s.lastIndex=i(c,r(s.lastIndex),u)),m++}return 0===m?null:p}]}))},523:function(e,t,n){var a;a=function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var a=window.getSelection(),r=document.createRange();r.selectNodeContents(e),a.removeAllRanges(),a.addRange(r),t=a.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var a=this.e||(this.e={});return(a[e]||(a[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var a=this;function r(){a.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),a=0,r=n.length;a0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=r()(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=r()(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}(),s=n(1),c=n.n(s),u=n(2),d=n.n(u),p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===p(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=d()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return b("action",e)}},{key:"defaultTarget",value:function(e){var t=b("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return b("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}]),t}(c.a);function b(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}t.default=f}]).default},e.exports=a()},524:function(e,t){e.exports.parse=function(e){var t=e.split(",").map((function(e){return function(e){if(/^-?\d+$/.test(e))return parseInt(e,10);var t;if(t=e.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){var n=t[1],a=t[2],r=t[3];if(n&&r){var i=[],o=(n=parseInt(n))<(r=parseInt(r))?1:-1;"-"!=a&&".."!=a&&"\u2025"!=a||(r+=o);for(var l=n;l!=r;l+=o)i.push(l);return i}}return[]}(e)}));return 0===t.length?[]:1===t.length?Array.isArray(t[0])?t[0]:t:t.reduce((function(e,t){return Array.isArray(e)||(e=[e]),Array.isArray(t)||(t=[t]),e.concat(t)}))}},525:function(e,t){!function(e){function t(e){return RegExp("(^(?:"+e+"):[ \t]*(?![ \t]))[^]+","i")}e.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:e.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:t(/Content-Security-Policy/.source),lookbehind:!0,alias:["csp","languages-csp"],inside:e.languages.csp},{pattern:t(/Public-Key-Pins(?:-Report-Only)?/.source),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:e.languages.hpkp},{pattern:t(/Strict-Transport-Security/.source),lookbehind:!0,alias:["hsts","languages-hsts"],inside:e.languages.hsts},{pattern:t(/[^:]+/.source),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var n,a=e.languages,r={"application/javascript":a.javascript,"application/json":a.json||a.javascript,"application/xml":a.xml,"text/xml":a.xml,"text/html":a.html,"text/css":a.css,"text/plain":a.plain},i={"application/json":!0,"application/xml":!0};function o(e){var t=e.replace(/^[a-z]+\//,"");return"(?:"+e+"|"+("\\w+/(?:[\\w.-]+\\+)+"+t+"(?![+\\w.-])")+")"}for(var l in r)if(r[l]){n=n||{};var s=i[l]?o(l):l;n[l.replace(/\//g,"-")]={pattern:RegExp("("+/content-type:\s*/.source+s+/(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source+")"+/[^ \t\w-][\s\S]*/.source,"i"),lookbehind:!0,inside:r[l]}}n&&e.languages.insertBefore("http","header",n)}(Prism)},526:function(e,t){Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},527:function(e,t){!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},528:function(e,t){!function(e){var t=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:t}},builtin:t,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism)},529:function(e,t){!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},530:function(e,t){!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(Prism)},531:function(e,t){!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(n+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},532:function(e,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},533:function(e,t){!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,i=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:r,punctuation:i};var o={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},l=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:o}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:o}}];e.languages.insertBefore("php","variable",{string:l,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:l,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:r,punctuation:i}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},534:function(e,t){!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,a="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function o(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return a}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return a})).replace(/<>/g,(function(){return"(?:"+r+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:o(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:o(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:o(i),lookbehind:!0,greedy:!0},number:{pattern:o(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},535:function(e,t){e.exports={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]}},555:function(e,t,n){"use strict";n.d(t,"b",(function(){return o}));var a=n(53),r={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","at-rule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},i=n(0),o={Prism:a.a,theme:r};function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(){return(s=Object.assign||function(e){for(var t=1;t0&&e[n-1]===t?e:e.concat(t)},p=function(e,t){var n=e.plain,a=Object.create(null),r=e.styles.reduce((function(e,n){var a=n.languages,r=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=s({},e[t],r);e[t]=n})),e}),a);return r.root=n,r.plain=s({},n,{backgroundColor:null}),r};function m(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}var f=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),l(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?p(e.theme,e.language):void 0;return t.themeDict=n})),l(this,"getLineProps",(function(e){var n=e.key,a=e.className,r=e.style,i=s({},m(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(i.style=o.plain),void 0!==r&&(i.style=void 0!==i.style?s({},i.style,r):r),void 0!==n&&(i.key=n),a&&(i.className+=" "+a),i})),l(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,r=n.length,i=t.getThemeDict(t.props);if(void 0!==i){if(1===r&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===r&&!a)return i[n[0]];var o=a?{display:"inline-block"}:{},l=n.map((function(e){return i[e]}));return Object.assign.apply(Object,[o].concat(l))}})),l(this,"getTokenProps",(function(e){var n=e.key,a=e.className,r=e.style,i=e.token,o=s({},m(e,["key","className","style","token"]),{className:"token "+i.types.join(" "),children:i.content,style:t.getStyleForToken(i),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?s({},o.style,r):r),void 0!==n&&(o.key=n),a&&(o.className+=" "+a),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,r=e.children,i=this.getThemeDict(this.props),o=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],i=0,o=0,l=[],s=[l];o>-1;){for(;(i=a[o]++)0?m:["plain"],p=f):(m=d(m,f.type),f.alias&&(m=d(m,f.alias)),p=f.content),"string"==typeof p){var b=p.split(c),g=b.length;l.push({types:m,content:b[0]});for(var h=1;h/":G?V="/guides/integrate/sources/"+G.name+"//":H&&(V="/guides/integrate/sinks//");var K=H?"/guides/integrate/sources//"+H.name+"/":"/guides/integrate/sources//",Z=Object(u.useState)(!1),J=Z[0],Y=Z[1],Q=Object(u.useState)(!1),X=Q[0],ee=Q[1];return Object(O.a)("contents__link","contents__link--active",100),r.a.createElement(l.a,{title:v,description:v+", in minutes, for free"},J&&r.a.createElement(p.a,{className:"modal",onRequestClose:function(){return Y(!1)},overlayClassName:"modal-overlay",isOpen:null!==J,contentLabel:"Minimal Modal Example"},r.a.createElement("header",null,r.a.createElement("h1",null,"Where do you receive your data from?")),r.a.createElement(_.a,{exceptFunctions:["test"],exceptNames:[G&&G.name,"docker","qovery"],eventTypes:H&&H.event_types,pathTemplate:K,titles:!1,sources:!0,transforms:!1,sinks:!1})),X&&r.a.createElement(p.a,{className:"modal",onRequestClose:function(){return ee(!1)},overlayClassName:"modal-overlay",isOpen:null!==X,contentLabel:"Minimal Modal Example"},r.a.createElement("header",null,r.a.createElement("h1",null,"Where do you want to send your data?")),r.a.createElement(_.a,{exceptFunctions:["test"],exceptNames:[H&&H.name,"qovery"],eventTypes:G&&G.event_types,pathTemplate:V,titles:!1,sources:!1,transforms:!1,sinks:!0})),r.a.createElement("header",{className:"hero domain-bg domain-bg--"+M},r.a.createElement("div",{className:"container"},(z||G||H)&&r.a.createElement("div",{className:"component-icons"},z&&r.a.createElement("div",{className:"icon panel"},z.logo_path?r.a.createElement(g.a,{src:z.logo_path,alt:z.title+" Logo"}):r.a.createElement("i",{className:"feather icon-server"})),G&&!z&&r.a.createElement("div",{className:"icon panel link",title:"Change your source",onClick:function(e){return Y(!0)}},G.logo_path?r.a.createElement(g.a,{src:G.logo_path,alt:G.title+" Logo"}):r.a.createElement("i",{className:"feather icon-server"})),!G&&!z&&r.a.createElement("div",{className:"icon panel link",title:"Select a source",onClick:function(e){return Y(!0)}},r.a.createElement("i",{className:"feather icon-plus"})),H&&r.a.createElement("div",{className:"icon panel link",title:"Change your destination",onClick:function(e){return ee(!0)}},H.logo_path?r.a.createElement(g.a,{src:H.logo_path,alt:H.title+" Logo"}):r.a.createElement("i",{className:"feather icon-database"})),!H&&r.a.createElement("div",{className:"icon panel link",title:"Select a destination",onClick:function(e){return ee(!0)}},r.a.createElement("i",{className:"feather icon-plus"}))),!z&&!G&&!H&&r.a.createElement("div",{className:"hero--category"},r.a.createElement(f.a,{to:E[0].permalink+"/"},E[0].name)),r.a.createElement("h1",{className:C.a.header},v),r.a.createElement("div",{className:"hero--subtitle"},n.description),r.a.createElement(y.a,{colorProfile:"guides",tags:D}))),r.a.createElement("main",{className:d()("container","container--l",C.a.container)},r.a.createElement("aside",{className:C.a.sidebar},r.a.createElement("section",{className:C.a.avatar},r.a.createElement(i,{bio:!0,github:c,size:"lg",rel:"author",subTitle:!1,vertical:!0})),r.a.createElement("section",{className:d()("table-of-contents",C.a.tableOfContents)},r.a.createElement("div",{className:"section"},r.a.createElement("div",{className:"title"},"Stats"),r.a.createElement("div",{className:"text--secondary text--bold"},r.a.createElement("i",{className:"feather icon-book"})," ",w),r.a.createElement("div",{className:"text--secondary text--bold"},r.a.createElement("i",{className:"feather icon-clock"})," Updated ",r.a.createElement("time",{pubdate:"pubdate",dateTime:s},k()(R,"mmm dS, yyyy")))),t.rightToc.length>0&&r.a.createElement("div",{className:"section"},r.a.createElement("div",{className:"title"},"Contents"),r.a.createElement(I,{headings:t.rightToc})))),r.a.createElement("div",{className:C.a.article},r.a.createElement("article",null,r.a.createElement("div",{className:"markdown"},r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"anchor",id:"overview"}),r.a.createElement(h.a,{components:m.a},r.a.createElement(t,null)))),!n.hide_pagination&&r.a.createElement(b.a,{previous:a.prevItem,next:a.nextItem,className:C.a.paginator}))))}},416:function(e,t,n){"use strict";n(418);var u=n(0),r=n.n(u),a=n(415),d=n.n(a);n(132);t.a=function(e){var t=e.children,n=e.classNames,u=e.fill,a=e.icon,o=e.type,i=null;switch(o){case"danger":i="alert-triangle";break;case"success":i="check-circle";break;case"warning":i="alert-triangle";break;default:i="info"}return r.a.createElement("div",{className:d()(n,"alert","alert--"+o,{"alert--fill":u,"alert--icon":!1!==a}),role:"alert"},!1!==a&&r.a.createElement("i",{className:d()("feather","icon-"+(a||i))}),t)}},420:function(e,t,n){var u=n(28).f,r=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in r||n(10)&&u(r,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},424:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);n(133);t.a=function(e){var t=e.children,n=e.className,u=e.badge,d=e.leftIcon,i=e.rightIcon,c=e.size,l=e.target,f=e.to,s=o()("jump-to","jump-to--"+c,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},d&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+d})),r.a.createElement("div",{className:"jump-to--main"},u?r.a.createElement("span",{className:"badge badge--primary badge--right"},u):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(i||"chevron-right")+" arrow"}))));return l?r.a.createElement("a",{href:f,target:l,className:s},p):r.a.createElement(a.a,{to:f,className:s},p)}},429:function(e,t,n){"use strict";var u=n(1),r=(n(434),n(431),n(52),n(29),n(22),n(21),n(0)),a=n.n(r),d=n(441),o=n(415),i=n.n(o),c=n(423),l=n.n(c),f=n(440),s=37,p=39;function m(e){var t=e.block,n=e.centered,u=e.changeSelectedValue,r=e.className,d=e.handleKeydown,o=e.style,c=e.values,l=e.selectedValue,f=e.tabRefs;return a.a.createElement("div",{className:n?"tabs--centered":null},a.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:i()("tabs",r,{"tabs--block":t}),style:o},c.map((function(e){var t=e.value,n=e.label;return a.a.createElement("li",{role:"tab",tabIndex:"0","aria-selected":l===t,className:i()("tab-item",{"tab-item--active":l===t}),key:t,ref:function(e){return f.push(e)},onKeyDown:function(e){return d(f,e.target,e)},onFocus:function(){return u(t)},onClick:function(){return u(t)}},n)}))))}function h(e){var t=e.placeholder,n=e.selectedValue,u=e.changeSelectedValue,r=e.size,o=e.values,i=o;if(i[0].group){var c=_.groupBy(i,"group");i=Object.keys(c).map((function(e){return{label:e,options:c[e]}}))}return a.a.createElement(d.a,{className:"react-select-container react-select--"+r,classNamePrefix:"react-select",options:i,isClearable:n,placeholder:t,value:o.find((function(e){return e.value==n})),onChange:function(e){return u(e?e.value:null)}})}t.a=function(e){e.block,e.centered;var t=e.children,n=e.defaultValue,d=e.groupId,o=e.label,i=e.placeholder,c=e.select,b=e.size,v=(e.style,e.values),g=e.urlKey,y=Object(f.a)(),_=y.tabGroupChoices,E=y.setTabGroupChoices,w=Object(r.useState)(n),D=w[0],k=w[1];if(null!=d){var x=_[d];null!=x&&x!==D&&k(x)}var S=function(e){k(e),null!=d&&E(d,e)},C=[],O=function(e,t,n){switch(n.keyCode){case p:!function(e,t){var n=e.indexOf(t)+1;e[n]?e[n].focus():e[0].focus()}(e,t);break;case s:!function(e,t){var n=e.indexOf(t)-1;e[n]?e[n].focus():e[e.length-1].focus()}(e,t)}};return Object(r.useEffect)((function(){if("undefined"!=typeof window&&window.location&&g){var e=l.a.parse(window.location.search);e[g]&&k(e[g])}}),[]),a.a.createElement(a.a.Fragment,null,a.a.createElement("div",{className:"margin-bottom--"+(b||"md")},o&&a.a.createElement("div",{className:"margin-vert--sm"},o),v.length>1&&(c?a.a.createElement(h,Object(u.a)({changeSelectedValue:S,handleKeydown:O,placeholder:i,selectedValue:D,size:b,tabRefs:C},e)):a.a.createElement(m,Object(u.a)({changeSelectedValue:S,handleKeydown:O,selectedValue:D,tabRefs:C},e)))),r.Children.toArray(t).filter((function(e){return e.props.value===D}))[0])}},433:function(e,t,n){"use strict";var u=n(0),r=n(477);t.a=function(){return Object(u.useContext)(r.a)}},436:function(e,t,n){"use strict";var u=n(0),r=n.n(u);t.a=function(e){return r.a.createElement(r.a.Fragment,null,e.children)}},437:function(e,t,n){"use strict";n(449);var u=n(0),r=n.n(u),a=n(450),d=n(435),o=n(1),i=(n(438),n(439),n(451),n(422)),c=n(452),l=n(432),f=n.n(l),s=n(453),p=n.n(s),m=n(428),h=n(415),b=n.n(h),v=n(135),g=n.n(v),y=function(){return r.a.createElement("span",{className:b()(g.a.toggle,g.a.moon)})},_=function(){return r.a.createElement("span",{className:b()(g.a.toggle,g.a.sun)})},E=function(e){var t=Object(m.a)().isClient;return r.a.createElement(p.a,Object(o.a)({disabled:!t,icons:{checked:r.a.createElement(y,null),unchecked:r.a.createElement(_,null)}},e))};function w(){var e=Object(m.a)().siteConfig,t=(void 0===e?{}:e).customFields.metadata.latest_post,n=Date.parse(t.date),u=new Date,r=Math.abs(u-n),a=Math.ceil(r/864e5),d=null;return"undefined"!=typeof window&&(d=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),a<30&&(!d||d0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(f.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(M,e))}))):null)}))),(l||d)&&r.a.createElement("div",{className:"text--center"},l&&l.src&&r.a.createElement("div",{className:"margin-bottom--sm"},l.href?r.a.createElement("a",{href:l.href,target:"_blank",rel:"noopener noreferrer",className:P.a.footerLogoLink},r.a.createElement(R,{alt:l.alt,url:s})):r.a.createElement(R,{alt:l.alt,url:s})),r.a.createElement("small",null,d),r.a.createElement("br",null))))},B=n(454),z=n(455),U=n(3);n(138);t.a=function(e){var t=Object(m.a)().siteConfig,n=void 0===t?{}:t,u=n.favicon,o=(n.tagline,n.title),i=n.themeConfig.image,c=n.url,l=e.children,f=e.title,s=e.noFooter,p=e.description,h=e.image,b=e.keywords,v=(e.permalink,e.version),g=f?f+" | "+o:o,y=h||i,_=c+Object(k.a)(y),E=Object(k.a)(u),w=Object(U.h)(),D=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(z.a,null,r.a.createElement(B.a,null,r.a.createElement(d.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),g&&r.a.createElement("title",null,g),g&&r.a.createElement("meta",{property:"og:title",content:g}),u&&r.a.createElement("link",{rel:"shortcut icon",href:E}),p&&r.a.createElement("meta",{name:"description",content:p}),p&&r.a.createElement("meta",{property:"og:description",content:p}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),b&&b.length&&r.a.createElement("meta",{name:"keywords",content:b.join(",")}),y&&r.a.createElement("meta",{property:"og:image",content:_}),y&&r.a.createElement("meta",{property:"twitter:image",content:_}),y&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+g}),D&&r.a.createElement("meta",{property:"og:url",content:D}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),D&&r.a.createElement("link",{rel:"canonical",href:D})),r.a.createElement(a.a,null),r.a.createElement(N,null),r.a.createElement("div",{className:"main-wrapper"},l),!s&&r.a.createElement(L,null)))}},442:function(e,t,n){"use strict";var u=n(9),r=n(0),a=n.n(r),d=n(415),o=n.n(d),i=n(428),c=(n(139),n(140)),l=n.n(c);t.a=function(e){return function(t){var n,r=t.id,d=Object(u.a)(t,["id"]),c=Object(i.a)().siteConfig,f=(c=void 0===c?{}:c).themeConfig,s=(f=void 0===f?{}:f).navbar,p=(s=void 0===s?{}:s).hideOnScroll,m=void 0!==p&&p;return r?a.a.createElement(e,d,a.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(n={},n[l.a.enhancedAnchor]=!m,n)),id:r}),a.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),d.children):a.a.createElement(e,d)}}},443:function(e,t,n){(function(e,u){var r;(function(){var a="Expected a function",d="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],i="[object Arguments]",c="[object Array]",l="[object Boolean]",f="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",b="[object Number]",v="[object Object]",g="[object RegExp]",y="[object Set]",_="[object String]",E="[object Symbol]",w="[object WeakMap]",D="[object ArrayBuffer]",k="[object DataView]",x="[object Float32Array]",S="[object Float64Array]",C="[object Int8Array]",O="[object Int16Array]",I="[object Int32Array]",A="[object Uint8Array]",j="[object Uint16Array]",N="[object Uint32Array]",F=/\b__p \+= '';/g,T=/\b(__p \+=) '' \+/g,P=/(__e\(.*?\)|\b__t\)) \+\n'';/g,M=/&(?:amp|lt|gt|quot|#39);/g,R=/[&<>"']/g,L=RegExp(M.source),B=RegExp(R.source),z=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,H=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/[\\^$.*+?()[\]{}|]/g,V=RegExp(G.source),K=/^\s+|\s+$/g,Z=/^\s+/,J=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ue=/\w*$/,re=/^[-+]0x[0-9a-f]+$/i,ae=/^0b[01]+$/i,de=/^\[object .+?Constructor\]$/,oe=/^0o[0-7]+$/i,ie=/^(?:0|[1-9]\d*)$/,ce=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,fe=/['\n\r\u2028\u2029\\]/g,se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",me="[\\ud800-\\udfff]",he="["+pe+"]",be="["+se+"]",ve="\\d+",ge="[\\u2700-\\u27bf]",ye="[a-z\\xdf-\\xf6\\xf8-\\xff]",_e="[^\\ud800-\\udfff"+pe+ve+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",Ee="\\ud83c[\\udffb-\\udfff]",we="[^\\ud800-\\udfff]",De="(?:\\ud83c[\\udde6-\\uddff]){2}",ke="[\\ud800-\\udbff][\\udc00-\\udfff]",xe="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Se="(?:"+ye+"|"+_e+")",Ce="(?:"+xe+"|"+_e+")",Oe="(?:"+be+"|"+Ee+")"+"?",Ie="[\\ufe0e\\ufe0f]?"+Oe+("(?:\\u200d(?:"+[we,De,ke].join("|")+")[\\ufe0e\\ufe0f]?"+Oe+")*"),Ae="(?:"+[ge,De,ke].join("|")+")"+Ie,je="(?:"+[we+be+"?",be,De,ke,me].join("|")+")",Ne=RegExp("['\u2019]","g"),Fe=RegExp(be,"g"),Te=RegExp(Ee+"(?="+Ee+")|"+je+Ie,"g"),Pe=RegExp([xe+"?"+ye+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[he,xe,"$"].join("|")+")",Ce+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[he,xe+Se,"$"].join("|")+")",xe+"?"+Se+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",xe+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ve,Ae].join("|"),"g"),Me=RegExp("[\\u200d\\ud800-\\udfff"+se+"\\ufe0e\\ufe0f]"),Re=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Le=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Be=-1,ze={};ze[x]=ze[S]=ze[C]=ze[O]=ze[I]=ze[A]=ze["[object Uint8ClampedArray]"]=ze[j]=ze[N]=!0,ze[i]=ze[c]=ze[D]=ze[l]=ze[k]=ze[f]=ze[s]=ze[p]=ze[h]=ze[b]=ze[v]=ze[g]=ze[y]=ze[_]=ze[w]=!1;var Ue={};Ue[i]=Ue[c]=Ue[D]=Ue[k]=Ue[l]=Ue[f]=Ue[x]=Ue[S]=Ue[C]=Ue[O]=Ue[I]=Ue[h]=Ue[b]=Ue[v]=Ue[g]=Ue[y]=Ue[_]=Ue[E]=Ue[A]=Ue["[object Uint8ClampedArray]"]=Ue[j]=Ue[N]=!0,Ue[s]=Ue[p]=Ue[w]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=parseFloat,$e=parseInt,qe="object"==typeof e&&e&&e.Object===Object&&e,Ge="object"==typeof self&&self&&self.Object===Object&&self,Ve=qe||Ge||Function("return this")(),Ke=t&&!t.nodeType&&t,Ze=Ke&&"object"==typeof u&&u&&!u.nodeType&&u,Je=Ze&&Ze.exports===Ke,Ye=Je&&qe.process,Qe=function(){try{var e=Ze&&Ze.require&&Ze.require("util").types;return e||Ye&&Ye.binding&&Ye.binding("util")}catch(t){}}(),Xe=Qe&&Qe.isArrayBuffer,et=Qe&&Qe.isDate,tt=Qe&&Qe.isMap,nt=Qe&&Qe.isRegExp,ut=Qe&&Qe.isSet,rt=Qe&&Qe.isTypedArray;function at(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function dt(e,t,n,u){for(var r=-1,a=null==e?0:e.length;++r-1}function st(e,t,n){for(var u=-1,r=null==e?0:e.length;++u-1;);return n}function Tt(e,t){for(var n=e.length;n--&&Et(t,e[n],0)>-1;);return n}function Pt(e,t){for(var n=e.length,u=0;n--;)e[n]===t&&++u;return u}var Mt=St({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Rt=St({"&":"&","<":"<",">":">",'"':""","'":"'"});function Lt(e){return"\\"+We[e]}function Bt(e){return Me.test(e)}function zt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,u){n[++t]=[u,e]})),n}function Ut(e,t){return function(n){return e(t(n))}}function Wt(e,t){for(var n=-1,u=e.length,r=0,a=[];++n",""":'"',"'":"'"});var Kt=function e(t){var n,u=(t=null==t?Ve:Kt.defaults(Ve.Object(),t,Kt.pick(Ve,Le))).Array,r=t.Date,se=t.Error,pe=t.Function,me=t.Math,he=t.Object,be=t.RegExp,ve=t.String,ge=t.TypeError,ye=u.prototype,_e=pe.prototype,Ee=he.prototype,we=t["__core-js_shared__"],De=_e.toString,ke=Ee.hasOwnProperty,xe=0,Se=(n=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Ce=Ee.toString,Oe=De.call(he),Ie=Ve._,Ae=be("^"+De.call(ke).replace(G,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),je=Je?t.Buffer:void 0,Te=t.Symbol,Me=t.Uint8Array,We=je?je.allocUnsafe:void 0,qe=Ut(he.getPrototypeOf,he),Ge=he.create,Ke=Ee.propertyIsEnumerable,Ze=ye.splice,Ye=Te?Te.isConcatSpreadable:void 0,Qe=Te?Te.iterator:void 0,gt=Te?Te.toStringTag:void 0,St=function(){try{var e=Xr(he,"defineProperty");return e({},"",{}),e}catch(t){}}(),Zt=t.clearTimeout!==Ve.clearTimeout&&t.clearTimeout,Jt=r&&r.now!==Ve.Date.now&&r.now,Yt=t.setTimeout!==Ve.setTimeout&&t.setTimeout,Qt=me.ceil,Xt=me.floor,en=he.getOwnPropertySymbols,tn=je?je.isBuffer:void 0,nn=t.isFinite,un=ye.join,rn=Ut(he.keys,he),an=me.max,dn=me.min,on=r.now,cn=t.parseInt,ln=me.random,fn=ye.reverse,sn=Xr(t,"DataView"),pn=Xr(t,"Map"),mn=Xr(t,"Promise"),hn=Xr(t,"Set"),bn=Xr(t,"WeakMap"),vn=Xr(he,"create"),gn=bn&&new bn,yn={},_n=Sa(sn),En=Sa(pn),wn=Sa(mn),Dn=Sa(hn),kn=Sa(bn),xn=Te?Te.prototype:void 0,Sn=xn?xn.valueOf:void 0,Cn=xn?xn.toString:void 0;function On(e){if(Hd(e)&&!Nd(e)&&!(e instanceof Nn)){if(e instanceof jn)return e;if(ke.call(e,"__wrapped__"))return Ca(e)}return new jn(e)}var In=function(){function e(){}return function(t){if(!Wd(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function An(){}function jn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Fn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Jn(e,t,n,u,r,a){var d,o=1&t,c=2&t,s=4&t;if(n&&(d=r?n(e,u,r,a):n(e)),void 0!==d)return d;if(!Wd(e))return e;var w=Nd(e);if(w){if(d=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&ke.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!o)return vr(e,d)}else{var F=na(e),T=F==p||F==m;if(Md(e))return fr(e,o);if(F==v||F==i||T&&!r){if(d=c||T?{}:ra(e),!o)return c?function(e,t){return gr(e,ta(e),t)}(e,function(e,t){return e&&gr(t,Eo(t),e)}(d,e)):function(e,t){return gr(e,ea(e),t)}(e,Gn(d,e))}else{if(!Ue[F])return r?e:{};d=function(e,t,n){var u=e.constructor;switch(t){case D:return sr(e);case l:case f:return new u(+e);case k:return function(e,t){var n=t?sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case x:case S:case C:case O:case I:case A:case"[object Uint8ClampedArray]":case j:case N:return pr(e,n);case h:return new u;case b:case _:return new u(e);case g:return function(e){var t=new e.constructor(e.source,ue.exec(e));return t.lastIndex=e.lastIndex,t}(e);case y:return new u;case E:return r=e,Sn?he(Sn.call(r)):{}}var r}(e,F,o)}}a||(a=new Rn);var P=a.get(e);if(P)return P;a.set(e,d),Kd(e)?e.forEach((function(u){d.add(Jn(u,t,n,u,e,a))})):$d(e)&&e.forEach((function(u,r){d.set(r,Jn(u,t,n,r,e,a))}));var M=w?void 0:(s?c?Gr:qr:c?Eo:_o)(e);return ot(M||e,(function(u,r){M&&(u=e[r=u]),Hn(d,r,Jn(u,t,n,r,e,a))})),d}function Yn(e,t,n){var u=n.length;if(null==e)return!u;for(e=he(e);u--;){var r=n[u],a=t[r],d=e[r];if(void 0===d&&!(r in e)||!a(d))return!1}return!0}function Qn(e,t,n){if("function"!=typeof e)throw new ge(a);return ya((function(){e.apply(void 0,n)}),t)}function Xn(e,t,n,u){var r=-1,a=ft,d=!0,o=e.length,i=[],c=t.length;if(!o)return i;n&&(t=pt(t,At(n))),u?(a=st,d=!1):t.length>=200&&(a=Nt,d=!1,t=new Mn(t));e:for(;++r-1},Tn.prototype.set=function(e,t){var n=this.__data__,u=$n(n,e);return u<0?(++this.size,n.push([e,t])):n[u][1]=t,this},Pn.prototype.clear=function(){this.size=0,this.__data__={hash:new Fn,map:new(pn||Tn),string:new Fn}},Pn.prototype.delete=function(e){var t=Yr(this,e).delete(e);return this.size-=t?1:0,t},Pn.prototype.get=function(e){return Yr(this,e).get(e)},Pn.prototype.has=function(e){return Yr(this,e).has(e)},Pn.prototype.set=function(e,t){var n=Yr(this,e),u=n.size;return n.set(e,t),this.size+=n.size==u?0:1,this},Mn.prototype.add=Mn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Mn.prototype.has=function(e){return this.__data__.has(e)},Rn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Rn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Rn.prototype.get=function(e){return this.__data__.get(e)},Rn.prototype.has=function(e){return this.__data__.has(e)},Rn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Tn){var u=n.__data__;if(!pn||u.length<199)return u.push([e,t]),this.size=++n.size,this;n=this.__data__=new Pn(u)}return n.set(e,t),this.size=n.size,this};var eu=Er(iu),tu=Er(cu,!0);function nu(e,t){var n=!0;return eu(e,(function(e,u,r){return n=!!t(e,u,r)})),n}function uu(e,t,n){for(var u=-1,r=e.length;++u0&&n(o)?t>1?au(o,t-1,n,u,r):mt(r,o):u||(r[r.length]=o)}return r}var du=wr(),ou=wr(!0);function iu(e,t){return e&&du(e,t,_o)}function cu(e,t){return e&&ou(e,t,_o)}function lu(e,t){return lt(t,(function(t){return Bd(e[t])}))}function fu(e,t){for(var n=0,u=(t=or(t,e)).length;null!=e&&nt}function hu(e,t){return null!=e&&ke.call(e,t)}function bu(e,t){return null!=e&&t in he(e)}function vu(e,t,n){for(var r=n?st:ft,a=e[0].length,d=e.length,o=d,i=u(d),c=1/0,l=[];o--;){var f=e[o];o&&t&&(f=pt(f,At(t))),c=dn(f.length,c),i[o]=!n&&(t||a>=120&&f.length>=120)?new Mn(o&&f):void 0}f=e[0];var s=-1,p=i[0];e:for(;++s=o)return i;var c=n[u];return i*("desc"==c?-1:1)}}return e.index-t.index}(e,t,n)}))}function Fu(e,t,n){for(var u=-1,r=t.length,a={};++u-1;)o!==e&&Ze.call(o,i,1),Ze.call(e,i,1);return e}function Pu(e,t){for(var n=e?t.length:0,u=n-1;n--;){var r=t[n];if(n==u||r!==a){var a=r;da(r)?Ze.call(e,r,1):Xu(e,r)}}return e}function Mu(e,t){return e+Xt(ln()*(t-e+1))}function Ru(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Xt(t/2))&&(e+=e)}while(t);return n}function Lu(e,t){return _a(ma(e,t,Go),e+"")}function Bu(e){return Bn(Io(e))}function zu(e,t){var n=Io(e);return Da(n,Zn(t,0,n.length))}function Uu(e,t,n,u){if(!Wd(e))return e;for(var r=-1,a=(t=or(t,e)).length,d=a-1,o=e;null!=o&&++ra?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var d=u(a);++r>>1,d=e[a];null!==d&&!Jd(d)&&(n?d<=t:d=200){var c=t?null:Rr(e);if(c)return Ht(c);d=!1,r=Nt,i=new Mn}else i=t?[]:o;e:for(;++u=u?e:qu(e,t,n)}var lr=Zt||function(e){return Ve.clearTimeout(e)};function fr(e,t){if(t)return e.slice();var n=e.length,u=We?We(n):new e.constructor(n);return e.copy(u),u}function sr(e){var t=new e.constructor(e.byteLength);return new Me(t).set(new Me(e)),t}function pr(e,t){var n=t?sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function mr(e,t){if(e!==t){var n=void 0!==e,u=null===e,r=e==e,a=Jd(e),d=void 0!==t,o=null===t,i=t==t,c=Jd(t);if(!o&&!c&&!a&&e>t||a&&d&&i&&!o&&!c||u&&d&&i||!n&&i||!r)return 1;if(!u&&!a&&!c&&e1?n[r-1]:void 0,d=r>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(r--,a):void 0,d&&oa(n[0],n[1],d)&&(a=r<3?void 0:a,r=1),t=he(t);++u-1?r[a?t[d]:d]:void 0}}function Cr(e){return $r((function(t){var n=t.length,u=n,r=jn.prototype.thru;for(e&&t.reverse();u--;){var d=t[u];if("function"!=typeof d)throw new ge(a);if(r&&!o&&"wrapper"==Kr(d))var o=new jn([],!0)}for(u=o?u:n;++u1&&y.reverse(),f&&co))return!1;var c=a.get(e);if(c&&a.get(t))return c==t;var l=-1,f=!0,s=2&n?new Mn:void 0;for(a.set(e,t),a.set(t,e);++l-1&&e%1==0&&e1?"& ":"")+t[u],t=t.join(n>2?", ":" "),e.replace(Y,"{\n/* [wrapped with "+t+"] */\n")}(u,function(e,t){return ot(o,(function(n){var u="_."+n[0];t&n[1]&&!ft(e,u)&&e.push(u)})),e.sort()}(function(e){var t=e.match(Q);return t?t[1].split(X):[]}(u),n)))}function wa(e){var t=0,n=0;return function(){var u=on(),r=16-(u-n);if(n=u,r>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Da(e,t){var n=-1,u=e.length,r=u-1;for(t=void 0===t?u:t;++n1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Va(e,n)}));function ed(e){var t=On(e);return t.__chain__=!0,t}function td(e,t){return t(e)}var nd=$r((function(e){var t=e.length,n=t?e[0]:0,u=this.__wrapped__,r=function(t){return Kn(t,e)};return!(t>1||this.__actions__.length)&&u instanceof Nn&&da(n)?((u=u.slice(n,+n+(t?1:0))).__actions__.push({func:td,args:[r],thisArg:void 0}),new jn(u,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(r)}));var ud=yr((function(e,t,n){ke.call(e,n)?++e[n]:Vn(e,n,1)}));var rd=Sr(ja),ad=Sr(Na);function dd(e,t){return(Nd(e)?ot:eu)(e,Jr(t,3))}function od(e,t){return(Nd(e)?it:tu)(e,Jr(t,3))}var id=yr((function(e,t,n){ke.call(e,n)?e[n].push(t):Vn(e,n,[t])}));var cd=Lu((function(e,t,n){var r=-1,a="function"==typeof t,d=Td(e)?u(e.length):[];return eu(e,(function(e){d[++r]=a?at(t,e,n):gu(e,t,n)})),d})),ld=yr((function(e,t,n){Vn(e,n,t)}));function fd(e,t){return(Nd(e)?pt:Cu)(e,Jr(t,3))}var sd=yr((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var pd=Lu((function(e,t){if(null==e)return[];var n=t.length;return n>1&&oa(e,t[0],t[1])?t=[]:n>2&&oa(t[0],t[1],t[2])&&(t=[t[0]]),Nu(e,au(t,1),[])})),md=Jt||function(){return Ve.Date.now()};function hd(e,t,n){return t=n?void 0:t,Br(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function bd(e,t){var n;if("function"!=typeof t)throw new ge(a);return e=no(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var vd=Lu((function(e,t,n){var u=1;if(n.length){var r=Wt(n,Zr(vd));u|=32}return Br(e,u,t,n,r)})),gd=Lu((function(e,t,n){var u=3;if(n.length){var r=Wt(n,Zr(gd));u|=32}return Br(t,u,e,n,r)}));function yd(e,t,n){var u,r,d,o,i,c,l=0,f=!1,s=!1,p=!0;if("function"!=typeof e)throw new ge(a);function m(t){var n=u,a=r;return u=r=void 0,l=t,o=e.apply(a,n)}function h(e){return l=e,i=ya(v,t),f?m(e):o}function b(e){var n=e-c;return void 0===c||n>=t||n<0||s&&e-l>=d}function v(){var e=md();if(b(e))return g(e);i=ya(v,function(e){var n=t-(e-c);return s?dn(n,d-(e-l)):n}(e))}function g(e){return i=void 0,p&&u?m(e):(u=r=void 0,o)}function y(){var e=md(),n=b(e);if(u=arguments,r=this,c=e,n){if(void 0===i)return h(c);if(s)return lr(i),i=ya(v,t),m(c)}return void 0===i&&(i=ya(v,t)),o}return t=ro(t)||0,Wd(n)&&(f=!!n.leading,d=(s="maxWait"in n)?an(ro(n.maxWait)||0,t):d,p="trailing"in n?!!n.trailing:p),y.cancel=function(){void 0!==i&&lr(i),l=0,u=c=r=i=void 0},y.flush=function(){return void 0===i?o:g(md())},y}var _d=Lu((function(e,t){return Qn(e,1,t)})),Ed=Lu((function(e,t,n){return Qn(e,ro(t)||0,n)}));function wd(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ge(a);var n=function(){var u=arguments,r=t?t.apply(this,u):u[0],a=n.cache;if(a.has(r))return a.get(r);var d=e.apply(this,u);return n.cache=a.set(r,d)||a,d};return n.cache=new(wd.Cache||Pn),n}function Dd(e){if("function"!=typeof e)throw new ge(a);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}wd.Cache=Pn;var kd=ir((function(e,t){var n=(t=1==t.length&&Nd(t[0])?pt(t[0],At(Jr())):pt(au(t,1),At(Jr()))).length;return Lu((function(u){for(var r=-1,a=dn(u.length,n);++r=t})),jd=yu(function(){return arguments}())?yu:function(e){return Hd(e)&&ke.call(e,"callee")&&!Ke.call(e,"callee")},Nd=u.isArray,Fd=Xe?At(Xe):function(e){return Hd(e)&&pu(e)==D};function Td(e){return null!=e&&Ud(e.length)&&!Bd(e)}function Pd(e){return Hd(e)&&Td(e)}var Md=tn||ai,Rd=et?At(et):function(e){return Hd(e)&&pu(e)==f};function Ld(e){if(!Hd(e))return!1;var t=pu(e);return t==s||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Gd(e)}function Bd(e){if(!Wd(e))return!1;var t=pu(e);return t==p||t==m||"[object AsyncFunction]"==t||"[object Proxy]"==t}function zd(e){return"number"==typeof e&&e==no(e)}function Ud(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Wd(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Hd(e){return null!=e&&"object"==typeof e}var $d=tt?At(tt):function(e){return Hd(e)&&na(e)==h};function qd(e){return"number"==typeof e||Hd(e)&&pu(e)==b}function Gd(e){if(!Hd(e)||pu(e)!=v)return!1;var t=qe(e);if(null===t)return!0;var n=ke.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&De.call(n)==Oe}var Vd=nt?At(nt):function(e){return Hd(e)&&pu(e)==g};var Kd=ut?At(ut):function(e){return Hd(e)&&na(e)==y};function Zd(e){return"string"==typeof e||!Nd(e)&&Hd(e)&&pu(e)==_}function Jd(e){return"symbol"==typeof e||Hd(e)&&pu(e)==E}var Yd=rt?At(rt):function(e){return Hd(e)&&Ud(e.length)&&!!ze[pu(e)]};var Qd=Tr(Su),Xd=Tr((function(e,t){return e<=t}));function eo(e){if(!e)return[];if(Td(e))return Zd(e)?Gt(e):vr(e);if(Qe&&e[Qe])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Qe]());var t=na(e);return(t==h?zt:t==y?Ht:Io)(e)}function to(e){return e?(e=ro(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function no(e){var t=to(e),n=t%1;return t==t?n?t-n:t:0}function uo(e){return e?Zn(no(e),0,4294967295):0}function ro(e){if("number"==typeof e)return e;if(Jd(e))return NaN;if(Wd(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Wd(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(K,"");var n=ae.test(e);return n||oe.test(e)?$e(e.slice(2),n?2:8):re.test(e)?NaN:+e}function ao(e){return gr(e,Eo(e))}function oo(e){return null==e?"":Yu(e)}var io=_r((function(e,t){if(fa(t)||Td(t))gr(t,_o(t),e);else for(var n in t)ke.call(t,n)&&Hn(e,n,t[n])})),co=_r((function(e,t){gr(t,Eo(t),e)})),lo=_r((function(e,t,n,u){gr(t,Eo(t),e,u)})),fo=_r((function(e,t,n,u){gr(t,_o(t),e,u)})),so=$r(Kn);var po=Lu((function(e,t){e=he(e);var n=-1,u=t.length,r=u>2?t[2]:void 0;for(r&&oa(t[0],t[1],r)&&(u=1);++n1),t})),gr(e,Gr(e),n),u&&(n=Jn(n,7,Wr));for(var r=t.length;r--;)Xu(n,t[r]);return n}));var xo=$r((function(e,t){return null==e?{}:function(e,t){return Fu(e,t,(function(t,n){return bo(e,n)}))}(e,t)}));function So(e,t){if(null==e)return{};var n=pt(Gr(e),(function(e){return[e]}));return t=Jr(t),Fu(e,n,(function(e,n){return t(e,n[0])}))}var Co=Lr(_o),Oo=Lr(Eo);function Io(e){return null==e?[]:jt(e,_o(e))}var Ao=kr((function(e,t,n){return t=t.toLowerCase(),e+(n?jo(t):t)}));function jo(e){return Bo(oo(e).toLowerCase())}function No(e){return(e=oo(e))&&e.replace(ce,Mt).replace(Fe,"")}var Fo=kr((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),To=kr((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Po=Dr("toLowerCase");var Mo=kr((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Ro=kr((function(e,t,n){return e+(n?" ":"")+Bo(t)}));var Lo=kr((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Bo=Dr("toUpperCase");function zo(e,t,n){return e=oo(e),void 0===(t=n?void 0:t)?function(e){return Re.test(e)}(e)?function(e){return e.match(Pe)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var Uo=Lu((function(e,t){try{return at(e,void 0,t)}catch(n){return Ld(n)?n:new se(n)}})),Wo=$r((function(e,t){return ot(t,(function(t){t=xa(t),Vn(e,t,vd(e[t],e))})),e}));function Ho(e){return function(){return e}}var $o=Cr(),qo=Cr(!0);function Go(e){return e}function Vo(e){return Du("function"==typeof e?e:Jn(e,1))}var Ko=Lu((function(e,t){return function(n){return gu(n,e,t)}})),Zo=Lu((function(e,t){return function(n){return gu(e,n,t)}}));function Jo(e,t,n){var u=_o(t),r=lu(t,u);null!=n||Wd(t)&&(r.length||!u.length)||(n=t,t=e,e=this,r=lu(t,_o(t)));var a=!(Wd(n)&&"chain"in n&&!n.chain),d=Bd(e);return ot(r,(function(n){var u=t[n];e[n]=u,d&&(e.prototype[n]=function(){var t=this.__chain__;if(a||t){var n=e(this.__wrapped__),r=n.__actions__=vr(this.__actions__);return r.push({func:u,args:arguments,thisArg:e}),n.__chain__=t,n}return u.apply(e,mt([this.value()],arguments))})})),e}function Yo(){}var Qo=jr(pt),Xo=jr(ct),ei=jr(vt);function ti(e){return ia(e)?xt(xa(e)):function(e){return function(t){return fu(t,e)}}(e)}var ni=Fr(),ui=Fr(!0);function ri(){return[]}function ai(){return!1}var di=Ar((function(e,t){return e+t}),0),oi=Mr("ceil"),ii=Ar((function(e,t){return e/t}),1),ci=Mr("floor");var li,fi=Ar((function(e,t){return e*t}),1),si=Mr("round"),pi=Ar((function(e,t){return e-t}),0);return On.after=function(e,t){if("function"!=typeof t)throw new ge(a);return e=no(e),function(){if(--e<1)return t.apply(this,arguments)}},On.ary=hd,On.assign=io,On.assignIn=co,On.assignInWith=lo,On.assignWith=fo,On.at=so,On.before=bd,On.bind=vd,On.bindAll=Wo,On.bindKey=gd,On.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Nd(e)?e:[e]},On.chain=ed,On.chunk=function(e,t,n){t=(n?oa(e,t,n):void 0===t)?1:an(no(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var a=0,d=0,o=u(Qt(r/t));ar?0:r+n),(u=void 0===u||u>r?r:no(u))<0&&(u+=r),u=n>u?0:uo(u);n>>0)?(e=oo(e))&&("string"==typeof t||null!=t&&!Vd(t))&&!(t=Yu(t))&&Bt(e)?cr(Gt(e),0,n):e.split(t,n):[]},On.spread=function(e,t){if("function"!=typeof e)throw new ge(a);return t=null==t?0:an(no(t),0),Lu((function(n){var u=n[t],r=cr(n,0,t);return u&&mt(r,u),at(e,this,r)}))},On.tail=function(e){var t=null==e?0:e.length;return t?qu(e,1,t):[]},On.take=function(e,t,n){return e&&e.length?qu(e,0,(t=n||void 0===t?1:no(t))<0?0:t):[]},On.takeRight=function(e,t,n){var u=null==e?0:e.length;return u?qu(e,(t=u-(t=n||void 0===t?1:no(t)))<0?0:t,u):[]},On.takeRightWhile=function(e,t){return e&&e.length?tr(e,Jr(t,3),!1,!0):[]},On.takeWhile=function(e,t){return e&&e.length?tr(e,Jr(t,3)):[]},On.tap=function(e,t){return t(e),e},On.throttle=function(e,t,n){var u=!0,r=!0;if("function"!=typeof e)throw new ge(a);return Wd(n)&&(u="leading"in n?!!n.leading:u,r="trailing"in n?!!n.trailing:r),yd(e,t,{leading:u,maxWait:t,trailing:r})},On.thru=td,On.toArray=eo,On.toPairs=Co,On.toPairsIn=Oo,On.toPath=function(e){return Nd(e)?pt(e,xa):Jd(e)?[e]:vr(ka(oo(e)))},On.toPlainObject=ao,On.transform=function(e,t,n){var u=Nd(e),r=u||Md(e)||Yd(e);if(t=Jr(t,4),null==n){var a=e&&e.constructor;n=r?u?new a:[]:Wd(e)&&Bd(a)?In(qe(e)):{}}return(r?ot:iu)(e,(function(e,u,r){return t(n,e,u,r)})),n},On.unary=function(e){return hd(e,1)},On.union=Ha,On.unionBy=$a,On.unionWith=qa,On.uniq=function(e){return e&&e.length?Qu(e):[]},On.uniqBy=function(e,t){return e&&e.length?Qu(e,Jr(t,2)):[]},On.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Qu(e,void 0,t):[]},On.unset=function(e,t){return null==e||Xu(e,t)},On.unzip=Ga,On.unzipWith=Va,On.update=function(e,t,n){return null==e?e:er(e,t,dr(n))},On.updateWith=function(e,t,n,u){return u="function"==typeof u?u:void 0,null==e?e:er(e,t,dr(n),u)},On.values=Io,On.valuesIn=function(e){return null==e?[]:jt(e,Eo(e))},On.without=Ka,On.words=zo,On.wrap=function(e,t){return xd(dr(t),e)},On.xor=Za,On.xorBy=Ja,On.xorWith=Ya,On.zip=Qa,On.zipObject=function(e,t){return rr(e||[],t||[],Hn)},On.zipObjectDeep=function(e,t){return rr(e||[],t||[],Uu)},On.zipWith=Xa,On.entries=Co,On.entriesIn=Oo,On.extend=co,On.extendWith=lo,Jo(On,On),On.add=di,On.attempt=Uo,On.camelCase=Ao,On.capitalize=jo,On.ceil=oi,On.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=ro(n))==n?n:0),void 0!==t&&(t=(t=ro(t))==t?t:0),Zn(ro(e),t,n)},On.clone=function(e){return Jn(e,4)},On.cloneDeep=function(e){return Jn(e,5)},On.cloneDeepWith=function(e,t){return Jn(e,5,t="function"==typeof t?t:void 0)},On.cloneWith=function(e,t){return Jn(e,4,t="function"==typeof t?t:void 0)},On.conformsTo=function(e,t){return null==t||Yn(e,t,_o(t))},On.deburr=No,On.defaultTo=function(e,t){return null==e||e!=e?t:e},On.divide=ii,On.endsWith=function(e,t,n){e=oo(e),t=Yu(t);var u=e.length,r=n=void 0===n?u:Zn(no(n),0,u);return(n-=t.length)>=0&&e.slice(n,r)==t},On.eq=Od,On.escape=function(e){return(e=oo(e))&&B.test(e)?e.replace(R,Rt):e},On.escapeRegExp=function(e){return(e=oo(e))&&V.test(e)?e.replace(G,"\\$&"):e},On.every=function(e,t,n){var u=Nd(e)?ct:nu;return n&&oa(e,t,n)&&(t=void 0),u(e,Jr(t,3))},On.find=rd,On.findIndex=ja,On.findKey=function(e,t){return yt(e,Jr(t,3),iu)},On.findLast=ad,On.findLastIndex=Na,On.findLastKey=function(e,t){return yt(e,Jr(t,3),cu)},On.floor=ci,On.forEach=dd,On.forEachRight=od,On.forIn=function(e,t){return null==e?e:du(e,Jr(t,3),Eo)},On.forInRight=function(e,t){return null==e?e:ou(e,Jr(t,3),Eo)},On.forOwn=function(e,t){return e&&iu(e,Jr(t,3))},On.forOwnRight=function(e,t){return e&&cu(e,Jr(t,3))},On.get=ho,On.gt=Id,On.gte=Ad,On.has=function(e,t){return null!=e&&ua(e,t,hu)},On.hasIn=bo,On.head=Ta,On.identity=Go,On.includes=function(e,t,n,u){e=Td(e)?e:Io(e),n=n&&!u?no(n):0;var r=e.length;return n<0&&(n=an(r+n,0)),Zd(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&Et(e,t,n)>-1},On.indexOf=function(e,t,n){var u=null==e?0:e.length;if(!u)return-1;var r=null==n?0:no(n);return r<0&&(r=an(u+r,0)),Et(e,t,r)},On.inRange=function(e,t,n){return t=to(t),void 0===n?(n=t,t=0):n=to(n),function(e,t,n){return e>=dn(t,n)&&e=-9007199254740991&&e<=9007199254740991},On.isSet=Kd,On.isString=Zd,On.isSymbol=Jd,On.isTypedArray=Yd,On.isUndefined=function(e){return void 0===e},On.isWeakMap=function(e){return Hd(e)&&na(e)==w},On.isWeakSet=function(e){return Hd(e)&&"[object WeakSet]"==pu(e)},On.join=function(e,t){return null==e?"":un.call(e,t)},On.kebabCase=Fo,On.last=La,On.lastIndexOf=function(e,t,n){var u=null==e?0:e.length;if(!u)return-1;var r=u;return void 0!==n&&(r=(r=no(n))<0?an(u+r,0):dn(r,u-1)),t==t?function(e,t,n){for(var u=n+1;u--;)if(e[u]===t)return u;return u}(e,t,r):_t(e,Dt,r,!0)},On.lowerCase=To,On.lowerFirst=Po,On.lt=Qd,On.lte=Xd,On.max=function(e){return e&&e.length?uu(e,Go,mu):void 0},On.maxBy=function(e,t){return e&&e.length?uu(e,Jr(t,2),mu):void 0},On.mean=function(e){return kt(e,Go)},On.meanBy=function(e,t){return kt(e,Jr(t,2))},On.min=function(e){return e&&e.length?uu(e,Go,Su):void 0},On.minBy=function(e,t){return e&&e.length?uu(e,Jr(t,2),Su):void 0},On.stubArray=ri,On.stubFalse=ai,On.stubObject=function(){return{}},On.stubString=function(){return""},On.stubTrue=function(){return!0},On.multiply=fi,On.nth=function(e,t){return e&&e.length?ju(e,no(t)):void 0},On.noConflict=function(){return Ve._===this&&(Ve._=Ie),this},On.noop=Yo,On.now=md,On.pad=function(e,t,n){e=oo(e);var u=(t=no(t))?qt(e):0;if(!t||u>=t)return e;var r=(t-u)/2;return Nr(Xt(r),n)+e+Nr(Qt(r),n)},On.padEnd=function(e,t,n){e=oo(e);var u=(t=no(t))?qt(e):0;return t&&ut){var u=e;e=t,t=u}if(n||e%1||t%1){var r=ln();return dn(e+r*(t-e+He("1e-"+((r+"").length-1))),t)}return Mu(e,t)},On.reduce=function(e,t,n){var u=Nd(e)?ht:Ct,r=arguments.length<3;return u(e,Jr(t,4),n,r,eu)},On.reduceRight=function(e,t,n){var u=Nd(e)?bt:Ct,r=arguments.length<3;return u(e,Jr(t,4),n,r,tu)},On.repeat=function(e,t,n){return t=(n?oa(e,t,n):void 0===t)?1:no(t),Ru(oo(e),t)},On.replace=function(){var e=arguments,t=oo(e[0]);return e.length<3?t:t.replace(e[1],e[2])},On.result=function(e,t,n){var u=-1,r=(t=or(t,e)).length;for(r||(r=1,e=void 0);++u9007199254740991)return[];var n=4294967295,u=dn(e,4294967295);e-=4294967295;for(var r=It(u,t=Jr(t));++n=a)return e;var o=n-qt(u);if(o<1)return u;var i=d?cr(d,0,o).join(""):e.slice(0,o);if(void 0===r)return i+u;if(d&&(o+=i.length-o),Vd(r)){if(e.slice(o).search(r)){var c,l=i;for(r.global||(r=be(r.source,oo(ue.exec(r))+"g")),r.lastIndex=0;c=r.exec(l);)var f=c.index;i=i.slice(0,void 0===f?o:f)}}else if(e.indexOf(Yu(r),o)!=o){var s=i.lastIndexOf(r);s>-1&&(i=i.slice(0,s))}return i+u},On.unescape=function(e){return(e=oo(e))&&L.test(e)?e.replace(M,Vt):e},On.uniqueId=function(e){var t=++xe;return oo(e)+t},On.upperCase=Lo,On.upperFirst=Bo,On.each=dd,On.eachRight=od,On.first=Ta,Jo(On,(li={},iu(On,(function(e,t){ke.call(On.prototype,t)||(li[t]=e)})),li),{chain:!1}),On.VERSION="4.17.15",ot(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){On[e].placeholder=On})),ot(["drop","take"],(function(e,t){Nn.prototype[e]=function(n){n=void 0===n?1:an(no(n),0);var u=this.__filtered__&&!t?new Nn(this):this.clone();return u.__filtered__?u.__takeCount__=dn(n,u.__takeCount__):u.__views__.push({size:dn(n,4294967295),type:e+(u.__dir__<0?"Right":"")}),u},Nn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),ot(["filter","map","takeWhile"],(function(e,t){var n=t+1,u=1==n||3==n;Nn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Jr(e,3),type:n}),t.__filtered__=t.__filtered__||u,t}})),ot(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Nn.prototype[e]=function(){return this[n](1).value()[0]}})),ot(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Nn.prototype[e]=function(){return this.__filtered__?new Nn(this):this[n](1)}})),Nn.prototype.compact=function(){return this.filter(Go)},Nn.prototype.find=function(e){return this.filter(e).head()},Nn.prototype.findLast=function(e){return this.reverse().find(e)},Nn.prototype.invokeMap=Lu((function(e,t){return"function"==typeof e?new Nn(this):this.map((function(n){return gu(n,e,t)}))})),Nn.prototype.reject=function(e){return this.filter(Dd(Jr(e)))},Nn.prototype.slice=function(e,t){e=no(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Nn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=no(t))<0?n.dropRight(-t):n.take(t-e)),n)},Nn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Nn.prototype.toArray=function(){return this.take(4294967295)},iu(Nn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),u=/^(?:head|last)$/.test(t),r=On[u?"take"+("last"==t?"Right":""):t],a=u||/^find/.test(t);r&&(On.prototype[t]=function(){var t=this.__wrapped__,d=u?[1]:arguments,o=t instanceof Nn,i=d[0],c=o||Nd(t),l=function(e){var t=r.apply(On,mt([e],d));return u&&f?t[0]:t};c&&n&&"function"==typeof i&&1!=i.length&&(o=c=!1);var f=this.__chain__,s=!!this.__actions__.length,p=a&&!f,m=o&&!s;if(!a&&c){t=m?t:new Nn(this);var h=e.apply(t,d);return h.__actions__.push({func:td,args:[l],thisArg:void 0}),new jn(h,f)}return p&&m?e.apply(this,d):(h=this.thru(l),p?u?h.value()[0]:h.value():h)})})),ot(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ye[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",u=/^(?:pop|shift)$/.test(e);On.prototype[e]=function(){var e=arguments;if(u&&!this.__chain__){var r=this.value();return t.apply(Nd(r)?r:[],e)}return this[n]((function(n){return t.apply(Nd(n)?n:[],e)}))}})),iu(Nn.prototype,(function(e,t){var n=On[t];if(n){var u=n.name+"";ke.call(yn,u)||(yn[u]=[]),yn[u].push({name:t,func:n})}})),yn[Or(void 0,2).name]=[{name:"wrapper",func:void 0}],Nn.prototype.clone=function(){var e=new Nn(this.__wrapped__);return e.__actions__=vr(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=vr(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=vr(this.__views__),e},Nn.prototype.reverse=function(){if(this.__filtered__){var e=new Nn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Nn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Nd(e),u=t<0,r=n?e.length:0,a=function(e,t,n){var u=-1,r=n.length;for(;++u=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},On.prototype.plant=function(e){for(var t,n=this;n instanceof An;){var u=Ca(n);u.__index__=0,u.__values__=void 0,t?r.__wrapped__=u:t=u;var r=u;n=n.__wrapped__}return r.__wrapped__=e,t},On.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Nn){var t=e;return this.__actions__.length&&(t=new Nn(this)),(t=t.reverse()).__actions__.push({func:td,args:[Wa],thisArg:void 0}),new jn(t,this.__chain__)}return this.thru(Wa)},On.prototype.toJSON=On.prototype.valueOf=On.prototype.value=function(){return nr(this.__wrapped__,this.__actions__)},On.prototype.first=On.prototype.head,Qe&&(On.prototype[Qe]=function(){return this}),On}();Ve._=Kt,void 0===(r=function(){return Kt}.call(t,n,t,u))||(u.exports=r)}).call(this)}).call(this,n(76),n(448)(e))},444:function(e,t,n){"use strict";var u=n(0);t.a=function(e){void 0===e&&(e=!0),Object(u.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e])}},445:function(e,t,n){"use strict";var u=n(428),r=n(433),a=n(430),d=n(425);t.a=function(){var e=Object(u.a)().siteConfig,t=(e=void 0===e?{}:e).baseUrl,n=e.themeConfig.navbar,o=(n=void 0===n?{}:n).logo,i=void 0===o?{}:o,c=Object(r.a)().isDarkTheme,l=i.href||t,f={};i.target?f={target:i.target}:Object(d.a)(l)||(f={rel:"noopener noreferrer",target:"_blank"});var s=i.srcDark&&c?i.srcDark:i.src;return{logoLink:l,logoLinkProps:f,logoImageUrl:Object(a.a)(s),logoAlt:i.alt}}},447:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n(77),n(465),n(431),n(78);var u=n(467),r=n.n(u);function a(e,t){var n=new r.a;return e.map((function(e){var u=e;return"string"==typeof e&&(u={label:e,permalink:"/blog/tags/"+n.slug(e)}),function(e,t){var n=e.label.split(": ",2),u=n[0],r=n[1],a="primary";switch(t){case"blog":case"guides":a=function(e){switch(e){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(u)}return{category:u,count:e.count,label:e.label,permalink:e.permalink,style:a,value:r}}(u,t)}))}},448:function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},449:function(e,t,n){"use strict";var u=n(12),r=n(26),a=n(509),d="".endsWith;u(u.P+u.F*n(510)("endsWith"),"String",{endsWith:function(e){var t=a(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,u=r(t.length),o=void 0===n?u:Math.min(r(n),u),i=String(e);return d?d.call(t,i,o):t.slice(o-i.length,o)===i}})},450:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(428),d=n(145),o=n.n(d);t.a=function(){var e=Object(a.a)().siteConfig,t=(e=void 0===e?{}:e).themeConfig.announcementBar,n=void 0===t?{}:t,d=n.id,i=n.content,c=n.backgroundColor,l=n.textColor,f=Object(u.useState)(!0),s=f[0],p=f[1];return Object(u.useEffect)((function(){var e=localStorage.getItem("docusaurus.announcement.id"),t=d!==e;localStorage.setItem("docusaurus.announcement.id",d),t&&localStorage.setItem("docusaurus.announcement.dismiss",!1),(t||"false"===localStorage.getItem("docusaurus.announcement.dismiss"))&&p(!1)}),[]),!i||s?null:r.a.createElement("div",{className:o.a.announcementBar,style:{backgroundColor:c,color:l},role:"banner"},r.a.createElement("div",{className:o.a.announcementBarContent,dangerouslySetInnerHTML:{__html:i}}),r.a.createElement("button",{type:"button",className:o.a.announcementBarClose,onClick:function(){localStorage.setItem("docusaurus.announcement.dismiss",!0),p(!0)},"aria-label":"Close"},r.a.createElement("span",{"aria-hidden":"true"},"\xd7")))}},451:function(e,t,n){"use strict";var u=n(0);u.PureComponent},452:function(e,t,n){"use strict";n(58),n(29),n(22),n(21),n(79);var u=n(0),r=n.n(u),a=n(415),d=n.n(a),o=n(428),i=n(464);n(146);t.a=function(e){var t=Object(u.useState)(!1),a=t[0],c=t[1],l=Object(u.useRef)(null),f=Object(o.a)().siteConfig,s=(void 0===f?{}:f).themeConfig.algolia,p=Object(i.c)();var m=function(e){void 0===e&&(e=!0),a||Promise.all([n.e(261).then(n.t.bind(null,562,7)),n.e(168).then(n.t.bind(null,575,7))]).then((function(t){var n=t[0].default;c(!0),window.docsearch=n,function(e){window.docsearch({appId:s.appId,apiKey:s.apiKey,indexName:s.indexName,inputSelector:"#search_input_react",algoliaOptions:s.algoliaOptions,handleSelected:function(e,t,n){var u=document.createElement("a");u.href=n.url;var r="#__docusaurus"===u.hash?""+u.pathname:""+u.pathname+u.hash;p.push(r)}}),e&&l.current.focus()}(e)}))},h=Object(u.useCallback)((function(){m(),a&&l.current.focus(),e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]),b=Object(u.useCallback)((function(){e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]),v=Object(u.useCallback)((function(e){var t="mouseover"!==e.type;m(t)}));return r.a.createElement("div",{className:"navbar__search",key:"search-box"},r.a.createElement("span",{"aria-label":"expand searchbar",role:"button",className:d()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:h,onKeyDown:h,tabIndex:0}),r.a.createElement("input",{id:"search_input_react",type:"search",placeholder:"Search","aria-label":"Search",className:d()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onMouseOver:v,onFocus:v,onBlur:b,ref:l}))}},453:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;tthis.startX&&(this.setState({checked:!0}),this.startX=t,this.activated=tn?this.previouslyChecked!==this.state.checked&&(this.setState({checked:!1}),this.previouslyChecked=this.state.checked,t.click()):this.startX-4=0||Object.prototype.hasOwnProperty.call(e,u)&&(n[u]=e[u]);return n}(t,["className","icons"])),a=(0,o.default)("react-toggle",{"react-toggle--checked":this.state.checked,"react-toggle--focus":this.state.hasFocus,"react-toggle--disabled":this.props.disabled},n);return d.default.createElement("div",{className:a,onClick:this.handleClick,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd},d.default.createElement("div",{className:"react-toggle-track"},d.default.createElement("div",{className:"react-toggle-track-check"},this.getIcon("checked")),d.default.createElement("div",{className:"react-toggle-track-x"},this.getIcon("unchecked"))),d.default.createElement("div",{className:"react-toggle-thumb"}),d.default.createElement("input",u({},r,{ref:function(t){e.input=t},onFocus:this.handleFocus,onBlur:this.handleBlur,className:"react-toggle-screenreader-only",type:"checkbox"})))}}]),t}(a.PureComponent);t.default=p,p.displayName="Toggle",p.defaultProps={icons:{checked:d.default.createElement(c.default,null),unchecked:d.default.createElement(l.default,null)}},p.propTypes={checked:i.default.bool,disabled:i.default.bool,defaultChecked:i.default.bool,onChange:i.default.func,onFocus:i.default.func,onBlur:i.default.func,className:i.default.string,name:i.default.string,value:i.default.string,id:i.default.string,"aria-labelledby":i.default.string,"aria-label":i.default.string,icons:i.default.oneOfType([i.default.bool,i.default.shape({checked:i.default.node,unchecked:i.default.node})])}},454:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=(n(84),n(465),function(){var e=Object(u.useState)({}),t=e[0],n=e[1],r=Object(u.useCallback)((function(e,t){try{localStorage.setItem("docusaurus.tab."+e,t)}catch(n){console.error(n)}}),[]);return Object(u.useEffect)((function(){try{for(var e={},t=0;t=f?d(!1):e+n1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,e))throw new u("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=x(e),r=n.length>0?n[0]:"",d=S("%"+r+"%",t),i=d.name,c=d.value,l=!1,f=d.alias;f&&(r=f[0],y(n,g([0,1],f)));for(var s=1,p=!0;s=n.length){var D=o(c,h);c=(p=!!D)&&"get"in D&&!("originalValue"in D.get)?D.get:c[h]}else p=v(c,h),c=c[h];p&&!l&&(m[i]=c)}}return c}},462:function(e,t,n){"use strict";var u=n(501);e.exports=Function.prototype.bind||u},463:function(e,t,n){"use strict";var u=String.prototype.replace,r=/%20/g,a="RFC1738",d="RFC3986";e.exports={default:d,formatters:{RFC1738:function(e){return u.call(e,r,"+")},RFC3986:function(e){return String(e)}},RFC1738:a,RFC3986:d}},464:function(e,t,n){"use strict";var u=n(39);n.d(t,"a",(function(){return u.c})),n.d(t,"b",(function(){return u.d})),n.d(t,"c",(function(){return u.e})),n.d(t,"d",(function(){return u.f}))},466:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);t.a=function(e){var t=e.count,n=e.label,u=e.permalink,d=e.style,i=e.value,c=e.valueOnly;return r.a.createElement(a.a,{to:u+"/",className:o()("badge","badge--rounded","badge--"+d)},c?i:n,t&&r.a.createElement(r.a.Fragment,null," (",t,")"))}},467:function(e,t,n){var u=n(468);e.exports=o;var r=Object.hasOwnProperty,a=/\s/g,d=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function i(e,t){return"string"!=typeof e?"":(t||(e=e.toLowerCase()),e.trim().replace(d,"").replace(u(),"").replace(a,"-"))}o.prototype.slug=function(e,t){for(var n=i(e,!0===t),u=n;r.call(this.occurrences,n);)this.occurrences[u]++,n=u+"-"+this.occurrences[u];return this.occurrences[n]=0,n},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=i},468:function(e,t){e.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},470:function(e,t,n){"use strict";var u=n(463),r=Object.prototype.hasOwnProperty,a=Array.isArray,d=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),o=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},u=0;u1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var u=[],r=0;r=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||a===u.RFC1738&&(40===l||41===l)?i+=o.charAt(c):l<128?i+=d[l]:l<2048?i+=d[192|l>>6]+d[128|63&l]:l<55296||l>=57344?i+=d[224|l>>12]+d[128|l>>6&63]+d[128|63&l]:(c+=1,l=65536+((1023&l)<<10|1023&o.charCodeAt(c)),i+=d[240|l>>18]+d[128|l>>12&63]+d[128|l>>6&63]+d[128|63&l])}return i},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],u=0;u{if("string"!=typeof e)throw new TypeError("Expected a string");return e=(e=(e=u(e)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+e.slice(1)};e.exports=r,e.exports.default=r},477:function(e,t,n){"use strict";var u=n(0),r=n.n(u).a.createContext({isDarkTheme:!1,setLightTheme:function(){},setDarkTheme:function(){}});t.a=r},479:function(e,t,n){"use strict";(function(e){var u=n(1),r=(n(438),n(439),n(78),n(77),n(522),n(0)),a=n.n(r),d=n(523),o=n.n(d),i=n(555),c=n(53),l=n(415),f=n.n(l),s=n(535),p=n.n(s),m=n(524),h=n.n(m),b=n(428),v=n(433),g=n(148),y=n.n(g);(void 0!==e?e:window).Prism=c.a,n(525),n(526),n(527),n(528),n(90),n(529),n(530),n(531),n(532),n(533),n(534);var _=/{([\d,-]+)}/,E=/title=".*"/;t.a=function(e){var t=e.children,n=e.className,d=e.metastring,c=Object(b.a)().siteConfig.themeConfig.prism,l=void 0===c?{}:c,s=Object(r.useState)(!1),m=s[0],g=s[1],w=Object(r.useState)(!1),D=w[0],k=w[1];Object(r.useEffect)((function(){k(!0)}),[]);var x=Object(r.useRef)(null),S=Object(r.useRef)(null),C=[],O="",I=Object(v.a)().isDarkTheme,A=l.theme||p.a,j=l.darkTheme||A,N=I?j:A;if(d&&_.test(d)){var F=d.match(_)[1];C=h.a.parse(F).filter((function(e){return e>0}))}d&&E.test(d)&&(O=d.match(E)[0].split("title=")[1].replace(/"+/g,"")),Object(r.useEffect)((function(){var e;return S.current&&(e=new o.a(S.current,{target:function(){return x.current}})),function(){e&&e.destroy()}}),[S.current,x.current]);var T=n&&n.replace(/language-/,"");!T&&l.defaultLanguage&&(T=l.defaultLanguage);var P=function(){window.getSelection().empty(),g(!0),setTimeout((function(){return g(!1)}),2e3)};return a.a.createElement(i.a,Object(u.a)({},i.b,{key:D,theme:N,code:t.trim(),language:T}),(function(e){var t,n,r=e.className,d=e.style,o=e.tokens,i=e.getLineProps,c=e.getTokenProps;return a.a.createElement(a.a.Fragment,null,O&&a.a.createElement("div",{style:d,className:y.a.codeBlockTitle},O),a.a.createElement("div",{className:y.a.codeBlockContent},a.a.createElement("button",{ref:S,type:"button","aria-label":"Copy code to clipboard",className:f()(y.a.copyButton,(t={},t[y.a.copyButtonWithTitle]=O,t)),onClick:P},m?"Copied":"Copy"),a.a.createElement("pre",{className:f()(r,y.a.codeBlock,(n={},n[y.a.codeBlockWithTitle]=O,n))},a.a.createElement("div",{ref:x,className:y.a.codeBlockLines,style:d},o.map((function(e,t){1===e.length&&""===e[0].content&&(e[0].content="\n");var n=i({line:e,key:t});return C.includes(t+1)&&(n.className=n.className+" docusaurus-highlight-code-line"),a.a.createElement("div",Object(u.a)({key:t},n),e.map((function(e,t){return a.a.createElement("span",Object(u.a)({key:t},c({token:e,key:t})))})))}))))))}))}}).call(this,n(76))},480:function(e,t,n){"use strict";var u=n(0),r=n.n(u);n(416),n(144);t.a=function(e){var t=e.children,n=Object(u.useState)(!1),a=n[0],d=n[1];return a?r.a.createElement("div",{className:"code-explanation code-explanation--expanded"},t,r.a.createElement("div",{className:"code-explanation--toggle",onClick:function(){return d(!a)}},r.a.createElement("i",{className:"feather icon-arrow-up-circle"})," hide")):r.a.createElement("div",{className:"code-explanation code-explanation--collapsed"},r.a.createElement("div",{className:"code-explanation--toggle",onClick:function(){return d(!a)}},r.a.createElement("i",{className:"feather icon-info"})," explain this command"))}},481:function(e,t,n){"use strict";var u=n(30),r=n(12),a=n(27),d=n(91),o=n(92),i=n(26),c=n(537),l=n(93);r(r.S+r.F*!n(83)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,r,f,s=a(e),p="function"==typeof this?this:Array,m=arguments.length,h=m>1?arguments[1]:void 0,b=void 0!==h,v=0,g=l(s);if(b&&(h=u(h,m>2?arguments[2]:void 0,2)),null==g||p==Array&&o(g))for(n=new p(t=i(s.length));t>v;v++)c(n,v,b?h(s[v],v):s[v]);else for(f=g.call(s),n=new p;!(r=f.next()).done;v++)c(n,v,b?d(f,h,[r.value,v],!0):r.value);return n.length=v,n}})},482:function(e,t,n){"use strict";var u=n(538),r=n(484);e.exports=n(539)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return u.def(r(this,"Set"),e=0===e?0:e,e)}},u)},483:function(e,t,n){var u=n(40)("meta"),r=n(13),a=n(31),d=n(28).f,o=0,i=Object.isExtensible||function(){return!0},c=!n(14)((function(){return i(Object.preventExtensions({}))})),l=function(e){d(e,u,{value:{i:"O"+ ++o,w:{}}})},f=e.exports={KEY:u,NEED:!1,fastKey:function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,u)){if(!i(e))return"F";if(!t)return"E";l(e)}return e[u].i},getWeak:function(e,t){if(!a(e,u)){if(!i(e))return!0;if(!t)return!1;l(e)}return e[u].w},onFreeze:function(e){return c&&f.NEED&&i(e)&&!a(e,u)&&l(e),e}}},484:function(e,t,n){var u=n(13);e.exports=function(e,t){if(!u(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},485:function(e,t,n){"use strict";const u=n(486);e.exports=(e,t)=>{if("string"!=typeof e)throw new TypeError("Expected a string");t=void 0===t?"_":t;const n=u("([\\p{Ll}\\d])(\\p{Lu})","g"),r=u("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return e.replace(n,`$1${t}$2`).replace(r,`$1${t}$2`).toLowerCase()}},486:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=f(n(487)),r=f(n(488)),a=f(n(489)),d=f(n(490)),o=f(n(491)),i=f(n(492)),c=f(n(493)),l=f(n(494));function f(e){return e&&e.__esModule?e:{default:e}}(0,r.default)(u.default),(0,a.default)(u.default),(0,d.default)(u.default),(0,o.default)(u.default),(0,i.default)(u.default),(0,c.default)(u.default),(0,l.default)(u.default),t.default=u.default,e.exports=t.default},487:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u={astral:!1},r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},a={},d={},o={},i=[],c={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},l=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,f=void 0===r.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(e){var t=!0;try{new RegExp("",e)}catch(n){t=!1}return t}var h=m("u"),b=m("y"),v={g:!0,i:!0,m:!0,u:h,y:b};function g(e,t,n,u,r){var a=void 0;if(e.xregexp={captureNames:t},r)return e;if(e.__proto__)e.__proto__=j.prototype;else for(a in j.prototype)e[a]=j.prototype[a];return e.xregexp.source=n,e.xregexp.flags=u?u.split("").sort().join(""):u,e}function y(e){return r.replace.call(e,/([\s\S])(?=[\s\S]*\1)/g,"")}function _(e,t){if(!j.isRegExp(e))throw new TypeError("Type RegExp expected");var n=e.xregexp||{},u=function(e){return s?e.flags:r.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(e))[1]}(e),a="",d="",o=null,i=null;return(t=t||{}).removeG&&(d+="g"),t.removeY&&(d+="y"),d&&(u=r.replace.call(u,new RegExp("["+d+"]+","g"),"")),t.addG&&(a+="g"),t.addY&&(a+="y"),a&&(u=y(u+a)),t.isInternalOnly||(void 0!==n.source&&(o=n.source),null!=n.flags&&(i=a?y(n.flags+a):n.flags)),e=g(new RegExp(t.source||e.source,u),function(e){return!(!e.xregexp||!e.xregexp.captureNames)}(e)?n.captureNames.slice(0):null,o,i,t.isInternalOnly)}function E(e){return parseInt(e,16)}function w(e,t,n){return"("===e.input[e.index-1]||")"===e.input[e.index+e[0].length]||function(e,t,n){return r.test.call(-1!==n.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,e.slice(t))}(e.input,e.index+e[0].length,n)?"":"(?:)"}function D(e){return parseInt(e,10).toString(16)}function k(e,t){return p.call(e)==="[object "+t+"]"}function x(e){for(;e.length<4;)e="0"+e;return e}function S(e){var t={};return k(e,"String")?(j.forEach(e,/[^\s,]+/,(function(e){t[e]=!0})),t):e}function C(e){if(!/^[\w$]$/.test(e))throw new Error("Flag must be a single character A-Za-z0-9_$");v[e]=!0}function O(e,t,n,u,r){for(var a=i.length,d=e[n],o=null,c=void 0,l=void 0;a--;)if(!((l=i[a]).leadChar&&l.leadChar!==d||l.scope!==u&&"all"!==l.scope||l.flag&&-1===t.indexOf(l.flag))&&(c=j.exec(e,l.regex,n,"sticky"))){o={matchLength:c[0].length,output:l.handler.call(r,c,u,t),reparse:l.reparse};break}return o}function I(e){u.astral=e}function A(e){if(null==e)throw new TypeError("Cannot convert null or undefined to object");return e}function j(e,t){if(j.isRegExp(e)){if(void 0!==t)throw new TypeError("Cannot supply flags when copying a RegExp");return _(e)}if(e=void 0===e?"":String(e),t=void 0===t?"":String(t),j.isInstalled("astral")&&-1===t.indexOf("A")&&(t+="A"),o[e]||(o[e]={}),!o[e][t]){for(var n={hasNamedCapture:!1,captureNames:[]},u="default",a="",d=0,i=void 0,l=function(e,t){var n=void 0;if(y(t)!==t)throw new SyntaxError("Invalid duplicate regex flag "+t);for(e=r.replace.call(e,/^\(\?([\w$]+)\)/,(function(e,n){if(r.test.call(/[gy]/,n))throw new SyntaxError("Cannot use flag g or y in mode modifier "+e);return t=y(t+n),""})),n=0;n"}else if(n)return"\\"+(+n+d);return e}if(!k(e,"Array")||!e.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var c=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,l=[],f=void 0,s=0;s1&&-1!==n.indexOf("")){var u=_(this,{removeG:!0,isInternalOnly:!0});r.replace.call(String(e).slice(n.index),u,(function(){for(var e=arguments.length,t=Array(e),u=0;un.index&&(this.lastIndex=n.index)}return this.global||(this.lastIndex=t),n},a.test=function(e){return!!a.exec.call(this,e)},a.match=function(e){if(j.isRegExp(e)){if(e.global){var t=r.match.apply(this,arguments);return e.lastIndex=0,t}}else e=new RegExp(e);return a.exec.call(e,A(this))},a.replace=function(e,t){var n=j.isRegExp(e),u=void 0,a=void 0,d=void 0;return n?(e.xregexp&&(a=e.xregexp.captureNames),u=e.lastIndex):e+="",d=k(t,"Function")?r.replace.call(String(this),e,(function(){for(var u=arguments.length,r=Array(u),d=0;dn.length-3)throw new SyntaxError("Backreference to undefined group "+e);return n[r]||""}throw new SyntaxError("Invalid token "+e)}})),n&&(e.global?e.lastIndex=0:e.lastIndex=u),d},a.split=function(e,t){if(!j.isRegExp(e))return r.split.apply(this,arguments);var n=String(this),u=[],a=e.lastIndex,d=0,o=void 0;return t=(void 0===t?-1:t)>>>0,j.forEach(n,e,(function(e){e.index+e[0].length>d&&(u.push(n.slice(d,e.index)),e.length>1&&e.indext?u.slice(0,t):u},j.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(e,t){if("B"===e[1]&&"default"===t)return e[0];throw new SyntaxError("Invalid escape "+e[0])}),{scope:"all",leadChar:"\\"}),j.addToken(/\\u{([\dA-Fa-f]+)}/,(function(e,t,n){var u=E(e[1]);if(u>1114111)throw new SyntaxError("Invalid Unicode code point "+e[0]);if(u<=65535)return"\\u"+x(D(u));if(h&&-1!==n.indexOf("u"))return e[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),j.addToken(/\[(\^?)\]/,(function(e){return e[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),j.addToken(/\(\?#[^)]*\)/,w,{leadChar:"("}),j.addToken(/\s+|#[^\n]*\n?/,w,{flag:"x"}),j.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),j.addToken(/\\k<([\w$]+)>/,(function(e){var t=isNaN(e[1])?this.captureNames.indexOf(e[1])+1:+e[1],n=e.index+e[0].length;if(!t||t>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+e[0]);return"\\"+t+(n===e.input.length||isNaN(e.input[n])?"":"(?:)")}),{leadChar:"\\"}),j.addToken(/\\(\d+)/,(function(e,t){if(!("default"===t&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&"0"!==e[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+e[0]);return e[0]}),{scope:"all",leadChar:"\\"}),j.addToken(/\(\?P?<([\w$]+)>/,(function(e){if(!isNaN(e[1]))throw new SyntaxError("Cannot use integer as capture name "+e[0]);if("length"===e[1]||"__proto__"===e[1])throw new SyntaxError("Cannot use reserved word as capture name "+e[0]);if(-1!==this.captureNames.indexOf(e[1]))throw new SyntaxError("Cannot use same name for multiple groups "+e[0]);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),j.addToken(/\((?!\?)/,(function(e,t,n){return-1!==n.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),t.default=j,e.exports=t.default},488:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,n=e.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,t],"g",{conjunction:"or"});function u(e){var t=/^(?:\(\?:\))*\^/,n=/\$(?:\(\?:\))*$/;return t.test(e)&&n.test(e)&&n.test(e.replace(/\\[\s\S]/g,""))?e.replace(t,"").replace(n,""):e}function r(t,n){var u=n?"x":"";return e.isRegExp(t)?t.xregexp&&t.xregexp.captureNames?t:e(t.source,u):e(t,u)}function a(t){return t instanceof RegExp?t:e.escape(t)}function d(e,t,n){return e["subpattern"+n]=t,e}function o(e,t,n){return e+(t1?u-1:0),i=1;i"):i="(?:",h=m,""+i+l[d].pattern.replace(t,(function(e,t,n){if(t){if(o=l[d].names[m-h],++m,o)return"(?<"+o+">"}else if(n)return c=+n-1,l[d].names[c]?"\\k<"+l[d].names[c]+">":"\\"+(+n+h);return e}))+")"}if(r){if(o=g[b],v[++b]=++m,o)return"(?<"+o+">"}else if(a)return g[c=+a-1]?"\\k<"+g[c]+">":"\\"+v[+a];return e}));return e(y,o)}},e.exports=t.default},489:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(e,t,n,u){return{name:e,value:t,start:n,end:u}}e.matchRecursive=function(n,u,r,a,d){d=d||{};var o=-1!==(a=a||"").indexOf("g"),i=-1!==a.indexOf("y"),c=a.replace(/y/g,""),l=d.escapeChar,f=d.valueNames,s=[],p=0,m=0,h=0,b=0,v=void 0,g=void 0,y=void 0,_=void 0,E=void 0;if(u=e(u,c),r=e(r,c),l){if(l.length>1)throw new Error("Cannot use more than one escape character");l=e.escape(l),E=new RegExp("(?:"+l+"[\\S\\s]|(?:(?!"+e.union([u,r],"",{conjunction:"or"}).source+")[^"+l+"])+)+",a.replace(/[^imu]+/g,""))}for(;;){if(l&&(h+=(e.exec(n,E,h,"sticky")||[""])[0].length),y=e.exec(n,u,h),_=e.exec(n,r,h),y&&_&&(y.index<=_.index?_=null:y=null),y||_)h=(m=(y||_).index)+(y||_)[0].length;else if(!p)break;if(i&&!p&&m>b)break;if(y)p||(v=m,g=h),++p;else{if(!_||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(f?(f[0]&&v>b&&s.push(t(f[0],n.slice(b,v),b,v)),f[1]&&s.push(t(f[1],n.slice(v,g),v,g)),f[2]&&s.push(t(f[2],n.slice(g,m),g,m)),f[3]&&s.push(t(f[3],n.slice(m,h),m,h))):s.push(n.slice(g,m)),b=h,!o))break}m===h&&++h}return o&&!i&&f&&f[0]&&n.length>b&&s.push(t(f[0],n.slice(b),b,n.length)),s}},e.exports=t.default},490:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t={},n=e._dec,u=e._hex,r=e._pad4;function a(e){return e.replace(/[- _]+/g,"").toLowerCase()}function d(e){var t=/^\\[xu](.+)/.exec(e);return t?n(t[1]):e.charCodeAt("\\"===e[0]?1:0)}function o(n){var a,o,i;return t[n]["b!"]||(t[n]["b!"]=(a=t[n].bmp,o="",i=-1,e.forEach(a,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(e){var t=d(e[1]);t>i+1&&(o+="\\u"+r(u(i+1)),t>i+2&&(o+="-\\u"+r(u(t-1)))),i=d(e[2]||e[1])})),i<65535&&(o+="\\u"+r(u(i+1)),i<65534&&(o+="-\\uFFFF")),o))}function i(e,n){var u=n?"a!":"a=";return t[e][u]||(t[e][u]=function(e,n){var u=t[e],r="";return u.bmp&&!u.isBmpLast&&(r="["+u.bmp+"]"+(u.astral?"|":"")),u.astral&&(r+=u.astral),u.isBmpLast&&u.bmp&&(r+=(u.astral?"|":"")+"["+u.bmp+"]"),n?"(?:(?!"+r+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+r+")"}(e,n))}e.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(e,n,u){var r="P"===e[1]||!!e[2],d=-1!==u.indexOf("A"),c=a(e[4]||e[3]),l=t[c];if("P"===e[1]&&e[2])throw new SyntaxError("Invalid double negation "+e[0]);if(!t.hasOwnProperty(c))throw new SyntaxError("Unknown Unicode token "+e[0]);if(l.inverseOf){if(c=a(l.inverseOf),!t.hasOwnProperty(c))throw new ReferenceError("Unicode token missing data "+e[0]+" -> "+l.inverseOf);l=t[c],r=!r}if(!l.bmp&&!d)throw new SyntaxError("Astral mode required for Unicode token "+e[0]);if(d){if("class"===n)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return i(c,r)}return"class"===n?r?o(c):l.bmp:(r?"[^":"[")+l.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),e.addUnicodeData=function(n){for(var u=void 0,r=0;r\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},e.exports=t.default},493:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var t=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];t.push({name:"Assigned",inverseOf:"Cn"}),e.addUnicodeData(t)},e.exports=t.default},494:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");e.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},e.exports=t.default},495:function(e,t,n){"use strict";var u=n(0),r=n.n(u);t.a=function(e){var t=e.text;return r.a.createElement("section",{className:"empty"},r.a.createElement("div",{className:"icon"},r.a.createElement("img",{src:"/img/logo-square.svg",alt:"The Qovery Logo"})),r.a.createElement("div",{className:"text"},t))}},496:function(e,t,n){"use strict";var u=n(497),r=n(507),a=n(463);e.exports={formats:a,parse:r,stringify:u}},497:function(e,t,n){"use strict";var u=n(498),r=n(470),a=n(463),d=Object.prototype.hasOwnProperty,o={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},i=Array.isArray,c=String.prototype.split,l=Array.prototype.push,f=function(e,t){l.apply(e,i(t)?t:[t])},s=Date.prototype.toISOString,p=a.default,m={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,format:p,formatter:a.formatters[p],indices:!1,serializeDate:function(e){return s.call(e)},skipNulls:!1,strictNullHandling:!1},h={},b=function e(t,n,a,d,o,l,s,p,b,v,g,y,_,E,w,D){for(var k,x=t,S=D,C=0,O=!1;void 0!==(S=S.get(h))&&!O;){var I=S.get(t);if(C+=1,void 0!==I){if(I===C)throw new RangeError("Cyclic object value");O=!0}void 0===S.get(h)&&(C=0)}if("function"==typeof p?x=p(n,x):x instanceof Date?x=g(x):"comma"===a&&i(x)&&(x=r.maybeMap(x,(function(e){return e instanceof Date?g(e):e}))),null===x){if(o)return s&&!E?s(n,m.encoder,w,"key",y):n;x=""}if("string"==typeof(k=x)||"number"==typeof k||"boolean"==typeof k||"symbol"==typeof k||"bigint"==typeof k||r.isBuffer(x)){if(s){var A=E?n:s(n,m.encoder,w,"key",y);if("comma"===a&&E){for(var j=c.call(String(x),","),N="",F=0;F0?x.join(",")||null:void 0}];else if(i(p))T=p;else{var M=Object.keys(x);T=b?M.sort(b):M}for(var R=d&&i(x)&&1===x.length?n+"[]":n,L=0;L0?E+_:""}},498:function(e,t,n){"use strict";var u=n(461),r=n(503),a=n(505),d=u("%TypeError%"),o=u("%WeakMap%",!0),i=u("%Map%",!0),c=r("WeakMap.prototype.get",!0),l=r("WeakMap.prototype.set",!0),f=r("WeakMap.prototype.has",!0),s=r("Map.prototype.get",!0),p=r("Map.prototype.set",!0),m=r("Map.prototype.has",!0),h=function(e,t){for(var n,u=e;null!==(n=u.next);u=n)if(n.key===t)return u.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,u={assert:function(e){if(!u.has(e))throw new d("Side channel does not contain "+a(e))},get:function(u){if(o&&u&&("object"==typeof u||"function"==typeof u)){if(e)return c(e,u)}else if(i){if(t)return s(t,u)}else if(n)return function(e,t){var n=h(e,t);return n&&n.value}(n,u)},has:function(u){if(o&&u&&("object"==typeof u||"function"==typeof u)){if(e)return f(e,u)}else if(i){if(t)return m(t,u)}else if(n)return function(e,t){return!!h(e,t)}(n,u);return!1},set:function(u,r){o&&u&&("object"==typeof u||"function"==typeof u)?(e||(e=new o),l(e,u,r)):i?(t||(t=new i),p(t,u,r)):(n||(n={key:{},next:null}),function(e,t,n){var u=h(e,t);u?u.value=n:e.next={key:t,next:e.next,value:n}}(n,u,r))}};return u}},499:function(e,t,n){"use strict";var u="undefined"!=typeof Symbol&&Symbol,r=n(500);e.exports=function(){return"function"==typeof u&&("function"==typeof Symbol&&("symbol"==typeof u("foo")&&("symbol"==typeof Symbol("bar")&&r())))}},500:function(e,t,n){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var u=Object.getOwnPropertySymbols(e);if(1!==u.length||u[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},501:function(e,t,n){"use strict";var u="Function.prototype.bind called on incompatible ",r=Array.prototype.slice,a=Object.prototype.toString;e.exports=function(e){var t=this;if("function"!=typeof t||"[object Function]"!==a.call(t))throw new TypeError(u+t);for(var n,d=r.call(arguments,1),o=function(){if(this instanceof n){var u=t.apply(this,d.concat(r.call(arguments)));return Object(u)===u?u:this}return t.apply(e,d.concat(r.call(arguments)))},i=Math.max(0,t.length-d.length),c=[],l=0;l-1?r(n):n}},504:function(e,t,n){"use strict";var u=n(462),r=n(461),a=r("%Function.prototype.apply%"),d=r("%Function.prototype.call%"),o=r("%Reflect.apply%",!0)||u.call(d,a),i=r("%Object.getOwnPropertyDescriptor%",!0),c=r("%Object.defineProperty%",!0),l=r("%Math.max%");if(c)try{c({},"a",{value:1})}catch(s){c=null}e.exports=function(e){var t=o(u,d,arguments);if(i&&c){var n=i(t,"length");n.configurable&&c(t,"length",{value:1+l(0,e.length-(arguments.length-1))})}return t};var f=function(){return o(u,a,arguments)};c?c(e.exports,"apply",{value:f}):e.exports.apply=f},505:function(e,t,n){var u="function"==typeof Map&&Map.prototype,r=Object.getOwnPropertyDescriptor&&u?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=u&&r&&"function"==typeof r.get?r.get:null,d=u&&Map.prototype.forEach,o="function"==typeof Set&&Set.prototype,i=Object.getOwnPropertyDescriptor&&o?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=o&&i&&"function"==typeof i.get?i.get:null,l=o&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,s="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,m=Boolean.prototype.valueOf,h=Object.prototype.toString,b=Function.prototype.toString,v=String.prototype.match,g=String.prototype.slice,y=String.prototype.replace,_=String.prototype.toUpperCase,E=String.prototype.toLowerCase,w=RegExp.prototype.test,D=Array.prototype.concat,k=Array.prototype.join,x=Array.prototype.slice,S=Math.floor,C="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,A="function"==typeof Symbol&&"object"==typeof Symbol.iterator,j="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===A||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,F=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function T(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||w.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var u=e<0?-S(-e):S(e);if(u!==e){var r=String(u),a=g.call(t,r.length+1);return y.call(r,n,"$&_")+"."+y.call(y.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return y.call(t,n,"$&_")}var P=n(506),M=P.custom,R=W(M)?M:null;function L(e,t,n){var u="double"===(n.quoteStyle||t)?'"':"'";return u+e+u}function B(e){return y.call(String(e),/"/g,""")}function z(e){return!("[object Array]"!==q(e)||j&&"object"==typeof e&&j in e)}function U(e){return!("[object RegExp]"!==q(e)||j&&"object"==typeof e&&j in e)}function W(e){if(A)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!I)return!1;try{return I.call(e),!0}catch(t){}return!1}e.exports=function e(t,n,u,r){var o=n||{};if($(o,"quoteStyle")&&"single"!==o.quoteStyle&&"double"!==o.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if($(o,"maxStringLength")&&("number"==typeof o.maxStringLength?o.maxStringLength<0&&o.maxStringLength!==1/0:null!==o.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var i=!$(o,"customInspect")||o.customInspect;if("boolean"!=typeof i&&"symbol"!==i)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if($(o,"indent")&&null!==o.indent&&"\t"!==o.indent&&!(parseInt(o.indent,10)===o.indent&&o.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if($(o,"numericSeparator")&&"boolean"!=typeof o.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=o.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return function e(t,n){if(t.length>n.maxStringLength){var u=t.length-n.maxStringLength,r="... "+u+" more character"+(u>1?"s":"");return e(g.call(t,0,n.maxStringLength),n)+r}return L(y.call(y.call(t,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,V),"single",n)}(t,o);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var _=String(t);return h?T(t,_):_}if("bigint"==typeof t){var w=String(t)+"n";return h?T(t,w):w}var S=void 0===o.depth?5:o.depth;if(void 0===u&&(u=0),u>=S&&S>0&&"object"==typeof t)return z(t)?"[Array]":"[Object]";var O=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=k.call(Array(e.indent+1)," ")}return{base:n,prev:k.call(Array(t+1),n)}}(o,u);if(void 0===r)r=[];else if(G(r,t)>=0)return"[Circular]";function M(t,n,a){if(n&&(r=x.call(r)).push(n),a){var d={depth:o.depth};return $(o,"quoteStyle")&&(d.quoteStyle=o.quoteStyle),e(t,d,u+1,r)}return e(t,o,u+1,r)}if("function"==typeof t&&!U(t)){var H=function(e){if(e.name)return e.name;var t=v.call(b.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),X=Q(t,M);return"[Function"+(H?": "+H:" (anonymous)")+"]"+(X.length>0?" { "+k.call(X,", ")+" }":"")}if(W(t)){var ee=A?y.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):I.call(t);return"object"!=typeof t||A?ee:K(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var te="<"+E.call(String(t.nodeName)),ne=t.attributes||[],ue=0;ue"}if(z(t)){if(0===t.length)return"[]";var re=Q(t,M);return O&&!function(e){for(var t=0;t=0)return!1;return!0}(re)?"["+Y(re,O)+"]":"[ "+k.call(re,", ")+" ]"}if(function(e){return!("[object Error]"!==q(e)||j&&"object"==typeof e&&j in e)}(t)){var ae=Q(t,M);return"cause"in Error.prototype||!("cause"in t)||N.call(t,"cause")?0===ae.length?"["+String(t)+"]":"{ ["+String(t)+"] "+k.call(ae,", ")+" }":"{ ["+String(t)+"] "+k.call(D.call("[cause]: "+M(t.cause),ae),", ")+" }"}if("object"==typeof t&&i){if(R&&"function"==typeof t[R]&&P)return P(t,{depth:S-u});if("symbol"!==i&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{c.call(e)}catch(te){return!0}return e instanceof Map}catch(t){}return!1}(t)){var de=[];return d.call(t,(function(e,n){de.push(M(n,t,!0)+" => "+M(e,t))})),J("Map",a.call(t),de,O)}if(function(e){if(!c||!e||"object"!=typeof e)return!1;try{c.call(e);try{a.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var oe=[];return l.call(t,(function(e){oe.push(M(e,t))})),J("Set",c.call(t),oe,O)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{s.call(e,s)}catch(te){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return Z("WeakMap");if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e,s);try{f.call(e,f)}catch(te){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return Z("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(t){}return!1}(t))return Z("WeakRef");if(function(e){return!("[object Number]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(M(Number(t)));if(function(e){if(!e||"object"!=typeof e||!C)return!1;try{return C.call(e),!0}catch(t){}return!1}(t))return K(M(C.call(t)));if(function(e){return!("[object Boolean]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(m.call(t));if(function(e){return!("[object String]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(M(String(t)));if(!function(e){return!("[object Date]"!==q(e)||j&&"object"==typeof e&&j in e)}(t)&&!U(t)){var ie=Q(t,M),ce=F?F(t)===Object.prototype:t instanceof Object||t.constructor===Object,le=t instanceof Object?"":"null prototype",fe=!ce&&j&&Object(t)===t&&j in t?g.call(q(t),8,-1):le?"Object":"",se=(ce||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fe||le?"["+k.call(D.call([],fe||[],le||[]),": ")+"] ":"");return 0===ie.length?se+"{}":O?se+"{"+Y(ie,O)+"}":se+"{ "+k.call(ie,", ")+" }"}return String(t)};var H=Object.prototype.hasOwnProperty||function(e){return e in this};function $(e,t){return H.call(e,t)}function q(e){return h.call(e)}function G(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,u=e.length;n-1?e.split(","):e},c=function(e,t,n,u){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,d=/(\[[^[\]]*])/g,o=n.depth>0&&/(\[[^[\]]*])/.exec(a),c=o?a.slice(0,o.index):a,l=[];if(c){if(!n.plainObjects&&r.call(Object.prototype,c)&&!n.allowPrototypes)return;l.push(c)}for(var f=0;n.depth>0&&null!==(o=d.exec(a))&&f=0;--a){var d,o=e[a];if("[]"===o&&n.parseArrays)d=[].concat(r);else{d=n.plainObjects?Object.create(null):{};var c="["===o.charAt(0)&&"]"===o.charAt(o.length-1)?o.slice(1,-1):o,l=parseInt(c,10);n.parseArrays||""!==c?!isNaN(l)&&o!==c&&String(l)===c&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(d=[])[l]=r:"__proto__"!==c&&(d[c]=r):d={0:r}}r=d}return r}(l,t,n,u)}};e.exports=function(e,t){var n=function(e){if(!e)return d;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?d.charset:e.charset;return{allowDots:void 0===e.allowDots?d.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:d.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:d.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:d.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:d.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:d.comma,decoder:"function"==typeof e.decoder?e.decoder:d.decoder,delimiter:"string"==typeof e.delimiter||u.isRegExp(e.delimiter)?e.delimiter:d.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:d.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:d.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:d.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:d.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:d.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof e?function(e,t){var n,c={},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,f=t.parameterLimit===1/0?void 0:t.parameterLimit,s=l.split(t.delimiter,f),p=-1,m=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(b=a(b)?[b]:b),r.call(c,h)?c[h]=u.combine(c[h],b):c[h]=b}return c}(e,n):e,f=n.plainObjects?Object.create(null):{},s=Object.keys(l),p=0;p'},heart:{width:12,height:16,path:''},eye:{width:16,height:16,path:''},star:{width:14,height:16,path:''},"repo-forked":{width:10,height:16,path:''},"repo-template":{width:14,height:16,path:''},"issue-opened":{width:14,height:16,path:''},"cloud-download":{width:16,height:16,path:''}},g={},y=function(e,t){var n=g[e]||(g[e]=[]);if(!(n.push(t)>1)){var u=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete g[e];t=n.shift();)t.apply(null,arguments)}));if(l){var r=new d;s(r,"abort",u),s(r,"error",u),s(r,"load",(function(){var e;try{e=JSON.parse(r.responseText)}catch(t){return void u(t)}u(200!==r.status,e)})),r.open("GET",e),r.send()}else{var a=this||window;a._=function(e){a._=null,u(200!==e.meta.status,e.data)};var i=o(a.document)("script",{async:!0,src:e+(/\?/.test(e)?"&":"?")+"callback=_"}),c=function(){a._&&a._({meta:{}})};s(i,"load",c),s(i,"error",c),i.readyState&&function(e,t,n){var u=function(r){if(t.test(e.readyState))return p(e,"readystatechange",u),n(r)};s(e,"readystatechange",u)}(i,/de|m/,c),a.document.getElementsByTagName("head")[0].appendChild(i)}}},E=function(e,t,n){var u=o(e.ownerDocument),r=e.appendChild(u("style",{type:"text/css"})),a="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+b(t["data-color-scheme"]);r.styleSheet?r.styleSheet.cssText=a:r.appendChild(e.ownerDocument.createTextNode(a));var d,i,l=u("a",{className:"btn",href:t.href,target:"_blank",rel:"noopener",innerHTML:(d=t["data-icon"],i=/^large$/i.test(t["data-size"])?16:14,d=(""+d).toLowerCase().replace(/^octicon-/,""),c(v,d)||(d="mark-github"),'"),"aria-label":t["aria-label"]||void 0},[" ",u("span",{},[t["data-text"]||""])]),f=e.appendChild(u("div",{className:"widget"+(/^large$/i.test(t["data-size"])?" widget-lg":"")},[l])),s=l.hostname.split(".").reverse();if(""===s[0]&&s.shift(),"com"!==s[0]||"github"!==s[1])return l.href="#",l.target="_self",void n(f);var p=s.length,m=(" /"+l.pathname).split(/\/+/);if(((2===p||3===p&&"gist"===s[2])&&"archive"===m[3]||2===p&&"releases"===m[3]&&"download"===m[4]||3===p&&"codeload"===s[2])&&(l.target="_top"),/^true$/i.test(t["data-show-count"])&&2===p){var h,g;if(!m[2]&&m[1])h=g="followers";else if(!m[3]&&m[2])g="stargazers_count",h="stargazers";else if(m[4]||"subscription"!==m[3])if(m[4]||"fork"!==m[3]){if("issues"!==m[3])return void n(f);g="open_issues_count",h="issues"}else g="forks_count",h="network/members";else g="subscribers_count",h="watchers";var _=m[2]?"/repos/"+m[1]+"/"+m[2]:"/users/"+m[1];y.call(this,"https://api.github.com"+_,(function(e,t){if(!e){var r=t[g];f.appendChild(u("a",{className:"social-count",href:t.html_url+"/"+h,target:"_blank",rel:"noopener","aria-label":r+" "+g.replace(/_count$/,"").replace("_"," ").slice(0,r<2?-1:void 0)+" on GitHub"},[(""+r).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}n(f)}))}else n(f)},w=window.devicePixelRatio||1,D=function(e){return(w>1?r.ceil(r.round(e*w)/w*2)/2:r.ceil(e))||0},k=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},x=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},n=["icon","color-scheme","text","size","show-count"],u=0,r=n.length;u0){var n=t[0];return{x:n.clientX,y:n.clientY}}var u=e.pageX;if(void 0!==u)return{x:u,y:e.pageY}}return{x:0,y:0}}},519:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);n(147);t.a=function(e){var t=e.className,n=e.previous,u=e.next;return r.a.createElement("nav",{className:o()("pagination-nav",t)},r.a.createElement("div",{className:"pagination-nav__item"},n&&r.a.createElement(a.a,{className:"pagination-nav__link",to:n.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Previous"),r.a.createElement("h4",{className:"pagination-nav__link--label"},"\xab ",n.title))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},u&&r.a.createElement(a.a,{className:"pagination-nav__link",to:u.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Next"),r.a.createElement("h4",{className:"pagination-nav__link--label"},u.title," \xbb"))))}},520:function(e,t,n){"use strict";var u=n(0);t.a=function(e,t,n){var r=Object(u.useState)(void 0),a=r[0],d=r[1];Object(u.useEffect)((function(){var u=[],r=[];function o(){var o=function(){var e=0,t=null;for(u=document.getElementsByClassName("anchor");e=0&&a<=n&&(t=r),e+=1}return t}();if(o){var i=0,c=!1;for(r=document.getElementsByClassName(e);i0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=r()(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=r()(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":a(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}(),i=n(1),c=n.n(i),l=n(2),f=n.n(l),s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===s(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=f()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return h("action",e)}},{key:"defaultTarget",value:function(e){var t=h("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return h("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}]),t}(c.a);function h(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}t.default=m}]).default},e.exports=u()},524:function(e,t){e.exports.parse=function(e){var t=e.split(",").map((function(e){return function(e){if(/^-?\d+$/.test(e))return parseInt(e,10);var t;if(t=e.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){var n=t[1],u=t[2],r=t[3];if(n&&r){var a=[],d=(n=parseInt(n))<(r=parseInt(r))?1:-1;"-"!=u&&".."!=u&&"\u2025"!=u||(r+=d);for(var o=n;o!=r;o+=d)a.push(o);return a}}return[]}(e)}));return 0===t.length?[]:1===t.length?Array.isArray(t[0])?t[0]:t:t.reduce((function(e,t){return Array.isArray(e)||(e=[e]),Array.isArray(t)||(t=[t]),e.concat(t)}))}},525:function(e,t){!function(e){function t(e){return RegExp("(^(?:"+e+"):[ \t]*(?![ \t]))[^]+","i")}e.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:e.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:t(/Content-Security-Policy/.source),lookbehind:!0,alias:["csp","languages-csp"],inside:e.languages.csp},{pattern:t(/Public-Key-Pins(?:-Report-Only)?/.source),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:e.languages.hpkp},{pattern:t(/Strict-Transport-Security/.source),lookbehind:!0,alias:["hsts","languages-hsts"],inside:e.languages.hsts},{pattern:t(/[^:]+/.source),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var n,u=e.languages,r={"application/javascript":u.javascript,"application/json":u.json||u.javascript,"application/xml":u.xml,"text/xml":u.xml,"text/html":u.html,"text/css":u.css,"text/plain":u.plain},a={"application/json":!0,"application/xml":!0};function d(e){var t=e.replace(/^[a-z]+\//,"");return"(?:"+e+"|"+("\\w+/(?:[\\w.-]+\\+)+"+t+"(?![+\\w.-])")+")"}for(var o in r)if(r[o]){n=n||{};var i=a[o]?d(o):o;n[o.replace(/\//g,"-")]={pattern:RegExp("("+/content-type:\s*/.source+i+/(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source+")"+/[^ \t\w-][\s\S]*/.source,"i"),lookbehind:!0,inside:r[o]}}n&&e.languages.insertBefore("http","header",n)}(Prism)},526:function(e,t){Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},527:function(e,t){!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},528:function(e,t){!function(e){var t=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:t}},builtin:t,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism)},529:function(e,t){!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},530:function(e,t){!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(Prism)},531:function(e,t){!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,u={pattern:RegExp(n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[u,{pattern:RegExp(n+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:u.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":u,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},532:function(e,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},533:function(e,t){!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],u=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:u,operator:r,punctuation:a};var d={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:d}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:d}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:u,operator:r,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},534:function(e,t){!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,u="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function d(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return u})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return u}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return u})).replace(/<>/g,(function(){return"(?:"+r+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:d(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:d(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:d(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:d(a),lookbehind:!0,greedy:!0},number:{pattern:d(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},535:function(e,t){e.exports={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]}},536:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=void 0;var u,r=n(557);var a=((u=r)&&u.__esModule?u:{default:u}).default,d=a.canUseDOM?window.HTMLElement:{};t.canUseDOM=a.canUseDOM;t.default=d},537:function(e,t,n){"use strict";var u=n(28),r=n(57);e.exports=function(e,t,n){t in e?u.f(e,t,r(0,n)):e[t]=n}},538:function(e,t,n){"use strict";var u=n(28).f,r=n(89),a=n(82),d=n(30),o=n(80),i=n(81),c=n(61),l=n(88),f=n(94),s=n(10),p=n(483).fastKey,m=n(484),h=s?"_s":"size",b=function(e,t){var n,u=p(t);if("F"!==u)return e._i[u];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,c){var l=e((function(e,u){o(e,l,t,"_i"),e._t=t,e._i=r(null),e._f=void 0,e._l=void 0,e[h]=0,null!=u&&i(u,n,e[c],e)}));return a(l.prototype,{clear:function(){for(var e=m(this,t),n=e._i,u=e._f;u;u=u.n)u.r=!0,u.p&&(u.p=u.p.n=void 0),delete n[u.i];e._f=e._l=void 0,e[h]=0},delete:function(e){var n=m(this,t),u=b(n,e);if(u){var r=u.n,a=u.p;delete n._i[u.i],u.r=!0,a&&(a.n=r),r&&(r.p=a),n._f==u&&(n._f=r),n._l==u&&(n._l=a),n[h]--}return!!u},forEach:function(e){m(this,t);for(var n,u=d(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(u(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!b(m(this,t),e)}}),s&&u(l.prototype,"size",{get:function(){return m(this,t)[h]}}),l},def:function(e,t,n){var u,r,a=b(e,t);return a?a.v=n:(e._l=a={i:r=p(t,!0),k:t,v:n,p:u=e._l,n:void 0,r:!1},e._f||(e._f=a),u&&(u.n=a),e[h]++,"F"!==r&&(e._i[r]=a)),e},getEntry:b,setStrong:function(e,t,n){c(e,t,(function(e,n){this._t=m(e,t),this._k=n,this._l=void 0}),(function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))}),n?"entries":"values",!n,!0),f(t)}}},539:function(e,t,n){"use strict";var u=n(5),r=n(12),a=n(16),d=n(82),o=n(483),i=n(81),c=n(80),l=n(13),f=n(14),s=n(83),p=n(41),m=n(540);e.exports=function(e,t,n,h,b,v){var g=u[e],y=g,_=b?"set":"add",E=y&&y.prototype,w={},D=function(e){var t=E[e];a(E,e,"delete"==e||"has"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return v&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof y&&(v||E.forEach&&!f((function(){(new y).entries().next()})))){var k=new y,x=k[_](v?{}:-0,1)!=k,S=f((function(){k.has(1)})),C=s((function(e){new y(e)})),O=!v&&f((function(){for(var e=new y,t=5;t--;)e[_](t,t);return!e.has(-0)}));C||((y=t((function(t,n){c(t,y,e);var u=m(new g,t,y);return null!=n&&i(n,b,u[_],u),u}))).prototype=E,E.constructor=y),(S||O)&&(D("delete"),D("has"),b&&D("get")),(O||x)&&D(_),v&&E.clear&&delete E.clear}else y=h.getConstructor(t,e,b,_),d(y.prototype,n),o.NEED=!0;return p(y,e),w[e]=y,r(r.G+r.W+r.F*(y!=g),w),v||h.setStrong(y,e,b),y}},540:function(e,t,n){var u=n(13),r=n(541).set;e.exports=function(e,t,n){var a,d=t.constructor;return d!==n&&"function"==typeof d&&(a=d.prototype)!==n.prototype&&u(a)&&r&&r(e,a),e}},541:function(e,t,n){var u=n(13),r=n(8),a=function(e,t){if(r(e),!u(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,u){try{(u=n(30)(Function.call,n(542).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(r){t=!0}return function(e,n){return a(e,n),t?e.__proto__=n:u(e,n),e}}({},!1):void 0),check:a}},542:function(e,t,n){var u=n(62),r=n(57),a=n(33),d=n(87),o=n(31),i=n(86),c=Object.getOwnPropertyDescriptor;t.f=n(10)?c:function(e,t){if(e=a(e),t=d(t,!0),i)try{return c(e,t)}catch(n){}if(o(e,t))return r(!u.f.call(e,t),e[t])}},543:function(e,t,n){"use strict";var u=n(12),r=n(32),a=n(27),d=n(14),o=[].sort,i=[1,2,3];u(u.P+u.F*(d((function(){i.sort(void 0)}))||!d((function(){i.sort(null)}))||!n(544)(o)),"Array",{sort:function(e){return void 0===e?o.call(a(this)):o.call(a(this),r(e))}})},544:function(e,t,n){"use strict";var u=n(14);e.exports=function(e,t){return!!e&&u((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},553:function(e,t,n){"use strict";n(481),n(79),n(482),n(543),n(29),n(22),n(21),n(85),n(434);var u=n(1),r=(n(438),n(439),n(77),n(420),n(0)),a=n.n(r),d=n(473),o=n.n(d);n(150);var i=function(e){var t=e.humanize,n=e.icon,u=e.values,r=e.currentState,d=e.setState;if(0==u.size)return null;var i=Array.from(u);return a.a.createElement(a.a.Fragment,null,i.map((function(e,u){var i="string"==typeof e&&t?o()(e):e;return a.a.createElement("label",{key:u},a.a.createElement("input",{type:"checkbox",onChange:function(t){var n=new Set(r);t.currentTarget.checked?n.add(e):n.delete(e),d(n)},checked:r.has(e)}),i&&a.a.createElement(a.a.Fragment,null,n?a.a.createElement("i",{className:"feather icon-"+n}):""," ",i))})))},c=n(495),l=n(424),f=n(422),s=(n(432),n(443)),p=n.n(s),m=n(415),h=n.n(m),b=n(496),v=n.n(b),g=n(428);n(151);function y(e){var t=e.delivery_guarantee,n=e.description,u=e.event_types,r=e.function_category,d=(e.logo_path,e.name),o=e.pathTemplate,i=e.status,c=e.title,l=e.type,s=o;s||("source"==l&&(s="/docs/reference/sources//"),"transform"==l&&(s="/docs/reference/transforms//"),"sink"==l&&(s="/docs/reference/sinks//"));var p=s.replace("",d);return a.a.createElement(f.a,{to:p,className:"qovery-component",title:n},a.a.createElement("div",{className:"qovery-component--header"},a.a.createElement("div",{className:"qovery-component--name"},c)),a.a.createElement("div",{className:"qovery-component--badges"},"beta"==i?a.a.createElement("span",{className:"badge badge--warning",title:"This component is in beta and is not recommended for production environments"},a.a.createElement("i",{className:"feather icon-alert-triangle"})):a.a.createElement("span",{className:"badge badge--primary",title:"This component has passed reliability standards that make it production ready"},a.a.createElement("i",{className:"feather icon-award"})),"best_effort"==t?a.a.createElement("span",{className:"badge badge--warning",title:"This component makes a best-effort delivery guarantee, and in rare cases can lose data"},a.a.createElement("i",{className:"feather icon-shield-off"})):a.a.createElement("span",{className:"badge badge--primary",title:"This component offers an at-least-once delivery guarantee"},a.a.createElement("i",{className:"feather icon-shield"})),u.includes("log")?a.a.createElement("span",{className:"badge badge--primary",title:"This component works with log event types"},"log"):"",u.includes("metric")?a.a.createElement("span",{className:"badge badge--primary",title:"This component works with metric event types"},"metric"):"",a.a.createElement("span",{className:"badge badge--primary"},r)))}function _(e){var t=e.components,n=e.headingLevel,r=e.pathTemplate,d=e.titles,o=t.filter((function(e){return"source"==e.type})),i=t.filter((function(e){return"transform"==e.type})),f=t.filter((function(e){return"sink"==e.type})),s="h"+(n||3);return t.length>0?a.a.createElement(a.a.Fragment,null,o.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,o.length," Sources"),a.a.createElement("div",{className:"qovery-components--grid"},o.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",i.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,i.length," Transforms"),a.a.createElement("div",{className:"qovery-components--grid"},i.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",f.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,f.length," Sinks"),a.a.createElement("div",{className:"qovery-components--grid"},f.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",a.a.createElement("hr",null),a.a.createElement(l.a,{to:"https://github.com/qovery/documentation/issues/new?labels=type%3A+new+feature",target:"_blank",rightIcon:"plus-circle"},"Request a new component")):a.a.createElement(c.a,{text:"no components found"})}t.a=function(e){var t=Object(g.a)().siteConfig.customFields.metadata,n=t.sources,u=t.transforms,d=t.sinks,o=e.titles||null==e.titles,c=1==e.filterColumn,l=e.pathTemplate,s=e.location?v.a.parse(e.location.search,{ignoreQueryPrefix:!0}):{},m=[];(e.sources||null==e.sources)&&(m=m.concat(Object.values(n))),(e.transforms||null==e.transforms)&&(m=m.concat(Object.values(u))),(e.sinks||null==e.sinks)&&(m=m.concat(Object.values(d))),m=m.sort((function(e,t){return e.name>t.name?1:-1}));var b=Object(r.useState)("true"==s["at-least-once"]),y=b[0],E=b[1],w=Object(r.useState)(new Set(s["event-types"]||e.eventTypes)),D=w[0],k=w[1],x=Object(r.useState)(new Set(s.functions)),S=x[0],C=x[1],O=Object(r.useState)(new Set(s["operating-systems"])),I=O[0],A=O[1],j=Object(r.useState)("true"==s["prod-ready"]),N=j[0],F=j[1],T=Object(r.useState)(new Set(s.providers)),P=T[0],M=T[1],R=Object(r.useState)(s.search),L=R[0],B=R[1];L&&(m=m.filter((function(e){return(e.name.toLowerCase()+" "+e.type.toLowerCase()).includes(L.toLowerCase())}))),y&&(m=m.filter((function(e){return"at_least_once"==e.delivery_guarantee}))),D.size>0&&(m=m.filter((function(e){return Array.from(D).some((function(t){return e.event_types.includes(t)}))}))),S.size>0&&(m=m.filter((function(e){return S.has(e.function_category)}))),I.size>0&&(m=m.filter((function(e){return Array.from(I).every((function(t){return e.operating_systems.includes(t)}))}))),N&&(m=m.filter((function(e){return"prod-ready"==e.status}))),P.size>0&&(m=m.filter((function(e){return Array.from(P).every((function(t){return e.service_providers&&e.service_providers.includes(t)}))}))),e.exceptNames&&e.exceptNames.length>0&&(m=m.filter((function(t){return!e.exceptNames.includes(t.name)}))),e.exceptFunctions&&e.exceptFunctions.length>0&&(m=m.filter((function(t){return!e.exceptFunctions.includes(t.function_category)})));var z=D.size>0?D:new Set(p()(m).map((function(e){return e.event_types})).flatten().uniq().compact().sort().value()),U=new Set(p()(m).map((function(e){return e.operating_systems})).flatten().uniq().compact().sort().value()),W=new Set(p()(m).map((function(e){return e.service_providers})).flatten().uniq().compact().sort().value()),H=new Set(p()(m).filter((function(e){return"source"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),$=new Set(p()(m).filter((function(e){return"transform"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),q=new Set(p()(m).filter((function(e){return"sink"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value());return a.a.createElement("div",{className:h()("qovery-components",{"qovery-components--cols":c})},a.a.createElement("div",{className:"filters"},a.a.createElement("div",{className:"search"},a.a.createElement("input",{className:"input--text input--lg",type:"text",onChange:function(e){return B(e.currentTarget.value)},placeholder:"\ud83d\udd0d Search..."})),a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/getting-started/data-model/",title:"Learn more about Qovery's event types"},"Event types ",a.a.createElement("i",{className:"feather icon-info"}))),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Event Types",icon:"database",values:z,humanize:!0,currentState:D,setState:k}))),a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/getting-started/whats-next/",title:"Learn more about Qovery's guarantees"},"Guarantees ",a.a.createElement("i",{className:"feather icon-info"}))),a.a.createElement("div",{className:"filter--choices"},a.a.createElement("label",{title:"Show only components that offer an at-least-once delivery guarantee."},a.a.createElement("input",{type:"checkbox",onChange:function(e){return E(e.currentTarget.checked)},checked:y}),a.a.createElement("i",{className:"feather icon-shield"})," At-least-once"),a.a.createElement("label",{title:"Show only production ready components."},a.a.createElement("input",{type:"checkbox",onChange:function(e){return F(e.currentTarget.checked)},checked:N}),a.a.createElement("i",{className:"feather icon-award"})," Prod-ready"))),H.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Source Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:H,humanize:!0,currentState:S,setState:C}))),$.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Transform Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:$,humanize:!0,currentState:S,setState:C}))),q.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Sink Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:q,humanize:!0,currentState:S,setState:C}))),W.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Providers"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Providers",icon:"cloud",values:W,currentState:P,setState:M}))),U.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/setup/installation/operating-systems/",title:"Learn more about Qovery's operating systems"},"Operating Systems")),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Operating Systems",icon:"cpu",values:U,currentState:I,setState:A})))),a.a.createElement("div",{className:"qovery-components--results"},a.a.createElement(_,{components:m,headingLevel:e.headingLevel,pathTemplate:l,titles:o})))}},555:function(e,t,n){"use strict";n.d(t,"b",(function(){return d}));var u=n(53),r={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","at-rule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},a=n(0),d={Prism:u.a,theme:r};function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return(i=Object.assign||function(e){for(var t=1;t0&&e[n-1]===t?e:e.concat(t)},s=function(e,t){var n=e.plain,u=Object.create(null),r=e.styles.reduce((function(e,n){var u=n.languages,r=n.style;return u&&!u.includes(t)||n.types.forEach((function(t){var n=i({},e[t],r);e[t]=n})),e}),u);return r.root=n,r.plain=i({},n,{backgroundColor:null}),r};function p(e,t){var n={};for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&-1===t.indexOf(u)&&(n[u]=e[u]);return n}var m=function(e){function t(){for(var t=this,n=[],u=arguments.length;u--;)n[u]=arguments[u];e.apply(this,n),o(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?s(e.theme,e.language):void 0;return t.themeDict=n})),o(this,"getLineProps",(function(e){var n=e.key,u=e.className,r=e.style,a=i({},p(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),d=t.getThemeDict(t.props);return void 0!==d&&(a.style=d.plain),void 0!==r&&(a.style=void 0!==a.style?i({},a.style,r):r),void 0!==n&&(a.key=n),u&&(a.className+=" "+u),a})),o(this,"getStyleForToken",(function(e){var n=e.types,u=e.empty,r=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===r&&"plain"===n[0])return u?{display:"inline-block"}:void 0;if(1===r&&!u)return a[n[0]];var d=u?{display:"inline-block"}:{},o=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[d].concat(o))}})),o(this,"getTokenProps",(function(e){var n=e.key,u=e.className,r=e.style,a=e.token,d=i({},p(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==r&&(d.style=void 0!==d.style?i({},d.style,r):r),void 0!==n&&(d.key=n),u&&(d.className+=" "+u),d}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,u=e.code,r=e.children,a=this.getThemeDict(this.props),d=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],u=[0],r=[e.length],a=0,d=0,o=[],i=[o];d>-1;){for(;(a=u[d]++)0?p:["plain"],s=m):(p=f(p,m.type),m.alias&&(p=f(p,m.alias)),s=m.content),"string"==typeof s){var h=s.split(c),b=h.length;o.push({types:p,content:h[0]});for(var v=1;v=0)&&a(e,!n)}e.exports=t.default},560:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assertNodeList=i,t.setElement=function(e){var t=e;if("string"==typeof t&&d.canUseDOM){var n=document.querySelectorAll(t);i(n,t),t="length"in n?n[0]:n}return o=t||o},t.validateElement=c,t.hide=function(e){c(e)&&(e||o).setAttribute("aria-hidden","true")},t.show=function(e){c(e)&&(e||o).removeAttribute("aria-hidden")},t.documentNotReadyOrSSRTesting=function(){o=null},t.resetForTesting=function(){o=null};var u,r=n(585),a=(u=r)&&u.__esModule?u:{default:u},d=n(536);var o=null;function i(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function c(e){return!(!e&&!o)||((0,a.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),!1)}},561:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=new function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.register=function(e){-1===t.openInstances.indexOf(e)&&(t.openInstances.push(e),t.emit("register"))},this.deregister=function(e){var n=t.openInstances.indexOf(e);-1!==n&&(t.openInstances.splice(n,1),t.emit("deregister"))},this.subscribe=function(e){t.subscribers.push(e)},this.emit=function(e){t.subscribers.forEach((function(n){return n(e,t.openInstances.slice())}))},this.openInstances=[],this.subscribers=[]};t.default=u,e.exports=t.default},580:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u,r=n(581),a=(u=r)&&u.__esModule?u:{default:u};t.default=a.default,e.exports=t.default},581:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bodyOpenClassName=t.portalClassName=void 0;var u=Object.assign||function(e){for(var t=1;t0&&0===(g-=1)&&f.show(t),n.props.shouldFocusAfterRender&&(n.props.shouldReturnFocusAfterClose?(c.returnFocus(),c.teardownScopedFocus()):c.popWithoutFocus()),n.props.onAfterClose&&n.props.onAfterClose(),m.default.deregister(n)},n.open=function(){n.beforeOpen(),n.state.afterOpen&&n.state.beforeClose?(clearTimeout(n.closeTimer),n.setState({beforeClose:!1})):(n.props.shouldFocusAfterRender&&(c.setupScopedFocus(n.node),c.markForFocusLater()),n.setState({isOpen:!0},(function(){n.setState({afterOpen:!0}),n.props.isOpen&&n.props.onAfterOpen&&n.props.onAfterOpen({overlayEl:n.overlay,contentEl:n.content})})))},n.close=function(){n.props.closeTimeoutMS>0?n.closeWithTimeout():n.closeWithoutTimeout()},n.focusContent=function(){return n.content&&!n.contentHasFocus()&&n.content.focus()},n.closeWithTimeout=function(){var e=Date.now()+n.props.closeTimeoutMS;n.setState({beforeClose:!0,closesAt:e},(function(){n.closeTimer=setTimeout(n.closeWithoutTimeout,n.state.closesAt-Date.now())}))},n.closeWithoutTimeout=function(){n.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},n.afterClose)},n.handleKeyDown=function(e){9===e.keyCode&&(0,l.default)(n.content,e),n.props.shouldCloseOnEsc&&27===e.keyCode&&(e.stopPropagation(),n.requestClose(e))},n.handleOverlayOnClick=function(e){null===n.shouldClose&&(n.shouldClose=!0),n.shouldClose&&n.props.shouldCloseOnOverlayClick&&(n.ownerHandlesClose()?n.requestClose(e):n.focusContent()),n.shouldClose=null},n.handleContentOnMouseUp=function(){n.shouldClose=!1},n.handleOverlayOnMouseDown=function(e){n.props.shouldCloseOnOverlayClick||e.target!=n.overlay||e.preventDefault()},n.handleContentOnClick=function(){n.shouldClose=!1},n.handleContentOnMouseDown=function(){n.shouldClose=!1},n.requestClose=function(e){return n.ownerHandlesClose()&&n.props.onRequestClose(e)},n.ownerHandlesClose=function(){return n.props.onRequestClose},n.shouldBeClosed=function(){return!n.state.isOpen&&!n.state.beforeClose},n.contentHasFocus=function(){return document.activeElement===n.content||n.content.contains(document.activeElement)},n.buildClassName=function(e,t){var u="object"===(void 0===t?"undefined":r(t))?t:{base:v[e],afterOpen:v[e]+"--after-open",beforeClose:v[e]+"--before-close"},a=u.base;return n.state.afterOpen&&(a=a+" "+u.afterOpen),n.state.beforeClose&&(a=a+" "+u.beforeClose),"string"==typeof t&&t?a+" "+t:a},n.attributesFromObject=function(e,t){return Object.keys(t).reduce((function(n,u){return n[e+"-"+u]=t[u],n}),{})},n.state={afterOpen:!1,beforeClose:!1},n.shouldClose=null,n.moveFromContentToOverlay=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(e,t){this.props.isOpen&&!e.isOpen?this.open():!this.props.isOpen&&e.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!t.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.state.isOpen&&this.afterClose(),clearTimeout(this.closeTimer)}},{key:"beforeOpen",value:function(){var e=this.props,t=e.appElement,n=e.ariaHideApp,u=e.htmlOpenClassName,r=e.bodyOpenClassName;r&&s.add(document.body,r),u&&s.add(document.getElementsByTagName("html")[0],u),n&&(g+=1,f.hide(t)),m.default.register(this)}},{key:"render",value:function(){var e=this.props,t=e.id,n=e.className,r=e.overlayClassName,a=e.defaultStyles,d=n?{}:a.content,i=r?{}:a.overlay;return this.shouldBeClosed()?null:o.default.createElement("div",{ref:this.setOverlayRef,className:this.buildClassName("overlay",r),style:u({},i,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},o.default.createElement("div",u({id:t,ref:this.setContentRef,style:u({},d,this.props.style.content),className:this.buildClassName("content",n),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",this.props.aria||{}),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),this.props.children))}}]),t}(d.Component);y.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},y.propTypes={isOpen:i.default.bool.isRequired,defaultStyles:i.default.shape({content:i.default.object,overlay:i.default.object}),style:i.default.shape({content:i.default.object,overlay:i.default.object}),className:i.default.oneOfType([i.default.string,i.default.object]),overlayClassName:i.default.oneOfType([i.default.string,i.default.object]),bodyOpenClassName:i.default.string,htmlOpenClassName:i.default.string,ariaHideApp:i.default.bool,appElement:i.default.instanceOf(p.default),onAfterOpen:i.default.func,onAfterClose:i.default.func,onRequestClose:i.default.func,closeTimeoutMS:i.default.number,shouldFocusAfterRender:i.default.bool,shouldCloseOnOverlayClick:i.default.bool,shouldReturnFocusAfterClose:i.default.bool,role:i.default.string,contentLabel:i.default.string,aria:i.default.object,data:i.default.object,children:i.default.node,shouldCloseOnEsc:i.default.bool,overlayRef:i.default.func,contentRef:i.default.func,id:i.default.string,testId:i.default.string},t.default=y,e.exports=t.default},583:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlur=c,t.handleFocus=l,t.markForFocusLater=function(){d.push(document.activeElement)},t.returnFocus=function(){var e=null;try{return void(0!==d.length&&(e=d.pop()).focus())}catch(t){console.warn(["You tried to return focus to",e,"but it is not in the DOM anymore"].join(" "))}},t.popWithoutFocus=function(){d.length>0&&d.pop()},t.setupScopedFocus=function(e){o=e,window.addEventListener?(window.addEventListener("blur",c,!1),document.addEventListener("focus",l,!0)):(window.attachEvent("onBlur",c),document.attachEvent("onFocus",l))},t.teardownScopedFocus=function(){o=null,window.addEventListener?(window.removeEventListener("blur",c),document.removeEventListener("focus",l)):(window.detachEvent("onBlur",c),document.detachEvent("onFocus",l))};var u,r=n(559),a=(u=r)&&u.__esModule?u:{default:u};var d=[],o=null,i=!1;function c(){i=!0}function l(){if(i){if(i=!1,!o)return;setTimeout((function(){o.contains(document.activeElement)||((0,a.default)(o)[0]||o).focus()}),0)}}},584:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=(0,a.default)(e);if(!n.length)return void t.preventDefault();var u=void 0,r=t.shiftKey,d=n[0],o=n[n.length-1];if(e===document.activeElement){if(!r)return;u=o}o!==document.activeElement||r||(u=d);d===document.activeElement&&r&&(u=o);if(u)return t.preventDefault(),void u.focus();var i=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent);if(null==i||"Chrome"==i[1]||null!=/\biPod\b|\biPad\b/g.exec(navigator.userAgent))return;var c=n.indexOf(document.activeElement);c>-1&&(c+=r?-1:1);if(void 0===(u=n[c]))return t.preventDefault(),void(u=r?o:d).focus();t.preventDefault(),u.focus()};var u,r=n(559),a=(u=r)&&u.__esModule?u:{default:u};e.exports=t.default},585:function(e,t,n){"use strict";var u=function(){};e.exports=u},586:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dumpClassLists=function(){0};var u={},r={};t.add=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?u:r,void t.split(" ").forEach((function(e){!function(e,t){e[t]||(e[t]=0),e[t]+=1}(a,e),n.add(e)}));var n,a},t.remove=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?u:r,void t.split(" ").forEach((function(e){!function(e,t){e[t]&&(e[t]-=1)}(a,e),0===a[e]&&n.remove(e)}));var n,a}},587:function(e,t,n){"use strict";var u,r=n(561),a=(u=r)&&u.__esModule?u:{default:u};var d=void 0,o=void 0,i=[];function c(){0!==i.length&&i[i.length-1].focusContent()}a.default.subscribe((function(e,t){d&&o||((d=document.createElement("div")).setAttribute("data-react-modal-body-trap",""),d.style.position="absolute",d.style.opacity="0",d.setAttribute("tabindex","0"),d.addEventListener("focus",c),(o=d.cloneNode()).addEventListener("focus",c)),(i=t).length>0?(document.body.firstChild!==d&&document.body.insertBefore(d,document.body.firstChild),document.body.lastChild!==o&&document.body.appendChild(o)):(d.parentElement&&d.parentElement.removeChild(d),o.parentElement&&o.parentElement.removeChild(o))}))},588:function(e,t,n){"use strict";function u(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!=e&&this.setState(e)}function r(e){this.setState(function(t){var n=this.constructor.getDerivedStateFromProps(e,t);return null!=n?n:null}.bind(this))}function a(e,t){try{var n=this.props,u=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,u)}finally{this.props=n,this.state=u}}function d(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!=typeof e.getDerivedStateFromProps&&"function"!=typeof t.getSnapshotBeforeUpdate)return e;var n=null,d=null,o=null;if("function"==typeof t.componentWillMount?n="componentWillMount":"function"==typeof t.UNSAFE_componentWillMount&&(n="UNSAFE_componentWillMount"),"function"==typeof t.componentWillReceiveProps?d="componentWillReceiveProps":"function"==typeof t.UNSAFE_componentWillReceiveProps&&(d="UNSAFE_componentWillReceiveProps"),"function"==typeof t.componentWillUpdate?o="componentWillUpdate":"function"==typeof t.UNSAFE_componentWillUpdate&&(o="UNSAFE_componentWillUpdate"),null!==n||null!==d||null!==o){var i=e.displayName||e.name,c="function"==typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+i+" uses "+c+" but also contains the following legacy lifecycles:"+(null!==n?"\n "+n:"")+(null!==d?"\n "+d:"")+(null!==o?"\n "+o:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"==typeof e.getDerivedStateFromProps&&(t.componentWillMount=u,t.componentWillReceiveProps=r),"function"==typeof t.getSnapshotBeforeUpdate){if("function"!=typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=a;var l=t.componentDidUpdate;t.componentDidUpdate=function(e,t,n){var u=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;l.call(this,e,t,u)}}return e}n.r(t),n.d(t,"polyfill",(function(){return d})),u.__suppressDeprecationWarning=!0,r.__suppressDeprecationWarning=!0,a.__suppressDeprecationWarning=!0},589:function(e,t,n){var u;!function(r){"use strict";var a,d,o,i=(a=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g,d=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,o=/[^-+\dA-Z]/g,function(e,t,n,u){if(1!==arguments.length||"string"!==s(e)||/\d/.test(e)||(t=e,e=void 0),(e=e||new Date)instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");var r=(t=String(i.masks[t]||t||i.masks.default)).slice(0,4);"UTC:"!==r&&"GMT:"!==r||(t=t.slice(4),n=!0,"GMT:"===r&&(u=!0));var p=n?"getUTC":"get",m=e[p+"Date"](),h=e[p+"Day"](),b=e[p+"Month"](),v=e[p+"FullYear"](),g=e[p+"Hours"](),y=e[p+"Minutes"](),_=e[p+"Seconds"](),E=e[p+"Milliseconds"](),w=n?0:e.getTimezoneOffset(),D=l(e),k=f(e),x={d:m,dd:c(m),ddd:i.i18n.dayNames[h],dddd:i.i18n.dayNames[h+7],m:b+1,mm:c(b+1),mmm:i.i18n.monthNames[b],mmmm:i.i18n.monthNames[b+12],yy:String(v).slice(2),yyyy:v,h:g%12||12,hh:c(g%12||12),H:g,HH:c(g),M:y,MM:c(y),s:_,ss:c(_),l:c(E,3),L:c(Math.round(E/10)),t:g<12?i.i18n.timeNames[0]:i.i18n.timeNames[1],tt:g<12?i.i18n.timeNames[2]:i.i18n.timeNames[3],T:g<12?i.i18n.timeNames[4]:i.i18n.timeNames[5],TT:g<12?i.i18n.timeNames[6]:i.i18n.timeNames[7],Z:u?"GMT":n?"UTC":(String(e).match(d)||[""]).pop().replace(o,""),o:(w>0?"-":"+")+c(100*Math.floor(Math.abs(w)/60)+Math.abs(w)%60,4),S:["th","st","nd","rd"][m%10>3?0:(m%100-m%10!=10)*m%10],W:D,N:k};return t.replace(a,(function(e){return e in x?x[e]:e.slice(1,e.length-1)}))});function c(e,t){for(e=String(e),t=t||2;e.length/":G?V="/guides/integrate/sources/"+G.name+"//":H&&(V="/guides/integrate/sinks//");var K=H?"/guides/integrate/sources//"+H.name+"/":"/guides/integrate/sources//",Z=Object(u.useState)(!1),J=Z[0],Y=Z[1],Q=Object(u.useState)(!1),X=Q[0],ee=Q[1];return Object(O.a)("contents__link","contents__link--active",100),r.a.createElement(l.a,{title:v,description:v+", in minutes, for free"},J&&r.a.createElement(p.a,{className:"modal",onRequestClose:function(){return Y(!1)},overlayClassName:"modal-overlay",isOpen:null!==J,contentLabel:"Minimal Modal Example"},r.a.createElement("header",null,r.a.createElement("h1",null,"Where do you receive your data from?")),r.a.createElement(_.a,{exceptFunctions:["test"],exceptNames:[G&&G.name,"docker","qovery"],eventTypes:H&&H.event_types,pathTemplate:K,titles:!1,sources:!0,transforms:!1,sinks:!1})),X&&r.a.createElement(p.a,{className:"modal",onRequestClose:function(){return ee(!1)},overlayClassName:"modal-overlay",isOpen:null!==X,contentLabel:"Minimal Modal Example"},r.a.createElement("header",null,r.a.createElement("h1",null,"Where do you want to send your data?")),r.a.createElement(_.a,{exceptFunctions:["test"],exceptNames:[H&&H.name,"qovery"],eventTypes:G&&G.event_types,pathTemplate:V,titles:!1,sources:!1,transforms:!1,sinks:!0})),r.a.createElement("header",{className:"hero domain-bg domain-bg--"+M},r.a.createElement("div",{className:"container"},(z||G||H)&&r.a.createElement("div",{className:"component-icons"},z&&r.a.createElement("div",{className:"icon panel"},z.logo_path?r.a.createElement(g.a,{src:z.logo_path,alt:z.title+" Logo"}):r.a.createElement("i",{className:"feather icon-server"})),G&&!z&&r.a.createElement("div",{className:"icon panel link",title:"Change your source",onClick:function(e){return Y(!0)}},G.logo_path?r.a.createElement(g.a,{src:G.logo_path,alt:G.title+" Logo"}):r.a.createElement("i",{className:"feather icon-server"})),!G&&!z&&r.a.createElement("div",{className:"icon panel link",title:"Select a source",onClick:function(e){return Y(!0)}},r.a.createElement("i",{className:"feather icon-plus"})),H&&r.a.createElement("div",{className:"icon panel link",title:"Change your destination",onClick:function(e){return ee(!0)}},H.logo_path?r.a.createElement(g.a,{src:H.logo_path,alt:H.title+" Logo"}):r.a.createElement("i",{className:"feather icon-database"})),!H&&r.a.createElement("div",{className:"icon panel link",title:"Select a destination",onClick:function(e){return ee(!0)}},r.a.createElement("i",{className:"feather icon-plus"}))),!z&&!G&&!H&&r.a.createElement("div",{className:"hero--category"},r.a.createElement(f.a,{to:E[0].permalink+"/"},E[0].name)),r.a.createElement("h1",{className:C.a.header},v),r.a.createElement("div",{className:"hero--subtitle"},n.description),r.a.createElement(y.a,{colorProfile:"guides",tags:D}))),r.a.createElement("main",{className:d()("container","container--l",C.a.container)},r.a.createElement("aside",{className:C.a.sidebar},r.a.createElement("section",{className:C.a.avatar},r.a.createElement(i,{bio:!0,github:c,size:"lg",rel:"author",subTitle:!1,vertical:!0})),r.a.createElement("section",{className:d()("table-of-contents",C.a.tableOfContents)},r.a.createElement("div",{className:"section"},r.a.createElement("div",{className:"title"},"Stats"),r.a.createElement("div",{className:"text--secondary text--bold"},r.a.createElement("i",{className:"feather icon-book"})," ",w),r.a.createElement("div",{className:"text--secondary text--bold"},r.a.createElement("i",{className:"feather icon-clock"})," Updated ",r.a.createElement("time",{pubdate:"pubdate",dateTime:s},k()(R,"mmm dS, yyyy")))),t.rightToc.length>0&&r.a.createElement("div",{className:"section"},r.a.createElement("div",{className:"title"},"Contents"),r.a.createElement(I,{headings:t.rightToc})))),r.a.createElement("div",{className:C.a.article},r.a.createElement("article",null,r.a.createElement("div",{className:"markdown"},r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"anchor",id:"overview"}),r.a.createElement(h.a,{components:m.a},r.a.createElement(t,null)))),!n.hide_pagination&&r.a.createElement(b.a,{previous:a.prevItem,next:a.nextItem,className:C.a.paginator}))))}},416:function(e,t,n){"use strict";n(418);var u=n(0),r=n.n(u),a=n(415),d=n.n(a);n(132);t.a=function(e){var t=e.children,n=e.classNames,u=e.fill,a=e.icon,o=e.type,i=null;switch(o){case"danger":i="alert-triangle";break;case"success":i="check-circle";break;case"warning":i="alert-triangle";break;default:i="info"}return r.a.createElement("div",{className:d()(n,"alert","alert--"+o,{"alert--fill":u,"alert--icon":!1!==a}),role:"alert"},!1!==a&&r.a.createElement("i",{className:d()("feather","icon-"+(a||i))}),t)}},420:function(e,t,n){var u=n(28).f,r=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in r||n(10)&&u(r,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},424:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);n(133);t.a=function(e){var t=e.children,n=e.className,u=e.badge,d=e.leftIcon,i=e.rightIcon,c=e.size,l=e.target,f=e.to,s=o()("jump-to","jump-to--"+c,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},d&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+d})),r.a.createElement("div",{className:"jump-to--main"},u?r.a.createElement("span",{className:"badge badge--primary badge--right"},u):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(i||"chevron-right")+" arrow"}))));return l?r.a.createElement("a",{href:f,target:l,className:s},p):r.a.createElement(a.a,{to:f,className:s},p)}},429:function(e,t,n){"use strict";var u=n(1),r=(n(434),n(431),n(52),n(29),n(22),n(21),n(0)),a=n.n(r),d=n(441),o=n(415),i=n.n(o),c=n(423),l=n.n(c),f=n(440),s=37,p=39;function m(e){var t=e.block,n=e.centered,u=e.changeSelectedValue,r=e.className,d=e.handleKeydown,o=e.style,c=e.values,l=e.selectedValue,f=e.tabRefs;return a.a.createElement("div",{className:n?"tabs--centered":null},a.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:i()("tabs",r,{"tabs--block":t}),style:o},c.map((function(e){var t=e.value,n=e.label;return a.a.createElement("li",{role:"tab",tabIndex:"0","aria-selected":l===t,className:i()("tab-item",{"tab-item--active":l===t}),key:t,ref:function(e){return f.push(e)},onKeyDown:function(e){return d(f,e.target,e)},onFocus:function(){return u(t)},onClick:function(){return u(t)}},n)}))))}function h(e){var t=e.placeholder,n=e.selectedValue,u=e.changeSelectedValue,r=e.size,o=e.values,i=o;if(i[0].group){var c=_.groupBy(i,"group");i=Object.keys(c).map((function(e){return{label:e,options:c[e]}}))}return a.a.createElement(d.a,{className:"react-select-container react-select--"+r,classNamePrefix:"react-select",options:i,isClearable:n,placeholder:t,value:o.find((function(e){return e.value==n})),onChange:function(e){return u(e?e.value:null)}})}t.a=function(e){e.block,e.centered;var t=e.children,n=e.defaultValue,d=e.groupId,o=e.label,i=e.placeholder,c=e.select,b=e.size,v=(e.style,e.values),g=e.urlKey,y=Object(f.a)(),_=y.tabGroupChoices,E=y.setTabGroupChoices,w=Object(r.useState)(n),D=w[0],k=w[1];if(null!=d){var x=_[d];null!=x&&x!==D&&k(x)}var S=function(e){k(e),null!=d&&E(d,e)},C=[],O=function(e,t,n){switch(n.keyCode){case p:!function(e,t){var n=e.indexOf(t)+1;e[n]?e[n].focus():e[0].focus()}(e,t);break;case s:!function(e,t){var n=e.indexOf(t)-1;e[n]?e[n].focus():e[e.length-1].focus()}(e,t)}};return Object(r.useEffect)((function(){if("undefined"!=typeof window&&window.location&&g){var e=l.a.parse(window.location.search);e[g]&&k(e[g])}}),[]),a.a.createElement(a.a.Fragment,null,a.a.createElement("div",{className:"margin-bottom--"+(b||"md")},o&&a.a.createElement("div",{className:"margin-vert--sm"},o),v.length>1&&(c?a.a.createElement(h,Object(u.a)({changeSelectedValue:S,handleKeydown:O,placeholder:i,selectedValue:D,size:b,tabRefs:C},e)):a.a.createElement(m,Object(u.a)({changeSelectedValue:S,handleKeydown:O,selectedValue:D,tabRefs:C},e)))),r.Children.toArray(t).filter((function(e){return e.props.value===D}))[0])}},433:function(e,t,n){"use strict";var u=n(0),r=n(477);t.a=function(){return Object(u.useContext)(r.a)}},436:function(e,t,n){"use strict";var u=n(0),r=n.n(u);t.a=function(e){return r.a.createElement(r.a.Fragment,null,e.children)}},437:function(e,t,n){"use strict";n(449);var u=n(0),r=n.n(u),a=n(450),d=n(435),o=n(1),i=(n(438),n(439),n(451),n(422)),c=n(452),l=n(432),f=n.n(l),s=n(453),p=n.n(s),m=n(428),h=n(415),b=n.n(h),v=n(135),g=n.n(v),y=function(){return r.a.createElement("span",{className:b()(g.a.toggle,g.a.moon)})},_=function(){return r.a.createElement("span",{className:b()(g.a.toggle,g.a.sun)})},E=function(e){var t=Object(m.a)().isClient;return r.a.createElement(p.a,Object(o.a)({disabled:!t,icons:{checked:r.a.createElement(y,null),unchecked:r.a.createElement(_,null)}},e))};function w(){var e=Object(m.a)().siteConfig,t=(void 0===e?{}:e).customFields.metadata.latest_post,n=Date.parse(t.date),u=new Date,r=Math.abs(u-n),a=Math.ceil(r/864e5),d=null;return"undefined"!=typeof window&&(d=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),a<30&&(!d||d0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(f.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(M,e))}))):null)}))),(l||d)&&r.a.createElement("div",{className:"text--center"},l&&l.src&&r.a.createElement("div",{className:"margin-bottom--sm"},l.href?r.a.createElement("a",{href:l.href,target:"_blank",rel:"noopener noreferrer",className:P.a.footerLogoLink},r.a.createElement(R,{alt:l.alt,url:s})):r.a.createElement(R,{alt:l.alt,url:s})),r.a.createElement("small",null,d),r.a.createElement("br",null))))},B=n(454),z=n(455),U=n(3);n(138);t.a=function(e){var t=Object(m.a)().siteConfig,n=void 0===t?{}:t,u=n.favicon,o=(n.tagline,n.title),i=n.themeConfig.image,c=n.url,l=e.children,f=e.title,s=e.noFooter,p=e.description,h=e.image,b=e.keywords,v=(e.permalink,e.version),g=f?f+" | "+o:o,y=h||i,_=c+Object(k.a)(y),E=Object(k.a)(u),w=Object(U.h)(),D=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(z.a,null,r.a.createElement(B.a,null,r.a.createElement(d.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),g&&r.a.createElement("title",null,g),g&&r.a.createElement("meta",{property:"og:title",content:g}),u&&r.a.createElement("link",{rel:"shortcut icon",href:E}),p&&r.a.createElement("meta",{name:"description",content:p}),p&&r.a.createElement("meta",{property:"og:description",content:p}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),b&&b.length&&r.a.createElement("meta",{name:"keywords",content:b.join(",")}),y&&r.a.createElement("meta",{property:"og:image",content:_}),y&&r.a.createElement("meta",{property:"twitter:image",content:_}),y&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+g}),D&&r.a.createElement("meta",{property:"og:url",content:D}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),D&&r.a.createElement("link",{rel:"canonical",href:D})),r.a.createElement(a.a,null),r.a.createElement(N,null),r.a.createElement("div",{className:"main-wrapper"},l),!s&&r.a.createElement(L,null)))}},442:function(e,t,n){"use strict";var u=n(9),r=n(0),a=n.n(r),d=n(415),o=n.n(d),i=n(428),c=(n(139),n(140)),l=n.n(c);t.a=function(e){return function(t){var n,r=t.id,d=Object(u.a)(t,["id"]),c=Object(i.a)().siteConfig,f=(c=void 0===c?{}:c).themeConfig,s=(f=void 0===f?{}:f).navbar,p=(s=void 0===s?{}:s).hideOnScroll,m=void 0!==p&&p;return r?a.a.createElement(e,d,a.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(n={},n[l.a.enhancedAnchor]=!m,n)),id:r}),a.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),d.children):a.a.createElement(e,d)}}},443:function(e,t,n){(function(e,u){var r;(function(){var a="Expected a function",d="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],i="[object Arguments]",c="[object Array]",l="[object Boolean]",f="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",b="[object Number]",v="[object Object]",g="[object RegExp]",y="[object Set]",_="[object String]",E="[object Symbol]",w="[object WeakMap]",D="[object ArrayBuffer]",k="[object DataView]",x="[object Float32Array]",S="[object Float64Array]",C="[object Int8Array]",O="[object Int16Array]",I="[object Int32Array]",A="[object Uint8Array]",j="[object Uint16Array]",N="[object Uint32Array]",F=/\b__p \+= '';/g,T=/\b(__p \+=) '' \+/g,P=/(__e\(.*?\)|\b__t\)) \+\n'';/g,M=/&(?:amp|lt|gt|quot|#39);/g,R=/[&<>"']/g,L=RegExp(M.source),B=RegExp(R.source),z=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,H=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,$=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/[\\^$.*+?()[\]{}|]/g,V=RegExp(G.source),K=/^\s+|\s+$/g,Z=/^\s+/,J=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,te=/\\(\\)?/g,ne=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ue=/\w*$/,re=/^[-+]0x[0-9a-f]+$/i,ae=/^0b[01]+$/i,de=/^\[object .+?Constructor\]$/,oe=/^0o[0-7]+$/i,ie=/^(?:0|[1-9]\d*)$/,ce=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,le=/($^)/,fe=/['\n\r\u2028\u2029\\]/g,se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",me="[\\ud800-\\udfff]",he="["+pe+"]",be="["+se+"]",ve="\\d+",ge="[\\u2700-\\u27bf]",ye="[a-z\\xdf-\\xf6\\xf8-\\xff]",_e="[^\\ud800-\\udfff"+pe+ve+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",Ee="\\ud83c[\\udffb-\\udfff]",we="[^\\ud800-\\udfff]",De="(?:\\ud83c[\\udde6-\\uddff]){2}",ke="[\\ud800-\\udbff][\\udc00-\\udfff]",xe="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Se="(?:"+ye+"|"+_e+")",Ce="(?:"+xe+"|"+_e+")",Oe="(?:"+be+"|"+Ee+")"+"?",Ie="[\\ufe0e\\ufe0f]?"+Oe+("(?:\\u200d(?:"+[we,De,ke].join("|")+")[\\ufe0e\\ufe0f]?"+Oe+")*"),Ae="(?:"+[ge,De,ke].join("|")+")"+Ie,je="(?:"+[we+be+"?",be,De,ke,me].join("|")+")",Ne=RegExp("['\u2019]","g"),Fe=RegExp(be,"g"),Te=RegExp(Ee+"(?="+Ee+")|"+je+Ie,"g"),Pe=RegExp([xe+"?"+ye+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[he,xe,"$"].join("|")+")",Ce+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[he,xe+Se,"$"].join("|")+")",xe+"?"+Se+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",xe+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ve,Ae].join("|"),"g"),Me=RegExp("[\\u200d\\ud800-\\udfff"+se+"\\ufe0e\\ufe0f]"),Re=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Le=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Be=-1,ze={};ze[x]=ze[S]=ze[C]=ze[O]=ze[I]=ze[A]=ze["[object Uint8ClampedArray]"]=ze[j]=ze[N]=!0,ze[i]=ze[c]=ze[D]=ze[l]=ze[k]=ze[f]=ze[s]=ze[p]=ze[h]=ze[b]=ze[v]=ze[g]=ze[y]=ze[_]=ze[w]=!1;var Ue={};Ue[i]=Ue[c]=Ue[D]=Ue[k]=Ue[l]=Ue[f]=Ue[x]=Ue[S]=Ue[C]=Ue[O]=Ue[I]=Ue[h]=Ue[b]=Ue[v]=Ue[g]=Ue[y]=Ue[_]=Ue[E]=Ue[A]=Ue["[object Uint8ClampedArray]"]=Ue[j]=Ue[N]=!0,Ue[s]=Ue[p]=Ue[w]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},He=parseFloat,$e=parseInt,qe="object"==typeof e&&e&&e.Object===Object&&e,Ge="object"==typeof self&&self&&self.Object===Object&&self,Ve=qe||Ge||Function("return this")(),Ke=t&&!t.nodeType&&t,Ze=Ke&&"object"==typeof u&&u&&!u.nodeType&&u,Je=Ze&&Ze.exports===Ke,Ye=Je&&qe.process,Qe=function(){try{var e=Ze&&Ze.require&&Ze.require("util").types;return e||Ye&&Ye.binding&&Ye.binding("util")}catch(t){}}(),Xe=Qe&&Qe.isArrayBuffer,et=Qe&&Qe.isDate,tt=Qe&&Qe.isMap,nt=Qe&&Qe.isRegExp,ut=Qe&&Qe.isSet,rt=Qe&&Qe.isTypedArray;function at(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}function dt(e,t,n,u){for(var r=-1,a=null==e?0:e.length;++r-1}function st(e,t,n){for(var u=-1,r=null==e?0:e.length;++u-1;);return n}function Tt(e,t){for(var n=e.length;n--&&Et(t,e[n],0)>-1;);return n}function Pt(e,t){for(var n=e.length,u=0;n--;)e[n]===t&&++u;return u}var Mt=St({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Rt=St({"&":"&","<":"<",">":">",'"':""","'":"'"});function Lt(e){return"\\"+We[e]}function Bt(e){return Me.test(e)}function zt(e){var t=-1,n=Array(e.size);return e.forEach((function(e,u){n[++t]=[u,e]})),n}function Ut(e,t){return function(n){return e(t(n))}}function Wt(e,t){for(var n=-1,u=e.length,r=0,a=[];++n",""":'"',"'":"'"});var Kt=function e(t){var n,u=(t=null==t?Ve:Kt.defaults(Ve.Object(),t,Kt.pick(Ve,Le))).Array,r=t.Date,se=t.Error,pe=t.Function,me=t.Math,he=t.Object,be=t.RegExp,ve=t.String,ge=t.TypeError,ye=u.prototype,_e=pe.prototype,Ee=he.prototype,we=t["__core-js_shared__"],De=_e.toString,ke=Ee.hasOwnProperty,xe=0,Se=(n=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",Ce=Ee.toString,Oe=De.call(he),Ie=Ve._,Ae=be("^"+De.call(ke).replace(G,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),je=Je?t.Buffer:void 0,Te=t.Symbol,Me=t.Uint8Array,We=je?je.allocUnsafe:void 0,qe=Ut(he.getPrototypeOf,he),Ge=he.create,Ke=Ee.propertyIsEnumerable,Ze=ye.splice,Ye=Te?Te.isConcatSpreadable:void 0,Qe=Te?Te.iterator:void 0,gt=Te?Te.toStringTag:void 0,St=function(){try{var e=Xr(he,"defineProperty");return e({},"",{}),e}catch(t){}}(),Zt=t.clearTimeout!==Ve.clearTimeout&&t.clearTimeout,Jt=r&&r.now!==Ve.Date.now&&r.now,Yt=t.setTimeout!==Ve.setTimeout&&t.setTimeout,Qt=me.ceil,Xt=me.floor,en=he.getOwnPropertySymbols,tn=je?je.isBuffer:void 0,nn=t.isFinite,un=ye.join,rn=Ut(he.keys,he),an=me.max,dn=me.min,on=r.now,cn=t.parseInt,ln=me.random,fn=ye.reverse,sn=Xr(t,"DataView"),pn=Xr(t,"Map"),mn=Xr(t,"Promise"),hn=Xr(t,"Set"),bn=Xr(t,"WeakMap"),vn=Xr(he,"create"),gn=bn&&new bn,yn={},_n=Sa(sn),En=Sa(pn),wn=Sa(mn),Dn=Sa(hn),kn=Sa(bn),xn=Te?Te.prototype:void 0,Sn=xn?xn.valueOf:void 0,Cn=xn?xn.toString:void 0;function On(e){if(Hd(e)&&!Nd(e)&&!(e instanceof Nn)){if(e instanceof jn)return e;if(ke.call(e,"__wrapped__"))return Ca(e)}return new jn(e)}var In=function(){function e(){}return function(t){if(!Wd(t))return{};if(Ge)return Ge(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function An(){}function jn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Fn(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t=t?e:t)),e}function Jn(e,t,n,u,r,a){var d,o=1&t,c=2&t,s=4&t;if(n&&(d=r?n(e,u,r,a):n(e)),void 0!==d)return d;if(!Wd(e))return e;var w=Nd(e);if(w){if(d=function(e){var t=e.length,n=new e.constructor(t);t&&"string"==typeof e[0]&&ke.call(e,"index")&&(n.index=e.index,n.input=e.input);return n}(e),!o)return vr(e,d)}else{var F=na(e),T=F==p||F==m;if(Md(e))return fr(e,o);if(F==v||F==i||T&&!r){if(d=c||T?{}:ra(e),!o)return c?function(e,t){return gr(e,ta(e),t)}(e,function(e,t){return e&&gr(t,Eo(t),e)}(d,e)):function(e,t){return gr(e,ea(e),t)}(e,Gn(d,e))}else{if(!Ue[F])return r?e:{};d=function(e,t,n){var u=e.constructor;switch(t){case D:return sr(e);case l:case f:return new u(+e);case k:return function(e,t){var n=t?sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,n);case x:case S:case C:case O:case I:case A:case"[object Uint8ClampedArray]":case j:case N:return pr(e,n);case h:return new u;case b:case _:return new u(e);case g:return function(e){var t=new e.constructor(e.source,ue.exec(e));return t.lastIndex=e.lastIndex,t}(e);case y:return new u;case E:return r=e,Sn?he(Sn.call(r)):{}}var r}(e,F,o)}}a||(a=new Rn);var P=a.get(e);if(P)return P;a.set(e,d),Kd(e)?e.forEach((function(u){d.add(Jn(u,t,n,u,e,a))})):$d(e)&&e.forEach((function(u,r){d.set(r,Jn(u,t,n,r,e,a))}));var M=w?void 0:(s?c?Gr:qr:c?Eo:_o)(e);return ot(M||e,(function(u,r){M&&(u=e[r=u]),Hn(d,r,Jn(u,t,n,r,e,a))})),d}function Yn(e,t,n){var u=n.length;if(null==e)return!u;for(e=he(e);u--;){var r=n[u],a=t[r],d=e[r];if(void 0===d&&!(r in e)||!a(d))return!1}return!0}function Qn(e,t,n){if("function"!=typeof e)throw new ge(a);return ya((function(){e.apply(void 0,n)}),t)}function Xn(e,t,n,u){var r=-1,a=ft,d=!0,o=e.length,i=[],c=t.length;if(!o)return i;n&&(t=pt(t,At(n))),u?(a=st,d=!1):t.length>=200&&(a=Nt,d=!1,t=new Mn(t));e:for(;++r-1},Tn.prototype.set=function(e,t){var n=this.__data__,u=$n(n,e);return u<0?(++this.size,n.push([e,t])):n[u][1]=t,this},Pn.prototype.clear=function(){this.size=0,this.__data__={hash:new Fn,map:new(pn||Tn),string:new Fn}},Pn.prototype.delete=function(e){var t=Yr(this,e).delete(e);return this.size-=t?1:0,t},Pn.prototype.get=function(e){return Yr(this,e).get(e)},Pn.prototype.has=function(e){return Yr(this,e).has(e)},Pn.prototype.set=function(e,t){var n=Yr(this,e),u=n.size;return n.set(e,t),this.size+=n.size==u?0:1,this},Mn.prototype.add=Mn.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Mn.prototype.has=function(e){return this.__data__.has(e)},Rn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Rn.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},Rn.prototype.get=function(e){return this.__data__.get(e)},Rn.prototype.has=function(e){return this.__data__.has(e)},Rn.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Tn){var u=n.__data__;if(!pn||u.length<199)return u.push([e,t]),this.size=++n.size,this;n=this.__data__=new Pn(u)}return n.set(e,t),this.size=n.size,this};var eu=Er(iu),tu=Er(cu,!0);function nu(e,t){var n=!0;return eu(e,(function(e,u,r){return n=!!t(e,u,r)})),n}function uu(e,t,n){for(var u=-1,r=e.length;++u0&&n(o)?t>1?au(o,t-1,n,u,r):mt(r,o):u||(r[r.length]=o)}return r}var du=wr(),ou=wr(!0);function iu(e,t){return e&&du(e,t,_o)}function cu(e,t){return e&&ou(e,t,_o)}function lu(e,t){return lt(t,(function(t){return Bd(e[t])}))}function fu(e,t){for(var n=0,u=(t=or(t,e)).length;null!=e&&nt}function hu(e,t){return null!=e&&ke.call(e,t)}function bu(e,t){return null!=e&&t in he(e)}function vu(e,t,n){for(var r=n?st:ft,a=e[0].length,d=e.length,o=d,i=u(d),c=1/0,l=[];o--;){var f=e[o];o&&t&&(f=pt(f,At(t))),c=dn(f.length,c),i[o]=!n&&(t||a>=120&&f.length>=120)?new Mn(o&&f):void 0}f=e[0];var s=-1,p=i[0];e:for(;++s=o)return i;var c=n[u];return i*("desc"==c?-1:1)}}return e.index-t.index}(e,t,n)}))}function Fu(e,t,n){for(var u=-1,r=t.length,a={};++u-1;)o!==e&&Ze.call(o,i,1),Ze.call(e,i,1);return e}function Pu(e,t){for(var n=e?t.length:0,u=n-1;n--;){var r=t[n];if(n==u||r!==a){var a=r;da(r)?Ze.call(e,r,1):Xu(e,r)}}return e}function Mu(e,t){return e+Xt(ln()*(t-e+1))}function Ru(e,t){var n="";if(!e||t<1||t>9007199254740991)return n;do{t%2&&(n+=e),(t=Xt(t/2))&&(e+=e)}while(t);return n}function Lu(e,t){return _a(ma(e,t,Go),e+"")}function Bu(e){return Bn(Io(e))}function zu(e,t){var n=Io(e);return Da(n,Zn(t,0,n.length))}function Uu(e,t,n,u){if(!Wd(e))return e;for(var r=-1,a=(t=or(t,e)).length,d=a-1,o=e;null!=o&&++ra?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var d=u(a);++r>>1,d=e[a];null!==d&&!Jd(d)&&(n?d<=t:d=200){var c=t?null:Rr(e);if(c)return Ht(c);d=!1,r=Nt,i=new Mn}else i=t?[]:o;e:for(;++u=u?e:qu(e,t,n)}var lr=Zt||function(e){return Ve.clearTimeout(e)};function fr(e,t){if(t)return e.slice();var n=e.length,u=We?We(n):new e.constructor(n);return e.copy(u),u}function sr(e){var t=new e.constructor(e.byteLength);return new Me(t).set(new Me(e)),t}function pr(e,t){var n=t?sr(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function mr(e,t){if(e!==t){var n=void 0!==e,u=null===e,r=e==e,a=Jd(e),d=void 0!==t,o=null===t,i=t==t,c=Jd(t);if(!o&&!c&&!a&&e>t||a&&d&&i&&!o&&!c||u&&d&&i||!n&&i||!r)return 1;if(!u&&!a&&!c&&e1?n[r-1]:void 0,d=r>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(r--,a):void 0,d&&oa(n[0],n[1],d)&&(a=r<3?void 0:a,r=1),t=he(t);++u-1?r[a?t[d]:d]:void 0}}function Cr(e){return $r((function(t){var n=t.length,u=n,r=jn.prototype.thru;for(e&&t.reverse();u--;){var d=t[u];if("function"!=typeof d)throw new ge(a);if(r&&!o&&"wrapper"==Kr(d))var o=new jn([],!0)}for(u=o?u:n;++u1&&y.reverse(),f&&co))return!1;var c=a.get(e);if(c&&a.get(t))return c==t;var l=-1,f=!0,s=2&n?new Mn:void 0;for(a.set(e,t),a.set(t,e);++l-1&&e%1==0&&e1?"& ":"")+t[u],t=t.join(n>2?", ":" "),e.replace(Y,"{\n/* [wrapped with "+t+"] */\n")}(u,function(e,t){return ot(o,(function(n){var u="_."+n[0];t&n[1]&&!ft(e,u)&&e.push(u)})),e.sort()}(function(e){var t=e.match(Q);return t?t[1].split(X):[]}(u),n)))}function wa(e){var t=0,n=0;return function(){var u=on(),r=16-(u-n);if(n=u,r>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Da(e,t){var n=-1,u=e.length,r=u-1;for(t=void 0===t?u:t;++n1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Va(e,n)}));function ed(e){var t=On(e);return t.__chain__=!0,t}function td(e,t){return t(e)}var nd=$r((function(e){var t=e.length,n=t?e[0]:0,u=this.__wrapped__,r=function(t){return Kn(t,e)};return!(t>1||this.__actions__.length)&&u instanceof Nn&&da(n)?((u=u.slice(n,+n+(t?1:0))).__actions__.push({func:td,args:[r],thisArg:void 0}),new jn(u,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(r)}));var ud=yr((function(e,t,n){ke.call(e,n)?++e[n]:Vn(e,n,1)}));var rd=Sr(ja),ad=Sr(Na);function dd(e,t){return(Nd(e)?ot:eu)(e,Jr(t,3))}function od(e,t){return(Nd(e)?it:tu)(e,Jr(t,3))}var id=yr((function(e,t,n){ke.call(e,n)?e[n].push(t):Vn(e,n,[t])}));var cd=Lu((function(e,t,n){var r=-1,a="function"==typeof t,d=Td(e)?u(e.length):[];return eu(e,(function(e){d[++r]=a?at(t,e,n):gu(e,t,n)})),d})),ld=yr((function(e,t,n){Vn(e,n,t)}));function fd(e,t){return(Nd(e)?pt:Cu)(e,Jr(t,3))}var sd=yr((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]}));var pd=Lu((function(e,t){if(null==e)return[];var n=t.length;return n>1&&oa(e,t[0],t[1])?t=[]:n>2&&oa(t[0],t[1],t[2])&&(t=[t[0]]),Nu(e,au(t,1),[])})),md=Jt||function(){return Ve.Date.now()};function hd(e,t,n){return t=n?void 0:t,Br(e,128,void 0,void 0,void 0,void 0,t=e&&null==t?e.length:t)}function bd(e,t){var n;if("function"!=typeof t)throw new ge(a);return e=no(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}}var vd=Lu((function(e,t,n){var u=1;if(n.length){var r=Wt(n,Zr(vd));u|=32}return Br(e,u,t,n,r)})),gd=Lu((function(e,t,n){var u=3;if(n.length){var r=Wt(n,Zr(gd));u|=32}return Br(t,u,e,n,r)}));function yd(e,t,n){var u,r,d,o,i,c,l=0,f=!1,s=!1,p=!0;if("function"!=typeof e)throw new ge(a);function m(t){var n=u,a=r;return u=r=void 0,l=t,o=e.apply(a,n)}function h(e){return l=e,i=ya(v,t),f?m(e):o}function b(e){var n=e-c;return void 0===c||n>=t||n<0||s&&e-l>=d}function v(){var e=md();if(b(e))return g(e);i=ya(v,function(e){var n=t-(e-c);return s?dn(n,d-(e-l)):n}(e))}function g(e){return i=void 0,p&&u?m(e):(u=r=void 0,o)}function y(){var e=md(),n=b(e);if(u=arguments,r=this,c=e,n){if(void 0===i)return h(c);if(s)return lr(i),i=ya(v,t),m(c)}return void 0===i&&(i=ya(v,t)),o}return t=ro(t)||0,Wd(n)&&(f=!!n.leading,d=(s="maxWait"in n)?an(ro(n.maxWait)||0,t):d,p="trailing"in n?!!n.trailing:p),y.cancel=function(){void 0!==i&&lr(i),l=0,u=c=r=i=void 0},y.flush=function(){return void 0===i?o:g(md())},y}var _d=Lu((function(e,t){return Qn(e,1,t)})),Ed=Lu((function(e,t,n){return Qn(e,ro(t)||0,n)}));function wd(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new ge(a);var n=function(){var u=arguments,r=t?t.apply(this,u):u[0],a=n.cache;if(a.has(r))return a.get(r);var d=e.apply(this,u);return n.cache=a.set(r,d)||a,d};return n.cache=new(wd.Cache||Pn),n}function Dd(e){if("function"!=typeof e)throw new ge(a);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}wd.Cache=Pn;var kd=ir((function(e,t){var n=(t=1==t.length&&Nd(t[0])?pt(t[0],At(Jr())):pt(au(t,1),At(Jr()))).length;return Lu((function(u){for(var r=-1,a=dn(u.length,n);++r=t})),jd=yu(function(){return arguments}())?yu:function(e){return Hd(e)&&ke.call(e,"callee")&&!Ke.call(e,"callee")},Nd=u.isArray,Fd=Xe?At(Xe):function(e){return Hd(e)&&pu(e)==D};function Td(e){return null!=e&&Ud(e.length)&&!Bd(e)}function Pd(e){return Hd(e)&&Td(e)}var Md=tn||ai,Rd=et?At(et):function(e){return Hd(e)&&pu(e)==f};function Ld(e){if(!Hd(e))return!1;var t=pu(e);return t==s||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Gd(e)}function Bd(e){if(!Wd(e))return!1;var t=pu(e);return t==p||t==m||"[object AsyncFunction]"==t||"[object Proxy]"==t}function zd(e){return"number"==typeof e&&e==no(e)}function Ud(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Wd(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Hd(e){return null!=e&&"object"==typeof e}var $d=tt?At(tt):function(e){return Hd(e)&&na(e)==h};function qd(e){return"number"==typeof e||Hd(e)&&pu(e)==b}function Gd(e){if(!Hd(e)||pu(e)!=v)return!1;var t=qe(e);if(null===t)return!0;var n=ke.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&De.call(n)==Oe}var Vd=nt?At(nt):function(e){return Hd(e)&&pu(e)==g};var Kd=ut?At(ut):function(e){return Hd(e)&&na(e)==y};function Zd(e){return"string"==typeof e||!Nd(e)&&Hd(e)&&pu(e)==_}function Jd(e){return"symbol"==typeof e||Hd(e)&&pu(e)==E}var Yd=rt?At(rt):function(e){return Hd(e)&&Ud(e.length)&&!!ze[pu(e)]};var Qd=Tr(Su),Xd=Tr((function(e,t){return e<=t}));function eo(e){if(!e)return[];if(Td(e))return Zd(e)?Gt(e):vr(e);if(Qe&&e[Qe])return function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}(e[Qe]());var t=na(e);return(t==h?zt:t==y?Ht:Io)(e)}function to(e){return e?(e=ro(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function no(e){var t=to(e),n=t%1;return t==t?n?t-n:t:0}function uo(e){return e?Zn(no(e),0,4294967295):0}function ro(e){if("number"==typeof e)return e;if(Jd(e))return NaN;if(Wd(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Wd(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(K,"");var n=ae.test(e);return n||oe.test(e)?$e(e.slice(2),n?2:8):re.test(e)?NaN:+e}function ao(e){return gr(e,Eo(e))}function oo(e){return null==e?"":Yu(e)}var io=_r((function(e,t){if(fa(t)||Td(t))gr(t,_o(t),e);else for(var n in t)ke.call(t,n)&&Hn(e,n,t[n])})),co=_r((function(e,t){gr(t,Eo(t),e)})),lo=_r((function(e,t,n,u){gr(t,Eo(t),e,u)})),fo=_r((function(e,t,n,u){gr(t,_o(t),e,u)})),so=$r(Kn);var po=Lu((function(e,t){e=he(e);var n=-1,u=t.length,r=u>2?t[2]:void 0;for(r&&oa(t[0],t[1],r)&&(u=1);++n1),t})),gr(e,Gr(e),n),u&&(n=Jn(n,7,Wr));for(var r=t.length;r--;)Xu(n,t[r]);return n}));var xo=$r((function(e,t){return null==e?{}:function(e,t){return Fu(e,t,(function(t,n){return bo(e,n)}))}(e,t)}));function So(e,t){if(null==e)return{};var n=pt(Gr(e),(function(e){return[e]}));return t=Jr(t),Fu(e,n,(function(e,n){return t(e,n[0])}))}var Co=Lr(_o),Oo=Lr(Eo);function Io(e){return null==e?[]:jt(e,_o(e))}var Ao=kr((function(e,t,n){return t=t.toLowerCase(),e+(n?jo(t):t)}));function jo(e){return Bo(oo(e).toLowerCase())}function No(e){return(e=oo(e))&&e.replace(ce,Mt).replace(Fe,"")}var Fo=kr((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),To=kr((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Po=Dr("toLowerCase");var Mo=kr((function(e,t,n){return e+(n?"_":"")+t.toLowerCase()}));var Ro=kr((function(e,t,n){return e+(n?" ":"")+Bo(t)}));var Lo=kr((function(e,t,n){return e+(n?" ":"")+t.toUpperCase()})),Bo=Dr("toUpperCase");function zo(e,t,n){return e=oo(e),void 0===(t=n?void 0:t)?function(e){return Re.test(e)}(e)?function(e){return e.match(Pe)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(t)||[]}var Uo=Lu((function(e,t){try{return at(e,void 0,t)}catch(n){return Ld(n)?n:new se(n)}})),Wo=$r((function(e,t){return ot(t,(function(t){t=xa(t),Vn(e,t,vd(e[t],e))})),e}));function Ho(e){return function(){return e}}var $o=Cr(),qo=Cr(!0);function Go(e){return e}function Vo(e){return Du("function"==typeof e?e:Jn(e,1))}var Ko=Lu((function(e,t){return function(n){return gu(n,e,t)}})),Zo=Lu((function(e,t){return function(n){return gu(e,n,t)}}));function Jo(e,t,n){var u=_o(t),r=lu(t,u);null!=n||Wd(t)&&(r.length||!u.length)||(n=t,t=e,e=this,r=lu(t,_o(t)));var a=!(Wd(n)&&"chain"in n&&!n.chain),d=Bd(e);return ot(r,(function(n){var u=t[n];e[n]=u,d&&(e.prototype[n]=function(){var t=this.__chain__;if(a||t){var n=e(this.__wrapped__),r=n.__actions__=vr(this.__actions__);return r.push({func:u,args:arguments,thisArg:e}),n.__chain__=t,n}return u.apply(e,mt([this.value()],arguments))})})),e}function Yo(){}var Qo=jr(pt),Xo=jr(ct),ei=jr(vt);function ti(e){return ia(e)?xt(xa(e)):function(e){return function(t){return fu(t,e)}}(e)}var ni=Fr(),ui=Fr(!0);function ri(){return[]}function ai(){return!1}var di=Ar((function(e,t){return e+t}),0),oi=Mr("ceil"),ii=Ar((function(e,t){return e/t}),1),ci=Mr("floor");var li,fi=Ar((function(e,t){return e*t}),1),si=Mr("round"),pi=Ar((function(e,t){return e-t}),0);return On.after=function(e,t){if("function"!=typeof t)throw new ge(a);return e=no(e),function(){if(--e<1)return t.apply(this,arguments)}},On.ary=hd,On.assign=io,On.assignIn=co,On.assignInWith=lo,On.assignWith=fo,On.at=so,On.before=bd,On.bind=vd,On.bindAll=Wo,On.bindKey=gd,On.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Nd(e)?e:[e]},On.chain=ed,On.chunk=function(e,t,n){t=(n?oa(e,t,n):void 0===t)?1:an(no(t),0);var r=null==e?0:e.length;if(!r||t<1)return[];for(var a=0,d=0,o=u(Qt(r/t));ar?0:r+n),(u=void 0===u||u>r?r:no(u))<0&&(u+=r),u=n>u?0:uo(u);n>>0)?(e=oo(e))&&("string"==typeof t||null!=t&&!Vd(t))&&!(t=Yu(t))&&Bt(e)?cr(Gt(e),0,n):e.split(t,n):[]},On.spread=function(e,t){if("function"!=typeof e)throw new ge(a);return t=null==t?0:an(no(t),0),Lu((function(n){var u=n[t],r=cr(n,0,t);return u&&mt(r,u),at(e,this,r)}))},On.tail=function(e){var t=null==e?0:e.length;return t?qu(e,1,t):[]},On.take=function(e,t,n){return e&&e.length?qu(e,0,(t=n||void 0===t?1:no(t))<0?0:t):[]},On.takeRight=function(e,t,n){var u=null==e?0:e.length;return u?qu(e,(t=u-(t=n||void 0===t?1:no(t)))<0?0:t,u):[]},On.takeRightWhile=function(e,t){return e&&e.length?tr(e,Jr(t,3),!1,!0):[]},On.takeWhile=function(e,t){return e&&e.length?tr(e,Jr(t,3)):[]},On.tap=function(e,t){return t(e),e},On.throttle=function(e,t,n){var u=!0,r=!0;if("function"!=typeof e)throw new ge(a);return Wd(n)&&(u="leading"in n?!!n.leading:u,r="trailing"in n?!!n.trailing:r),yd(e,t,{leading:u,maxWait:t,trailing:r})},On.thru=td,On.toArray=eo,On.toPairs=Co,On.toPairsIn=Oo,On.toPath=function(e){return Nd(e)?pt(e,xa):Jd(e)?[e]:vr(ka(oo(e)))},On.toPlainObject=ao,On.transform=function(e,t,n){var u=Nd(e),r=u||Md(e)||Yd(e);if(t=Jr(t,4),null==n){var a=e&&e.constructor;n=r?u?new a:[]:Wd(e)&&Bd(a)?In(qe(e)):{}}return(r?ot:iu)(e,(function(e,u,r){return t(n,e,u,r)})),n},On.unary=function(e){return hd(e,1)},On.union=Ha,On.unionBy=$a,On.unionWith=qa,On.uniq=function(e){return e&&e.length?Qu(e):[]},On.uniqBy=function(e,t){return e&&e.length?Qu(e,Jr(t,2)):[]},On.uniqWith=function(e,t){return t="function"==typeof t?t:void 0,e&&e.length?Qu(e,void 0,t):[]},On.unset=function(e,t){return null==e||Xu(e,t)},On.unzip=Ga,On.unzipWith=Va,On.update=function(e,t,n){return null==e?e:er(e,t,dr(n))},On.updateWith=function(e,t,n,u){return u="function"==typeof u?u:void 0,null==e?e:er(e,t,dr(n),u)},On.values=Io,On.valuesIn=function(e){return null==e?[]:jt(e,Eo(e))},On.without=Ka,On.words=zo,On.wrap=function(e,t){return xd(dr(t),e)},On.xor=Za,On.xorBy=Ja,On.xorWith=Ya,On.zip=Qa,On.zipObject=function(e,t){return rr(e||[],t||[],Hn)},On.zipObjectDeep=function(e,t){return rr(e||[],t||[],Uu)},On.zipWith=Xa,On.entries=Co,On.entriesIn=Oo,On.extend=co,On.extendWith=lo,Jo(On,On),On.add=di,On.attempt=Uo,On.camelCase=Ao,On.capitalize=jo,On.ceil=oi,On.clamp=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=ro(n))==n?n:0),void 0!==t&&(t=(t=ro(t))==t?t:0),Zn(ro(e),t,n)},On.clone=function(e){return Jn(e,4)},On.cloneDeep=function(e){return Jn(e,5)},On.cloneDeepWith=function(e,t){return Jn(e,5,t="function"==typeof t?t:void 0)},On.cloneWith=function(e,t){return Jn(e,4,t="function"==typeof t?t:void 0)},On.conformsTo=function(e,t){return null==t||Yn(e,t,_o(t))},On.deburr=No,On.defaultTo=function(e,t){return null==e||e!=e?t:e},On.divide=ii,On.endsWith=function(e,t,n){e=oo(e),t=Yu(t);var u=e.length,r=n=void 0===n?u:Zn(no(n),0,u);return(n-=t.length)>=0&&e.slice(n,r)==t},On.eq=Od,On.escape=function(e){return(e=oo(e))&&B.test(e)?e.replace(R,Rt):e},On.escapeRegExp=function(e){return(e=oo(e))&&V.test(e)?e.replace(G,"\\$&"):e},On.every=function(e,t,n){var u=Nd(e)?ct:nu;return n&&oa(e,t,n)&&(t=void 0),u(e,Jr(t,3))},On.find=rd,On.findIndex=ja,On.findKey=function(e,t){return yt(e,Jr(t,3),iu)},On.findLast=ad,On.findLastIndex=Na,On.findLastKey=function(e,t){return yt(e,Jr(t,3),cu)},On.floor=ci,On.forEach=dd,On.forEachRight=od,On.forIn=function(e,t){return null==e?e:du(e,Jr(t,3),Eo)},On.forInRight=function(e,t){return null==e?e:ou(e,Jr(t,3),Eo)},On.forOwn=function(e,t){return e&&iu(e,Jr(t,3))},On.forOwnRight=function(e,t){return e&&cu(e,Jr(t,3))},On.get=ho,On.gt=Id,On.gte=Ad,On.has=function(e,t){return null!=e&&ua(e,t,hu)},On.hasIn=bo,On.head=Ta,On.identity=Go,On.includes=function(e,t,n,u){e=Td(e)?e:Io(e),n=n&&!u?no(n):0;var r=e.length;return n<0&&(n=an(r+n,0)),Zd(e)?n<=r&&e.indexOf(t,n)>-1:!!r&&Et(e,t,n)>-1},On.indexOf=function(e,t,n){var u=null==e?0:e.length;if(!u)return-1;var r=null==n?0:no(n);return r<0&&(r=an(u+r,0)),Et(e,t,r)},On.inRange=function(e,t,n){return t=to(t),void 0===n?(n=t,t=0):n=to(n),function(e,t,n){return e>=dn(t,n)&&e=-9007199254740991&&e<=9007199254740991},On.isSet=Kd,On.isString=Zd,On.isSymbol=Jd,On.isTypedArray=Yd,On.isUndefined=function(e){return void 0===e},On.isWeakMap=function(e){return Hd(e)&&na(e)==w},On.isWeakSet=function(e){return Hd(e)&&"[object WeakSet]"==pu(e)},On.join=function(e,t){return null==e?"":un.call(e,t)},On.kebabCase=Fo,On.last=La,On.lastIndexOf=function(e,t,n){var u=null==e?0:e.length;if(!u)return-1;var r=u;return void 0!==n&&(r=(r=no(n))<0?an(u+r,0):dn(r,u-1)),t==t?function(e,t,n){for(var u=n+1;u--;)if(e[u]===t)return u;return u}(e,t,r):_t(e,Dt,r,!0)},On.lowerCase=To,On.lowerFirst=Po,On.lt=Qd,On.lte=Xd,On.max=function(e){return e&&e.length?uu(e,Go,mu):void 0},On.maxBy=function(e,t){return e&&e.length?uu(e,Jr(t,2),mu):void 0},On.mean=function(e){return kt(e,Go)},On.meanBy=function(e,t){return kt(e,Jr(t,2))},On.min=function(e){return e&&e.length?uu(e,Go,Su):void 0},On.minBy=function(e,t){return e&&e.length?uu(e,Jr(t,2),Su):void 0},On.stubArray=ri,On.stubFalse=ai,On.stubObject=function(){return{}},On.stubString=function(){return""},On.stubTrue=function(){return!0},On.multiply=fi,On.nth=function(e,t){return e&&e.length?ju(e,no(t)):void 0},On.noConflict=function(){return Ve._===this&&(Ve._=Ie),this},On.noop=Yo,On.now=md,On.pad=function(e,t,n){e=oo(e);var u=(t=no(t))?qt(e):0;if(!t||u>=t)return e;var r=(t-u)/2;return Nr(Xt(r),n)+e+Nr(Qt(r),n)},On.padEnd=function(e,t,n){e=oo(e);var u=(t=no(t))?qt(e):0;return t&&ut){var u=e;e=t,t=u}if(n||e%1||t%1){var r=ln();return dn(e+r*(t-e+He("1e-"+((r+"").length-1))),t)}return Mu(e,t)},On.reduce=function(e,t,n){var u=Nd(e)?ht:Ct,r=arguments.length<3;return u(e,Jr(t,4),n,r,eu)},On.reduceRight=function(e,t,n){var u=Nd(e)?bt:Ct,r=arguments.length<3;return u(e,Jr(t,4),n,r,tu)},On.repeat=function(e,t,n){return t=(n?oa(e,t,n):void 0===t)?1:no(t),Ru(oo(e),t)},On.replace=function(){var e=arguments,t=oo(e[0]);return e.length<3?t:t.replace(e[1],e[2])},On.result=function(e,t,n){var u=-1,r=(t=or(t,e)).length;for(r||(r=1,e=void 0);++u9007199254740991)return[];var n=4294967295,u=dn(e,4294967295);e-=4294967295;for(var r=It(u,t=Jr(t));++n=a)return e;var o=n-qt(u);if(o<1)return u;var i=d?cr(d,0,o).join(""):e.slice(0,o);if(void 0===r)return i+u;if(d&&(o+=i.length-o),Vd(r)){if(e.slice(o).search(r)){var c,l=i;for(r.global||(r=be(r.source,oo(ue.exec(r))+"g")),r.lastIndex=0;c=r.exec(l);)var f=c.index;i=i.slice(0,void 0===f?o:f)}}else if(e.indexOf(Yu(r),o)!=o){var s=i.lastIndexOf(r);s>-1&&(i=i.slice(0,s))}return i+u},On.unescape=function(e){return(e=oo(e))&&L.test(e)?e.replace(M,Vt):e},On.uniqueId=function(e){var t=++xe;return oo(e)+t},On.upperCase=Lo,On.upperFirst=Bo,On.each=dd,On.eachRight=od,On.first=Ta,Jo(On,(li={},iu(On,(function(e,t){ke.call(On.prototype,t)||(li[t]=e)})),li),{chain:!1}),On.VERSION="4.17.15",ot(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){On[e].placeholder=On})),ot(["drop","take"],(function(e,t){Nn.prototype[e]=function(n){n=void 0===n?1:an(no(n),0);var u=this.__filtered__&&!t?new Nn(this):this.clone();return u.__filtered__?u.__takeCount__=dn(n,u.__takeCount__):u.__views__.push({size:dn(n,4294967295),type:e+(u.__dir__<0?"Right":"")}),u},Nn.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),ot(["filter","map","takeWhile"],(function(e,t){var n=t+1,u=1==n||3==n;Nn.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Jr(e,3),type:n}),t.__filtered__=t.__filtered__||u,t}})),ot(["head","last"],(function(e,t){var n="take"+(t?"Right":"");Nn.prototype[e]=function(){return this[n](1).value()[0]}})),ot(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");Nn.prototype[e]=function(){return this.__filtered__?new Nn(this):this[n](1)}})),Nn.prototype.compact=function(){return this.filter(Go)},Nn.prototype.find=function(e){return this.filter(e).head()},Nn.prototype.findLast=function(e){return this.reverse().find(e)},Nn.prototype.invokeMap=Lu((function(e,t){return"function"==typeof e?new Nn(this):this.map((function(n){return gu(n,e,t)}))})),Nn.prototype.reject=function(e){return this.filter(Dd(Jr(e)))},Nn.prototype.slice=function(e,t){e=no(e);var n=this;return n.__filtered__&&(e>0||t<0)?new Nn(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=no(t))<0?n.dropRight(-t):n.take(t-e)),n)},Nn.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Nn.prototype.toArray=function(){return this.take(4294967295)},iu(Nn.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),u=/^(?:head|last)$/.test(t),r=On[u?"take"+("last"==t?"Right":""):t],a=u||/^find/.test(t);r&&(On.prototype[t]=function(){var t=this.__wrapped__,d=u?[1]:arguments,o=t instanceof Nn,i=d[0],c=o||Nd(t),l=function(e){var t=r.apply(On,mt([e],d));return u&&f?t[0]:t};c&&n&&"function"==typeof i&&1!=i.length&&(o=c=!1);var f=this.__chain__,s=!!this.__actions__.length,p=a&&!f,m=o&&!s;if(!a&&c){t=m?t:new Nn(this);var h=e.apply(t,d);return h.__actions__.push({func:td,args:[l],thisArg:void 0}),new jn(h,f)}return p&&m?e.apply(this,d):(h=this.thru(l),p?u?h.value()[0]:h.value():h)})})),ot(["pop","push","shift","sort","splice","unshift"],(function(e){var t=ye[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",u=/^(?:pop|shift)$/.test(e);On.prototype[e]=function(){var e=arguments;if(u&&!this.__chain__){var r=this.value();return t.apply(Nd(r)?r:[],e)}return this[n]((function(n){return t.apply(Nd(n)?n:[],e)}))}})),iu(Nn.prototype,(function(e,t){var n=On[t];if(n){var u=n.name+"";ke.call(yn,u)||(yn[u]=[]),yn[u].push({name:t,func:n})}})),yn[Or(void 0,2).name]=[{name:"wrapper",func:void 0}],Nn.prototype.clone=function(){var e=new Nn(this.__wrapped__);return e.__actions__=vr(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=vr(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=vr(this.__views__),e},Nn.prototype.reverse=function(){if(this.__filtered__){var e=new Nn(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Nn.prototype.value=function(){var e=this.__wrapped__.value(),t=this.__dir__,n=Nd(e),u=t<0,r=n?e.length:0,a=function(e,t,n){var u=-1,r=n.length;for(;++u=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},On.prototype.plant=function(e){for(var t,n=this;n instanceof An;){var u=Ca(n);u.__index__=0,u.__values__=void 0,t?r.__wrapped__=u:t=u;var r=u;n=n.__wrapped__}return r.__wrapped__=e,t},On.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Nn){var t=e;return this.__actions__.length&&(t=new Nn(this)),(t=t.reverse()).__actions__.push({func:td,args:[Wa],thisArg:void 0}),new jn(t,this.__chain__)}return this.thru(Wa)},On.prototype.toJSON=On.prototype.valueOf=On.prototype.value=function(){return nr(this.__wrapped__,this.__actions__)},On.prototype.first=On.prototype.head,Qe&&(On.prototype[Qe]=function(){return this}),On}();Ve._=Kt,void 0===(r=function(){return Kt}.call(t,n,t,u))||(u.exports=r)}).call(this)}).call(this,n(76),n(448)(e))},444:function(e,t,n){"use strict";var u=n(0);t.a=function(e){void 0===e&&(e=!0),Object(u.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e])}},445:function(e,t,n){"use strict";var u=n(428),r=n(433),a=n(430),d=n(425);t.a=function(){var e=Object(u.a)().siteConfig,t=(e=void 0===e?{}:e).baseUrl,n=e.themeConfig.navbar,o=(n=void 0===n?{}:n).logo,i=void 0===o?{}:o,c=Object(r.a)().isDarkTheme,l=i.href||t,f={};i.target?f={target:i.target}:Object(d.a)(l)||(f={rel:"noopener noreferrer",target:"_blank"});var s=i.srcDark&&c?i.srcDark:i.src;return{logoLink:l,logoLinkProps:f,logoImageUrl:Object(a.a)(s),logoAlt:i.alt}}},447:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n(77),n(465),n(431),n(78);var u=n(467),r=n.n(u);function a(e,t){var n=new r.a;return e.map((function(e){var u=e;return"string"==typeof e&&(u={label:e,permalink:"/blog/tags/"+n.slug(e)}),function(e,t){var n=e.label.split(": ",2),u=n[0],r=n[1],a="primary";switch(t){case"blog":case"guides":a=function(e){switch(e){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(u)}return{category:u,count:e.count,label:e.label,permalink:e.permalink,style:a,value:r}}(u,t)}))}},448:function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},449:function(e,t,n){"use strict";var u=n(12),r=n(26),a=n(509),d="".endsWith;u(u.P+u.F*n(510)("endsWith"),"String",{endsWith:function(e){var t=a(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,u=r(t.length),o=void 0===n?u:Math.min(r(n),u),i=String(e);return d?d.call(t,i,o):t.slice(o-i.length,o)===i}})},450:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(428),d=n(145),o=n.n(d);t.a=function(){var e=Object(a.a)().siteConfig,t=(e=void 0===e?{}:e).themeConfig.announcementBar,n=void 0===t?{}:t,d=n.id,i=n.content,c=n.backgroundColor,l=n.textColor,f=Object(u.useState)(!0),s=f[0],p=f[1];return Object(u.useEffect)((function(){var e=localStorage.getItem("docusaurus.announcement.id"),t=d!==e;localStorage.setItem("docusaurus.announcement.id",d),t&&localStorage.setItem("docusaurus.announcement.dismiss",!1),(t||"false"===localStorage.getItem("docusaurus.announcement.dismiss"))&&p(!1)}),[]),!i||s?null:r.a.createElement("div",{className:o.a.announcementBar,style:{backgroundColor:c,color:l},role:"banner"},r.a.createElement("div",{className:o.a.announcementBarContent,dangerouslySetInnerHTML:{__html:i}}),r.a.createElement("button",{type:"button",className:o.a.announcementBarClose,onClick:function(){localStorage.setItem("docusaurus.announcement.dismiss",!0),p(!0)},"aria-label":"Close"},r.a.createElement("span",{"aria-hidden":"true"},"\xd7")))}},451:function(e,t,n){"use strict";var u=n(0);u.PureComponent},452:function(e,t,n){"use strict";n(58),n(29),n(22),n(21),n(79);var u=n(0),r=n.n(u),a=n(415),d=n.n(a),o=n(428),i=n(464);n(146);t.a=function(e){var t=Object(u.useState)(!1),a=t[0],c=t[1],l=Object(u.useRef)(null),f=Object(o.a)().siteConfig,s=(void 0===f?{}:f).themeConfig.algolia,p=Object(i.c)();var m=function(e){void 0===e&&(e=!0),a||Promise.all([n.e(261).then(n.t.bind(null,562,7)),n.e(168).then(n.t.bind(null,575,7))]).then((function(t){var n=t[0].default;c(!0),window.docsearch=n,function(e){window.docsearch({appId:s.appId,apiKey:s.apiKey,indexName:s.indexName,inputSelector:"#search_input_react",algoliaOptions:s.algoliaOptions,handleSelected:function(e,t,n){var u=document.createElement("a");u.href=n.url;var r="#__docusaurus"===u.hash?""+u.pathname:""+u.pathname+u.hash;p.push(r)}}),e&&l.current.focus()}(e)}))},h=Object(u.useCallback)((function(){m(),a&&l.current.focus(),e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]),b=Object(u.useCallback)((function(){e.handleSearchBarToggle(!e.isSearchBarExpanded)}),[e.isSearchBarExpanded]),v=Object(u.useCallback)((function(e){var t="mouseover"!==e.type;m(t)}));return r.a.createElement("div",{className:"navbar__search",key:"search-box"},r.a.createElement("span",{"aria-label":"expand searchbar",role:"button",className:d()("search-icon",{"search-icon-hidden":e.isSearchBarExpanded}),onClick:h,onKeyDown:h,tabIndex:0}),r.a.createElement("input",{id:"search_input_react",type:"search",placeholder:"Search","aria-label":"Search",className:d()("navbar__search-input",{"search-bar-expanded":e.isSearchBarExpanded},{"search-bar":!e.isSearchBarExpanded}),onMouseOver:v,onFocus:v,onBlur:b,ref:l}))}},453:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=Object.assign||function(e){for(var t=1;tthis.startX&&(this.setState({checked:!0}),this.startX=t,this.activated=tn?this.previouslyChecked!==this.state.checked&&(this.setState({checked:!1}),this.previouslyChecked=this.state.checked,t.click()):this.startX-4=0||Object.prototype.hasOwnProperty.call(e,u)&&(n[u]=e[u]);return n}(t,["className","icons"])),a=(0,o.default)("react-toggle",{"react-toggle--checked":this.state.checked,"react-toggle--focus":this.state.hasFocus,"react-toggle--disabled":this.props.disabled},n);return d.default.createElement("div",{className:a,onClick:this.handleClick,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd},d.default.createElement("div",{className:"react-toggle-track"},d.default.createElement("div",{className:"react-toggle-track-check"},this.getIcon("checked")),d.default.createElement("div",{className:"react-toggle-track-x"},this.getIcon("unchecked"))),d.default.createElement("div",{className:"react-toggle-thumb"}),d.default.createElement("input",u({},r,{ref:function(t){e.input=t},onFocus:this.handleFocus,onBlur:this.handleBlur,className:"react-toggle-screenreader-only",type:"checkbox"})))}}]),t}(a.PureComponent);t.default=p,p.displayName="Toggle",p.defaultProps={icons:{checked:d.default.createElement(c.default,null),unchecked:d.default.createElement(l.default,null)}},p.propTypes={checked:i.default.bool,disabled:i.default.bool,defaultChecked:i.default.bool,onChange:i.default.func,onFocus:i.default.func,onBlur:i.default.func,className:i.default.string,name:i.default.string,value:i.default.string,id:i.default.string,"aria-labelledby":i.default.string,"aria-label":i.default.string,icons:i.default.oneOfType([i.default.bool,i.default.shape({checked:i.default.node,unchecked:i.default.node})])}},454:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=(n(84),n(465),function(){var e=Object(u.useState)({}),t=e[0],n=e[1],r=Object(u.useCallback)((function(e,t){try{localStorage.setItem("docusaurus.tab."+e,t)}catch(n){console.error(n)}}),[]);return Object(u.useEffect)((function(){try{for(var e={},t=0;t=f?d(!1):e+n1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,e))throw new u("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=x(e),r=n.length>0?n[0]:"",d=S("%"+r+"%",t),i=d.name,c=d.value,l=!1,f=d.alias;f&&(r=f[0],y(n,g([0,1],f)));for(var s=1,p=!0;s=n.length){var D=o(c,h);c=(p=!!D)&&"get"in D&&!("originalValue"in D.get)?D.get:c[h]}else p=v(c,h),c=c[h];p&&!l&&(m[i]=c)}}return c}},462:function(e,t,n){"use strict";var u=n(501);e.exports=Function.prototype.bind||u},463:function(e,t,n){"use strict";var u=String.prototype.replace,r=/%20/g,a="RFC1738",d="RFC3986";e.exports={default:d,formatters:{RFC1738:function(e){return u.call(e,r,"+")},RFC3986:function(e){return String(e)}},RFC1738:a,RFC3986:d}},464:function(e,t,n){"use strict";var u=n(39);n.d(t,"a",(function(){return u.c})),n.d(t,"b",(function(){return u.d})),n.d(t,"c",(function(){return u.e})),n.d(t,"d",(function(){return u.f}))},466:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);t.a=function(e){var t=e.count,n=e.label,u=e.permalink,d=e.style,i=e.value,c=e.valueOnly;return r.a.createElement(a.a,{to:u+"/",className:o()("badge","badge--rounded","badge--"+d)},c?i:n,t&&r.a.createElement(r.a.Fragment,null," (",t,")"))}},467:function(e,t,n){var u=n(468);e.exports=o;var r=Object.hasOwnProperty,a=/\s/g,d=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function i(e,t){return"string"!=typeof e?"":(t||(e=e.toLowerCase()),e.trim().replace(d,"").replace(u(),"").replace(a,"-"))}o.prototype.slug=function(e,t){for(var n=i(e,!0===t),u=n;r.call(this.occurrences,n);)this.occurrences[u]++,n=u+"-"+this.occurrences[u];return this.occurrences[n]=0,n},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=i},468:function(e,t){e.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},470:function(e,t,n){"use strict";var u=n(463),r=Object.prototype.hasOwnProperty,a=Array.isArray,d=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),o=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},u=0;u1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var u=[],r=0;r=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||a===u.RFC1738&&(40===l||41===l)?i+=o.charAt(c):l<128?i+=d[l]:l<2048?i+=d[192|l>>6]+d[128|63&l]:l<55296||l>=57344?i+=d[224|l>>12]+d[128|l>>6&63]+d[128|63&l]:(c+=1,l=65536+((1023&l)<<10|1023&o.charCodeAt(c)),i+=d[240|l>>18]+d[128|l>>12&63]+d[128|l>>6&63]+d[128|63&l])}return i},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],u=0;u{if("string"!=typeof e)throw new TypeError("Expected a string");return e=(e=(e=u(e)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+e.slice(1)};e.exports=r,e.exports.default=r},477:function(e,t,n){"use strict";var u=n(0),r=n.n(u).a.createContext({isDarkTheme:!1,setLightTheme:function(){},setDarkTheme:function(){}});t.a=r},479:function(e,t,n){"use strict";(function(e){var u=n(1),r=(n(438),n(439),n(78),n(77),n(522),n(0)),a=n.n(r),d=n(523),o=n.n(d),i=n(555),c=n(53),l=n(415),f=n.n(l),s=n(535),p=n.n(s),m=n(524),h=n.n(m),b=n(428),v=n(433),g=n(148),y=n.n(g);(void 0!==e?e:window).Prism=c.a,n(525),n(526),n(527),n(528),n(90),n(529),n(530),n(531),n(532),n(533),n(534);var _=/{([\d,-]+)}/,E=/title=".*"/;t.a=function(e){var t=e.children,n=e.className,d=e.metastring,c=Object(b.a)().siteConfig.themeConfig.prism,l=void 0===c?{}:c,s=Object(r.useState)(!1),m=s[0],g=s[1],w=Object(r.useState)(!1),D=w[0],k=w[1];Object(r.useEffect)((function(){k(!0)}),[]);var x=Object(r.useRef)(null),S=Object(r.useRef)(null),C=[],O="",I=Object(v.a)().isDarkTheme,A=l.theme||p.a,j=l.darkTheme||A,N=I?j:A;if(d&&_.test(d)){var F=d.match(_)[1];C=h.a.parse(F).filter((function(e){return e>0}))}d&&E.test(d)&&(O=d.match(E)[0].split("title=")[1].replace(/"+/g,"")),Object(r.useEffect)((function(){var e;return S.current&&(e=new o.a(S.current,{target:function(){return x.current}})),function(){e&&e.destroy()}}),[S.current,x.current]);var T=n&&n.replace(/language-/,"");!T&&l.defaultLanguage&&(T=l.defaultLanguage);var P=function(){window.getSelection().empty(),g(!0),setTimeout((function(){return g(!1)}),2e3)};return a.a.createElement(i.a,Object(u.a)({},i.b,{key:D,theme:N,code:t.trim(),language:T}),(function(e){var t,n,r=e.className,d=e.style,o=e.tokens,i=e.getLineProps,c=e.getTokenProps;return a.a.createElement(a.a.Fragment,null,O&&a.a.createElement("div",{style:d,className:y.a.codeBlockTitle},O),a.a.createElement("div",{className:y.a.codeBlockContent},a.a.createElement("button",{ref:S,type:"button","aria-label":"Copy code to clipboard",className:f()(y.a.copyButton,(t={},t[y.a.copyButtonWithTitle]=O,t)),onClick:P},m?"Copied":"Copy"),a.a.createElement("pre",{className:f()(r,y.a.codeBlock,(n={},n[y.a.codeBlockWithTitle]=O,n))},a.a.createElement("div",{ref:x,className:y.a.codeBlockLines,style:d},o.map((function(e,t){1===e.length&&""===e[0].content&&(e[0].content="\n");var n=i({line:e,key:t});return C.includes(t+1)&&(n.className=n.className+" docusaurus-highlight-code-line"),a.a.createElement("div",Object(u.a)({key:t},n),e.map((function(e,t){return a.a.createElement("span",Object(u.a)({key:t},c({token:e,key:t})))})))}))))))}))}}).call(this,n(76))},480:function(e,t,n){"use strict";var u=n(0),r=n.n(u);n(416),n(144);t.a=function(e){var t=e.children,n=Object(u.useState)(!1),a=n[0],d=n[1];return a?r.a.createElement("div",{className:"code-explanation code-explanation--expanded"},t,r.a.createElement("div",{className:"code-explanation--toggle",onClick:function(){return d(!a)}},r.a.createElement("i",{className:"feather icon-arrow-up-circle"})," hide")):r.a.createElement("div",{className:"code-explanation code-explanation--collapsed"},r.a.createElement("div",{className:"code-explanation--toggle",onClick:function(){return d(!a)}},r.a.createElement("i",{className:"feather icon-info"})," explain this command"))}},481:function(e,t,n){"use strict";var u=n(30),r=n(12),a=n(27),d=n(91),o=n(92),i=n(26),c=n(537),l=n(93);r(r.S+r.F*!n(83)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,r,f,s=a(e),p="function"==typeof this?this:Array,m=arguments.length,h=m>1?arguments[1]:void 0,b=void 0!==h,v=0,g=l(s);if(b&&(h=u(h,m>2?arguments[2]:void 0,2)),null==g||p==Array&&o(g))for(n=new p(t=i(s.length));t>v;v++)c(n,v,b?h(s[v],v):s[v]);else for(f=g.call(s),n=new p;!(r=f.next()).done;v++)c(n,v,b?d(f,h,[r.value,v],!0):r.value);return n.length=v,n}})},482:function(e,t,n){"use strict";var u=n(538),r=n(484);e.exports=n(539)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return u.def(r(this,"Set"),e=0===e?0:e,e)}},u)},483:function(e,t,n){var u=n(40)("meta"),r=n(13),a=n(31),d=n(28).f,o=0,i=Object.isExtensible||function(){return!0},c=!n(14)((function(){return i(Object.preventExtensions({}))})),l=function(e){d(e,u,{value:{i:"O"+ ++o,w:{}}})},f=e.exports={KEY:u,NEED:!1,fastKey:function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,u)){if(!i(e))return"F";if(!t)return"E";l(e)}return e[u].i},getWeak:function(e,t){if(!a(e,u)){if(!i(e))return!0;if(!t)return!1;l(e)}return e[u].w},onFreeze:function(e){return c&&f.NEED&&i(e)&&!a(e,u)&&l(e),e}}},484:function(e,t,n){var u=n(13);e.exports=function(e,t){if(!u(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},485:function(e,t,n){"use strict";const u=n(486);e.exports=(e,t)=>{if("string"!=typeof e)throw new TypeError("Expected a string");t=void 0===t?"_":t;const n=u("([\\p{Ll}\\d])(\\p{Lu})","g"),r=u("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return e.replace(n,`$1${t}$2`).replace(r,`$1${t}$2`).toLowerCase()}},486:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=f(n(487)),r=f(n(488)),a=f(n(489)),d=f(n(490)),o=f(n(491)),i=f(n(492)),c=f(n(493)),l=f(n(494));function f(e){return e&&e.__esModule?e:{default:e}}(0,r.default)(u.default),(0,a.default)(u.default),(0,d.default)(u.default),(0,o.default)(u.default),(0,i.default)(u.default),(0,c.default)(u.default),(0,l.default)(u.default),t.default=u.default,e.exports=t.default},487:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u={astral:!1},r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},a={},d={},o={},i=[],c={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},l=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,f=void 0===r.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(e){var t=!0;try{new RegExp("",e)}catch(n){t=!1}return t}var h=m("u"),b=m("y"),v={g:!0,i:!0,m:!0,u:h,y:b};function g(e,t,n,u,r){var a=void 0;if(e.xregexp={captureNames:t},r)return e;if(e.__proto__)e.__proto__=j.prototype;else for(a in j.prototype)e[a]=j.prototype[a];return e.xregexp.source=n,e.xregexp.flags=u?u.split("").sort().join(""):u,e}function y(e){return r.replace.call(e,/([\s\S])(?=[\s\S]*\1)/g,"")}function _(e,t){if(!j.isRegExp(e))throw new TypeError("Type RegExp expected");var n=e.xregexp||{},u=function(e){return s?e.flags:r.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(e))[1]}(e),a="",d="",o=null,i=null;return(t=t||{}).removeG&&(d+="g"),t.removeY&&(d+="y"),d&&(u=r.replace.call(u,new RegExp("["+d+"]+","g"),"")),t.addG&&(a+="g"),t.addY&&(a+="y"),a&&(u=y(u+a)),t.isInternalOnly||(void 0!==n.source&&(o=n.source),null!=n.flags&&(i=a?y(n.flags+a):n.flags)),e=g(new RegExp(t.source||e.source,u),function(e){return!(!e.xregexp||!e.xregexp.captureNames)}(e)?n.captureNames.slice(0):null,o,i,t.isInternalOnly)}function E(e){return parseInt(e,16)}function w(e,t,n){return"("===e.input[e.index-1]||")"===e.input[e.index+e[0].length]||function(e,t,n){return r.test.call(-1!==n.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,e.slice(t))}(e.input,e.index+e[0].length,n)?"":"(?:)"}function D(e){return parseInt(e,10).toString(16)}function k(e,t){return p.call(e)==="[object "+t+"]"}function x(e){for(;e.length<4;)e="0"+e;return e}function S(e){var t={};return k(e,"String")?(j.forEach(e,/[^\s,]+/,(function(e){t[e]=!0})),t):e}function C(e){if(!/^[\w$]$/.test(e))throw new Error("Flag must be a single character A-Za-z0-9_$");v[e]=!0}function O(e,t,n,u,r){for(var a=i.length,d=e[n],o=null,c=void 0,l=void 0;a--;)if(!((l=i[a]).leadChar&&l.leadChar!==d||l.scope!==u&&"all"!==l.scope||l.flag&&-1===t.indexOf(l.flag))&&(c=j.exec(e,l.regex,n,"sticky"))){o={matchLength:c[0].length,output:l.handler.call(r,c,u,t),reparse:l.reparse};break}return o}function I(e){u.astral=e}function A(e){if(null==e)throw new TypeError("Cannot convert null or undefined to object");return e}function j(e,t){if(j.isRegExp(e)){if(void 0!==t)throw new TypeError("Cannot supply flags when copying a RegExp");return _(e)}if(e=void 0===e?"":String(e),t=void 0===t?"":String(t),j.isInstalled("astral")&&-1===t.indexOf("A")&&(t+="A"),o[e]||(o[e]={}),!o[e][t]){for(var n={hasNamedCapture:!1,captureNames:[]},u="default",a="",d=0,i=void 0,l=function(e,t){var n=void 0;if(y(t)!==t)throw new SyntaxError("Invalid duplicate regex flag "+t);for(e=r.replace.call(e,/^\(\?([\w$]+)\)/,(function(e,n){if(r.test.call(/[gy]/,n))throw new SyntaxError("Cannot use flag g or y in mode modifier "+e);return t=y(t+n),""})),n=0;n"}else if(n)return"\\"+(+n+d);return e}if(!k(e,"Array")||!e.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var c=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,l=[],f=void 0,s=0;s1&&-1!==n.indexOf("")){var u=_(this,{removeG:!0,isInternalOnly:!0});r.replace.call(String(e).slice(n.index),u,(function(){for(var e=arguments.length,t=Array(e),u=0;un.index&&(this.lastIndex=n.index)}return this.global||(this.lastIndex=t),n},a.test=function(e){return!!a.exec.call(this,e)},a.match=function(e){if(j.isRegExp(e)){if(e.global){var t=r.match.apply(this,arguments);return e.lastIndex=0,t}}else e=new RegExp(e);return a.exec.call(e,A(this))},a.replace=function(e,t){var n=j.isRegExp(e),u=void 0,a=void 0,d=void 0;return n?(e.xregexp&&(a=e.xregexp.captureNames),u=e.lastIndex):e+="",d=k(t,"Function")?r.replace.call(String(this),e,(function(){for(var u=arguments.length,r=Array(u),d=0;dn.length-3)throw new SyntaxError("Backreference to undefined group "+e);return n[r]||""}throw new SyntaxError("Invalid token "+e)}})),n&&(e.global?e.lastIndex=0:e.lastIndex=u),d},a.split=function(e,t){if(!j.isRegExp(e))return r.split.apply(this,arguments);var n=String(this),u=[],a=e.lastIndex,d=0,o=void 0;return t=(void 0===t?-1:t)>>>0,j.forEach(n,e,(function(e){e.index+e[0].length>d&&(u.push(n.slice(d,e.index)),e.length>1&&e.indext?u.slice(0,t):u},j.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(e,t){if("B"===e[1]&&"default"===t)return e[0];throw new SyntaxError("Invalid escape "+e[0])}),{scope:"all",leadChar:"\\"}),j.addToken(/\\u{([\dA-Fa-f]+)}/,(function(e,t,n){var u=E(e[1]);if(u>1114111)throw new SyntaxError("Invalid Unicode code point "+e[0]);if(u<=65535)return"\\u"+x(D(u));if(h&&-1!==n.indexOf("u"))return e[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),j.addToken(/\[(\^?)\]/,(function(e){return e[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),j.addToken(/\(\?#[^)]*\)/,w,{leadChar:"("}),j.addToken(/\s+|#[^\n]*\n?/,w,{flag:"x"}),j.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),j.addToken(/\\k<([\w$]+)>/,(function(e){var t=isNaN(e[1])?this.captureNames.indexOf(e[1])+1:+e[1],n=e.index+e[0].length;if(!t||t>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+e[0]);return"\\"+t+(n===e.input.length||isNaN(e.input[n])?"":"(?:)")}),{leadChar:"\\"}),j.addToken(/\\(\d+)/,(function(e,t){if(!("default"===t&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&"0"!==e[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+e[0]);return e[0]}),{scope:"all",leadChar:"\\"}),j.addToken(/\(\?P?<([\w$]+)>/,(function(e){if(!isNaN(e[1]))throw new SyntaxError("Cannot use integer as capture name "+e[0]);if("length"===e[1]||"__proto__"===e[1])throw new SyntaxError("Cannot use reserved word as capture name "+e[0]);if(-1!==this.captureNames.indexOf(e[1]))throw new SyntaxError("Cannot use same name for multiple groups "+e[0]);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),j.addToken(/\((?!\?)/,(function(e,t,n){return-1!==n.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),t.default=j,e.exports=t.default},488:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,n=e.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,t],"g",{conjunction:"or"});function u(e){var t=/^(?:\(\?:\))*\^/,n=/\$(?:\(\?:\))*$/;return t.test(e)&&n.test(e)&&n.test(e.replace(/\\[\s\S]/g,""))?e.replace(t,"").replace(n,""):e}function r(t,n){var u=n?"x":"";return e.isRegExp(t)?t.xregexp&&t.xregexp.captureNames?t:e(t.source,u):e(t,u)}function a(t){return t instanceof RegExp?t:e.escape(t)}function d(e,t,n){return e["subpattern"+n]=t,e}function o(e,t,n){return e+(t1?u-1:0),i=1;i"):i="(?:",h=m,""+i+l[d].pattern.replace(t,(function(e,t,n){if(t){if(o=l[d].names[m-h],++m,o)return"(?<"+o+">"}else if(n)return c=+n-1,l[d].names[c]?"\\k<"+l[d].names[c]+">":"\\"+(+n+h);return e}))+")"}if(r){if(o=g[b],v[++b]=++m,o)return"(?<"+o+">"}else if(a)return g[c=+a-1]?"\\k<"+g[c]+">":"\\"+v[+a];return e}));return e(y,o)}},e.exports=t.default},489:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(e,t,n,u){return{name:e,value:t,start:n,end:u}}e.matchRecursive=function(n,u,r,a,d){d=d||{};var o=-1!==(a=a||"").indexOf("g"),i=-1!==a.indexOf("y"),c=a.replace(/y/g,""),l=d.escapeChar,f=d.valueNames,s=[],p=0,m=0,h=0,b=0,v=void 0,g=void 0,y=void 0,_=void 0,E=void 0;if(u=e(u,c),r=e(r,c),l){if(l.length>1)throw new Error("Cannot use more than one escape character");l=e.escape(l),E=new RegExp("(?:"+l+"[\\S\\s]|(?:(?!"+e.union([u,r],"",{conjunction:"or"}).source+")[^"+l+"])+)+",a.replace(/[^imu]+/g,""))}for(;;){if(l&&(h+=(e.exec(n,E,h,"sticky")||[""])[0].length),y=e.exec(n,u,h),_=e.exec(n,r,h),y&&_&&(y.index<=_.index?_=null:y=null),y||_)h=(m=(y||_).index)+(y||_)[0].length;else if(!p)break;if(i&&!p&&m>b)break;if(y)p||(v=m,g=h),++p;else{if(!_||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(f?(f[0]&&v>b&&s.push(t(f[0],n.slice(b,v),b,v)),f[1]&&s.push(t(f[1],n.slice(v,g),v,g)),f[2]&&s.push(t(f[2],n.slice(g,m),g,m)),f[3]&&s.push(t(f[3],n.slice(m,h),m,h))):s.push(n.slice(g,m)),b=h,!o))break}m===h&&++h}return o&&!i&&f&&f[0]&&n.length>b&&s.push(t(f[0],n.slice(b),b,n.length)),s}},e.exports=t.default},490:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t={},n=e._dec,u=e._hex,r=e._pad4;function a(e){return e.replace(/[- _]+/g,"").toLowerCase()}function d(e){var t=/^\\[xu](.+)/.exec(e);return t?n(t[1]):e.charCodeAt("\\"===e[0]?1:0)}function o(n){var a,o,i;return t[n]["b!"]||(t[n]["b!"]=(a=t[n].bmp,o="",i=-1,e.forEach(a,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(e){var t=d(e[1]);t>i+1&&(o+="\\u"+r(u(i+1)),t>i+2&&(o+="-\\u"+r(u(t-1)))),i=d(e[2]||e[1])})),i<65535&&(o+="\\u"+r(u(i+1)),i<65534&&(o+="-\\uFFFF")),o))}function i(e,n){var u=n?"a!":"a=";return t[e][u]||(t[e][u]=function(e,n){var u=t[e],r="";return u.bmp&&!u.isBmpLast&&(r="["+u.bmp+"]"+(u.astral?"|":"")),u.astral&&(r+=u.astral),u.isBmpLast&&u.bmp&&(r+=(u.astral?"|":"")+"["+u.bmp+"]"),n?"(?:(?!"+r+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+r+")"}(e,n))}e.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(e,n,u){var r="P"===e[1]||!!e[2],d=-1!==u.indexOf("A"),c=a(e[4]||e[3]),l=t[c];if("P"===e[1]&&e[2])throw new SyntaxError("Invalid double negation "+e[0]);if(!t.hasOwnProperty(c))throw new SyntaxError("Unknown Unicode token "+e[0]);if(l.inverseOf){if(c=a(l.inverseOf),!t.hasOwnProperty(c))throw new ReferenceError("Unicode token missing data "+e[0]+" -> "+l.inverseOf);l=t[c],r=!r}if(!l.bmp&&!d)throw new SyntaxError("Astral mode required for Unicode token "+e[0]);if(d){if("class"===n)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return i(c,r)}return"class"===n?r?o(c):l.bmp:(r?"[^":"[")+l.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),e.addUnicodeData=function(n){for(var u=void 0,r=0;r\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},e.exports=t.default},493:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var t=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];t.push({name:"Assigned",inverseOf:"Cn"}),e.addUnicodeData(t)},e.exports=t.default},494:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");e.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},e.exports=t.default},495:function(e,t,n){"use strict";var u=n(0),r=n.n(u);t.a=function(e){var t=e.text;return r.a.createElement("section",{className:"empty"},r.a.createElement("div",{className:"icon"},r.a.createElement("img",{src:"/img/logo-square.svg",alt:"The Qovery Logo"})),r.a.createElement("div",{className:"text"},t))}},496:function(e,t,n){"use strict";var u=n(497),r=n(507),a=n(463);e.exports={formats:a,parse:r,stringify:u}},497:function(e,t,n){"use strict";var u=n(498),r=n(470),a=n(463),d=Object.prototype.hasOwnProperty,o={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},i=Array.isArray,c=String.prototype.split,l=Array.prototype.push,f=function(e,t){l.apply(e,i(t)?t:[t])},s=Date.prototype.toISOString,p=a.default,m={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,format:p,formatter:a.formatters[p],indices:!1,serializeDate:function(e){return s.call(e)},skipNulls:!1,strictNullHandling:!1},h={},b=function e(t,n,a,d,o,l,s,p,b,v,g,y,_,E,w,D){for(var k,x=t,S=D,C=0,O=!1;void 0!==(S=S.get(h))&&!O;){var I=S.get(t);if(C+=1,void 0!==I){if(I===C)throw new RangeError("Cyclic object value");O=!0}void 0===S.get(h)&&(C=0)}if("function"==typeof p?x=p(n,x):x instanceof Date?x=g(x):"comma"===a&&i(x)&&(x=r.maybeMap(x,(function(e){return e instanceof Date?g(e):e}))),null===x){if(o)return s&&!E?s(n,m.encoder,w,"key",y):n;x=""}if("string"==typeof(k=x)||"number"==typeof k||"boolean"==typeof k||"symbol"==typeof k||"bigint"==typeof k||r.isBuffer(x)){if(s){var A=E?n:s(n,m.encoder,w,"key",y);if("comma"===a&&E){for(var j=c.call(String(x),","),N="",F=0;F0?x.join(",")||null:void 0}];else if(i(p))T=p;else{var M=Object.keys(x);T=b?M.sort(b):M}for(var R=d&&i(x)&&1===x.length?n+"[]":n,L=0;L0?E+_:""}},498:function(e,t,n){"use strict";var u=n(461),r=n(503),a=n(505),d=u("%TypeError%"),o=u("%WeakMap%",!0),i=u("%Map%",!0),c=r("WeakMap.prototype.get",!0),l=r("WeakMap.prototype.set",!0),f=r("WeakMap.prototype.has",!0),s=r("Map.prototype.get",!0),p=r("Map.prototype.set",!0),m=r("Map.prototype.has",!0),h=function(e,t){for(var n,u=e;null!==(n=u.next);u=n)if(n.key===t)return u.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,u={assert:function(e){if(!u.has(e))throw new d("Side channel does not contain "+a(e))},get:function(u){if(o&&u&&("object"==typeof u||"function"==typeof u)){if(e)return c(e,u)}else if(i){if(t)return s(t,u)}else if(n)return function(e,t){var n=h(e,t);return n&&n.value}(n,u)},has:function(u){if(o&&u&&("object"==typeof u||"function"==typeof u)){if(e)return f(e,u)}else if(i){if(t)return m(t,u)}else if(n)return function(e,t){return!!h(e,t)}(n,u);return!1},set:function(u,r){o&&u&&("object"==typeof u||"function"==typeof u)?(e||(e=new o),l(e,u,r)):i?(t||(t=new i),p(t,u,r)):(n||(n={key:{},next:null}),function(e,t,n){var u=h(e,t);u?u.value=n:e.next={key:t,next:e.next,value:n}}(n,u,r))}};return u}},499:function(e,t,n){"use strict";var u="undefined"!=typeof Symbol&&Symbol,r=n(500);e.exports=function(){return"function"==typeof u&&("function"==typeof Symbol&&("symbol"==typeof u("foo")&&("symbol"==typeof Symbol("bar")&&r())))}},500:function(e,t,n){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var u=Object.getOwnPropertySymbols(e);if(1!==u.length||u[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},501:function(e,t,n){"use strict";var u="Function.prototype.bind called on incompatible ",r=Array.prototype.slice,a=Object.prototype.toString;e.exports=function(e){var t=this;if("function"!=typeof t||"[object Function]"!==a.call(t))throw new TypeError(u+t);for(var n,d=r.call(arguments,1),o=function(){if(this instanceof n){var u=t.apply(this,d.concat(r.call(arguments)));return Object(u)===u?u:this}return t.apply(e,d.concat(r.call(arguments)))},i=Math.max(0,t.length-d.length),c=[],l=0;l-1?r(n):n}},504:function(e,t,n){"use strict";var u=n(462),r=n(461),a=r("%Function.prototype.apply%"),d=r("%Function.prototype.call%"),o=r("%Reflect.apply%",!0)||u.call(d,a),i=r("%Object.getOwnPropertyDescriptor%",!0),c=r("%Object.defineProperty%",!0),l=r("%Math.max%");if(c)try{c({},"a",{value:1})}catch(s){c=null}e.exports=function(e){var t=o(u,d,arguments);if(i&&c){var n=i(t,"length");n.configurable&&c(t,"length",{value:1+l(0,e.length-(arguments.length-1))})}return t};var f=function(){return o(u,a,arguments)};c?c(e.exports,"apply",{value:f}):e.exports.apply=f},505:function(e,t,n){var u="function"==typeof Map&&Map.prototype,r=Object.getOwnPropertyDescriptor&&u?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=u&&r&&"function"==typeof r.get?r.get:null,d=u&&Map.prototype.forEach,o="function"==typeof Set&&Set.prototype,i=Object.getOwnPropertyDescriptor&&o?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=o&&i&&"function"==typeof i.get?i.get:null,l=o&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,s="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,m=Boolean.prototype.valueOf,h=Object.prototype.toString,b=Function.prototype.toString,v=String.prototype.match,g=String.prototype.slice,y=String.prototype.replace,_=String.prototype.toUpperCase,E=String.prototype.toLowerCase,w=RegExp.prototype.test,D=Array.prototype.concat,k=Array.prototype.join,x=Array.prototype.slice,S=Math.floor,C="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,A="function"==typeof Symbol&&"object"==typeof Symbol.iterator,j="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===A||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,F=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function T(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||w.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var u=e<0?-S(-e):S(e);if(u!==e){var r=String(u),a=g.call(t,r.length+1);return y.call(r,n,"$&_")+"."+y.call(y.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return y.call(t,n,"$&_")}var P=n(506),M=P.custom,R=W(M)?M:null;function L(e,t,n){var u="double"===(n.quoteStyle||t)?'"':"'";return u+e+u}function B(e){return y.call(String(e),/"/g,""")}function z(e){return!("[object Array]"!==q(e)||j&&"object"==typeof e&&j in e)}function U(e){return!("[object RegExp]"!==q(e)||j&&"object"==typeof e&&j in e)}function W(e){if(A)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!I)return!1;try{return I.call(e),!0}catch(t){}return!1}e.exports=function e(t,n,u,r){var o=n||{};if($(o,"quoteStyle")&&"single"!==o.quoteStyle&&"double"!==o.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if($(o,"maxStringLength")&&("number"==typeof o.maxStringLength?o.maxStringLength<0&&o.maxStringLength!==1/0:null!==o.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var i=!$(o,"customInspect")||o.customInspect;if("boolean"!=typeof i&&"symbol"!==i)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if($(o,"indent")&&null!==o.indent&&"\t"!==o.indent&&!(parseInt(o.indent,10)===o.indent&&o.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if($(o,"numericSeparator")&&"boolean"!=typeof o.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=o.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return function e(t,n){if(t.length>n.maxStringLength){var u=t.length-n.maxStringLength,r="... "+u+" more character"+(u>1?"s":"");return e(g.call(t,0,n.maxStringLength),n)+r}return L(y.call(y.call(t,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,V),"single",n)}(t,o);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var _=String(t);return h?T(t,_):_}if("bigint"==typeof t){var w=String(t)+"n";return h?T(t,w):w}var S=void 0===o.depth?5:o.depth;if(void 0===u&&(u=0),u>=S&&S>0&&"object"==typeof t)return z(t)?"[Array]":"[Object]";var O=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=k.call(Array(e.indent+1)," ")}return{base:n,prev:k.call(Array(t+1),n)}}(o,u);if(void 0===r)r=[];else if(G(r,t)>=0)return"[Circular]";function M(t,n,a){if(n&&(r=x.call(r)).push(n),a){var d={depth:o.depth};return $(o,"quoteStyle")&&(d.quoteStyle=o.quoteStyle),e(t,d,u+1,r)}return e(t,o,u+1,r)}if("function"==typeof t&&!U(t)){var H=function(e){if(e.name)return e.name;var t=v.call(b.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),X=Q(t,M);return"[Function"+(H?": "+H:" (anonymous)")+"]"+(X.length>0?" { "+k.call(X,", ")+" }":"")}if(W(t)){var ee=A?y.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):I.call(t);return"object"!=typeof t||A?ee:K(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var te="<"+E.call(String(t.nodeName)),ne=t.attributes||[],ue=0;ue"}if(z(t)){if(0===t.length)return"[]";var re=Q(t,M);return O&&!function(e){for(var t=0;t=0)return!1;return!0}(re)?"["+Y(re,O)+"]":"[ "+k.call(re,", ")+" ]"}if(function(e){return!("[object Error]"!==q(e)||j&&"object"==typeof e&&j in e)}(t)){var ae=Q(t,M);return"cause"in Error.prototype||!("cause"in t)||N.call(t,"cause")?0===ae.length?"["+String(t)+"]":"{ ["+String(t)+"] "+k.call(ae,", ")+" }":"{ ["+String(t)+"] "+k.call(D.call("[cause]: "+M(t.cause),ae),", ")+" }"}if("object"==typeof t&&i){if(R&&"function"==typeof t[R]&&P)return P(t,{depth:S-u});if("symbol"!==i&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{c.call(e)}catch(te){return!0}return e instanceof Map}catch(t){}return!1}(t)){var de=[];return d.call(t,(function(e,n){de.push(M(n,t,!0)+" => "+M(e,t))})),J("Map",a.call(t),de,O)}if(function(e){if(!c||!e||"object"!=typeof e)return!1;try{c.call(e);try{a.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var oe=[];return l.call(t,(function(e){oe.push(M(e,t))})),J("Set",c.call(t),oe,O)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{s.call(e,s)}catch(te){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return Z("WeakMap");if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e,s);try{f.call(e,f)}catch(te){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return Z("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(t){}return!1}(t))return Z("WeakRef");if(function(e){return!("[object Number]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(M(Number(t)));if(function(e){if(!e||"object"!=typeof e||!C)return!1;try{return C.call(e),!0}catch(t){}return!1}(t))return K(M(C.call(t)));if(function(e){return!("[object Boolean]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(m.call(t));if(function(e){return!("[object String]"!==q(e)||j&&"object"==typeof e&&j in e)}(t))return K(M(String(t)));if(!function(e){return!("[object Date]"!==q(e)||j&&"object"==typeof e&&j in e)}(t)&&!U(t)){var ie=Q(t,M),ce=F?F(t)===Object.prototype:t instanceof Object||t.constructor===Object,le=t instanceof Object?"":"null prototype",fe=!ce&&j&&Object(t)===t&&j in t?g.call(q(t),8,-1):le?"Object":"",se=(ce||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(fe||le?"["+k.call(D.call([],fe||[],le||[]),": ")+"] ":"");return 0===ie.length?se+"{}":O?se+"{"+Y(ie,O)+"}":se+"{ "+k.call(ie,", ")+" }"}return String(t)};var H=Object.prototype.hasOwnProperty||function(e){return e in this};function $(e,t){return H.call(e,t)}function q(e){return h.call(e)}function G(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,u=e.length;n-1?e.split(","):e},c=function(e,t,n,u){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,d=/(\[[^[\]]*])/g,o=n.depth>0&&/(\[[^[\]]*])/.exec(a),c=o?a.slice(0,o.index):a,l=[];if(c){if(!n.plainObjects&&r.call(Object.prototype,c)&&!n.allowPrototypes)return;l.push(c)}for(var f=0;n.depth>0&&null!==(o=d.exec(a))&&f=0;--a){var d,o=e[a];if("[]"===o&&n.parseArrays)d=[].concat(r);else{d=n.plainObjects?Object.create(null):{};var c="["===o.charAt(0)&&"]"===o.charAt(o.length-1)?o.slice(1,-1):o,l=parseInt(c,10);n.parseArrays||""!==c?!isNaN(l)&&o!==c&&String(l)===c&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(d=[])[l]=r:"__proto__"!==c&&(d[c]=r):d={0:r}}r=d}return r}(l,t,n,u)}};e.exports=function(e,t){var n=function(e){if(!e)return d;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?d.charset:e.charset;return{allowDots:void 0===e.allowDots?d.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:d.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:d.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:d.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:d.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:d.comma,decoder:"function"==typeof e.decoder?e.decoder:d.decoder,delimiter:"string"==typeof e.delimiter||u.isRegExp(e.delimiter)?e.delimiter:d.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:d.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:d.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:d.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:d.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:d.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof e?function(e,t){var n,c={},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,f=t.parameterLimit===1/0?void 0:t.parameterLimit,s=l.split(t.delimiter,f),p=-1,m=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(b=a(b)?[b]:b),r.call(c,h)?c[h]=u.combine(c[h],b):c[h]=b}return c}(e,n):e,f=n.plainObjects?Object.create(null):{},s=Object.keys(l),p=0;p'},heart:{width:12,height:16,path:''},eye:{width:16,height:16,path:''},star:{width:14,height:16,path:''},"repo-forked":{width:10,height:16,path:''},"repo-template":{width:14,height:16,path:''},"issue-opened":{width:14,height:16,path:''},"cloud-download":{width:16,height:16,path:''}},g={},y=function(e,t){var n=g[e]||(g[e]=[]);if(!(n.push(t)>1)){var u=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete g[e];t=n.shift();)t.apply(null,arguments)}));if(l){var r=new d;s(r,"abort",u),s(r,"error",u),s(r,"load",(function(){var e;try{e=JSON.parse(r.responseText)}catch(t){return void u(t)}u(200!==r.status,e)})),r.open("GET",e),r.send()}else{var a=this||window;a._=function(e){a._=null,u(200!==e.meta.status,e.data)};var i=o(a.document)("script",{async:!0,src:e+(/\?/.test(e)?"&":"?")+"callback=_"}),c=function(){a._&&a._({meta:{}})};s(i,"load",c),s(i,"error",c),i.readyState&&function(e,t,n){var u=function(r){if(t.test(e.readyState))return p(e,"readystatechange",u),n(r)};s(e,"readystatechange",u)}(i,/de|m/,c),a.document.getElementsByTagName("head")[0].appendChild(i)}}},E=function(e,t,n){var u=o(e.ownerDocument),r=e.appendChild(u("style",{type:"text/css"})),a="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+b(t["data-color-scheme"]);r.styleSheet?r.styleSheet.cssText=a:r.appendChild(e.ownerDocument.createTextNode(a));var d,i,l=u("a",{className:"btn",href:t.href,target:"_blank",rel:"noopener",innerHTML:(d=t["data-icon"],i=/^large$/i.test(t["data-size"])?16:14,d=(""+d).toLowerCase().replace(/^octicon-/,""),c(v,d)||(d="mark-github"),'"),"aria-label":t["aria-label"]||void 0},[" ",u("span",{},[t["data-text"]||""])]),f=e.appendChild(u("div",{className:"widget"+(/^large$/i.test(t["data-size"])?" widget-lg":"")},[l])),s=l.hostname.split(".").reverse();if(""===s[0]&&s.shift(),"com"!==s[0]||"github"!==s[1])return l.href="#",l.target="_self",void n(f);var p=s.length,m=(" /"+l.pathname).split(/\/+/);if(((2===p||3===p&&"gist"===s[2])&&"archive"===m[3]||2===p&&"releases"===m[3]&&"download"===m[4]||3===p&&"codeload"===s[2])&&(l.target="_top"),/^true$/i.test(t["data-show-count"])&&2===p){var h,g;if(!m[2]&&m[1])h=g="followers";else if(!m[3]&&m[2])g="stargazers_count",h="stargazers";else if(m[4]||"subscription"!==m[3])if(m[4]||"fork"!==m[3]){if("issues"!==m[3])return void n(f);g="open_issues_count",h="issues"}else g="forks_count",h="network/members";else g="subscribers_count",h="watchers";var _=m[2]?"/repos/"+m[1]+"/"+m[2]:"/users/"+m[1];y.call(this,"https://api.github.com"+_,(function(e,t){if(!e){var r=t[g];f.appendChild(u("a",{className:"social-count",href:t.html_url+"/"+h,target:"_blank",rel:"noopener","aria-label":r+" "+g.replace(/_count$/,"").replace("_"," ").slice(0,r<2?-1:void 0)+" on GitHub"},[(""+r).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}n(f)}))}else n(f)},w=window.devicePixelRatio||1,D=function(e){return(w>1?r.ceil(r.round(e*w)/w*2)/2:r.ceil(e))||0},k=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},x=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},n=["icon","color-scheme","text","size","show-count"],u=0,r=n.length;u0){var n=t[0];return{x:n.clientX,y:n.clientY}}var u=e.pageX;if(void 0!==u)return{x:u,y:e.pageY}}return{x:0,y:0}}},519:function(e,t,n){"use strict";var u=n(0),r=n.n(u),a=n(422),d=n(415),o=n.n(d);n(147);t.a=function(e){var t=e.className,n=e.previous,u=e.next;return r.a.createElement("nav",{className:o()("pagination-nav",t)},r.a.createElement("div",{className:"pagination-nav__item"},n&&r.a.createElement(a.a,{className:"pagination-nav__link",to:n.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Previous"),r.a.createElement("h4",{className:"pagination-nav__link--label"},"\xab ",n.title))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},u&&r.a.createElement(a.a,{className:"pagination-nav__link",to:u.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Next"),r.a.createElement("h4",{className:"pagination-nav__link--label"},u.title," \xbb"))))}},520:function(e,t,n){"use strict";var u=n(0);t.a=function(e,t,n){var r=Object(u.useState)(void 0),a=r[0],d=r[1];Object(u.useEffect)((function(){var u=[],r=[];function o(){var o=function(){var e=0,t=null;for(u=document.getElementsByClassName("anchor");e=0&&a<=n&&(t=r),e+=1}return t}();if(o){var i=0,c=!1;for(r=document.getElementsByClassName(e);i0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=r()(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=r()(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":a(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}(),i=n(1),c=n.n(i),l=n(2),f=n.n(l),s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===s(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=f()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return h("action",e)}},{key:"defaultTarget",value:function(e){var t=h("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return h("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}]),t}(c.a);function h(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}t.default=m}]).default},e.exports=u()},524:function(e,t){e.exports.parse=function(e){var t=e.split(",").map((function(e){return function(e){if(/^-?\d+$/.test(e))return parseInt(e,10);var t;if(t=e.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){var n=t[1],u=t[2],r=t[3];if(n&&r){var a=[],d=(n=parseInt(n))<(r=parseInt(r))?1:-1;"-"!=u&&".."!=u&&"\u2025"!=u||(r+=d);for(var o=n;o!=r;o+=d)a.push(o);return a}}return[]}(e)}));return 0===t.length?[]:1===t.length?Array.isArray(t[0])?t[0]:t:t.reduce((function(e,t){return Array.isArray(e)||(e=[e]),Array.isArray(t)||(t=[t]),e.concat(t)}))}},525:function(e,t){!function(e){function t(e){return RegExp("(^(?:"+e+"):[ \t]*(?![ \t]))[^]+","i")}e.languages.http={"request-line":{pattern:/^(?:CONNECT|DELETE|GET|HEAD|OPTIONS|PATCH|POST|PRI|PUT|SEARCH|TRACE)\s(?:https?:\/\/|\/)\S*\sHTTP\/[\d.]+/m,inside:{method:{pattern:/^[A-Z]+\b/,alias:"property"},"request-target":{pattern:/^(\s)(?:https?:\/\/|\/)\S*(?=\s)/,lookbehind:!0,alias:"url",inside:e.languages.uri},"http-version":{pattern:/^(\s)HTTP\/[\d.]+/,lookbehind:!0,alias:"property"}}},"response-status":{pattern:/^HTTP\/[\d.]+ \d+ .+/m,inside:{"http-version":{pattern:/^HTTP\/[\d.]+/,alias:"property"},"status-code":{pattern:/^(\s)\d+(?=\s)/,lookbehind:!0,alias:"number"},"reason-phrase":{pattern:/^(\s).+/,lookbehind:!0,alias:"string"}}},header:{pattern:/^[\w-]+:.+(?:(?:\r\n?|\n)[ \t].+)*/m,inside:{"header-value":[{pattern:t(/Content-Security-Policy/.source),lookbehind:!0,alias:["csp","languages-csp"],inside:e.languages.csp},{pattern:t(/Public-Key-Pins(?:-Report-Only)?/.source),lookbehind:!0,alias:["hpkp","languages-hpkp"],inside:e.languages.hpkp},{pattern:t(/Strict-Transport-Security/.source),lookbehind:!0,alias:["hsts","languages-hsts"],inside:e.languages.hsts},{pattern:t(/[^:]+/.source),lookbehind:!0}],"header-name":{pattern:/^[^:]+/,alias:"keyword"},punctuation:/^:/}}};var n,u=e.languages,r={"application/javascript":u.javascript,"application/json":u.json||u.javascript,"application/xml":u.xml,"text/xml":u.xml,"text/html":u.html,"text/css":u.css,"text/plain":u.plain},a={"application/json":!0,"application/xml":!0};function d(e){var t=e.replace(/^[a-z]+\//,"");return"(?:"+e+"|"+("\\w+/(?:[\\w.-]+\\+)+"+t+"(?![+\\w.-])")+")"}for(var o in r)if(r[o]){n=n||{};var i=a[o]?d(o):o;n[o.replace(/\//g,"-")]={pattern:RegExp("("+/content-type:\s*/.source+i+/(?:(?:\r\n?|\n)[\w-].*)*(?:\r(?:\n|(?!\n))|\n)/.source+")"+/[^ \t\w-][\s\S]*/.source,"i"),lookbehind:!0,inside:r[o]}}n&&e.languages.insertBefore("http","header",n)}(Prism)},526:function(e,t){Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[^z]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+(?:\.[a-f\d]*)?(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|(?:\.\d*)?(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},527:function(e,t){!function(e){var t=e.languages.powershell={comment:[{pattern:/(^|[^`])<#[\s\S]*?#>/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:null},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:false|true)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(^|\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/};t.string[0].inside={function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:t},boolean:t.boolean,variable:t.variable}}(Prism)},528:function(e,t){!function(e){var t=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:t}},builtin:t,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism)},529:function(e,t){!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},530:function(e,t){!function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(Prism)},531:function(e,t){!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(^|[^\w.])(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,u={pattern:RegExp(n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[u,{pattern:RegExp(n+/[A-Z]\w*(?=\s+\w+\s*[;,=()])/.source),lookbehind:!0,inside:u.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":u,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},532:function(e,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},533:function(e,t){!function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],u=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,r=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|new|or|parent|print|private|protected|public|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s+)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:u,operator:r,punctuation:a};var d={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:d}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:d}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:u,operator:r,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(Prism)},534:function(e,t){!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,u="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function d(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return u})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return u}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return u})).replace(/<>/g,(function(){return"(?:"+r+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:d(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:d(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:d(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:d(a),lookbehind:!0,greedy:!0},number:{pattern:d(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism)},535:function(e,t){e.exports={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]}},536:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=void 0;var u,r=n(557);var a=((u=r)&&u.__esModule?u:{default:u}).default,d=a.canUseDOM?window.HTMLElement:{};t.canUseDOM=a.canUseDOM;t.default=d},537:function(e,t,n){"use strict";var u=n(28),r=n(57);e.exports=function(e,t,n){t in e?u.f(e,t,r(0,n)):e[t]=n}},538:function(e,t,n){"use strict";var u=n(28).f,r=n(89),a=n(82),d=n(30),o=n(80),i=n(81),c=n(61),l=n(88),f=n(94),s=n(10),p=n(483).fastKey,m=n(484),h=s?"_s":"size",b=function(e,t){var n,u=p(t);if("F"!==u)return e._i[u];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,c){var l=e((function(e,u){o(e,l,t,"_i"),e._t=t,e._i=r(null),e._f=void 0,e._l=void 0,e[h]=0,null!=u&&i(u,n,e[c],e)}));return a(l.prototype,{clear:function(){for(var e=m(this,t),n=e._i,u=e._f;u;u=u.n)u.r=!0,u.p&&(u.p=u.p.n=void 0),delete n[u.i];e._f=e._l=void 0,e[h]=0},delete:function(e){var n=m(this,t),u=b(n,e);if(u){var r=u.n,a=u.p;delete n._i[u.i],u.r=!0,a&&(a.n=r),r&&(r.p=a),n._f==u&&(n._f=r),n._l==u&&(n._l=a),n[h]--}return!!u},forEach:function(e){m(this,t);for(var n,u=d(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(u(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!b(m(this,t),e)}}),s&&u(l.prototype,"size",{get:function(){return m(this,t)[h]}}),l},def:function(e,t,n){var u,r,a=b(e,t);return a?a.v=n:(e._l=a={i:r=p(t,!0),k:t,v:n,p:u=e._l,n:void 0,r:!1},e._f||(e._f=a),u&&(u.n=a),e[h]++,"F"!==r&&(e._i[r]=a)),e},getEntry:b,setStrong:function(e,t,n){c(e,t,(function(e,n){this._t=m(e,t),this._k=n,this._l=void 0}),(function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))}),n?"entries":"values",!n,!0),f(t)}}},539:function(e,t,n){"use strict";var u=n(5),r=n(12),a=n(16),d=n(82),o=n(483),i=n(81),c=n(80),l=n(13),f=n(14),s=n(83),p=n(41),m=n(540);e.exports=function(e,t,n,h,b,v){var g=u[e],y=g,_=b?"set":"add",E=y&&y.prototype,w={},D=function(e){var t=E[e];a(E,e,"delete"==e||"has"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return v&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof y&&(v||E.forEach&&!f((function(){(new y).entries().next()})))){var k=new y,x=k[_](v?{}:-0,1)!=k,S=f((function(){k.has(1)})),C=s((function(e){new y(e)})),O=!v&&f((function(){for(var e=new y,t=5;t--;)e[_](t,t);return!e.has(-0)}));C||((y=t((function(t,n){c(t,y,e);var u=m(new g,t,y);return null!=n&&i(n,b,u[_],u),u}))).prototype=E,E.constructor=y),(S||O)&&(D("delete"),D("has"),b&&D("get")),(O||x)&&D(_),v&&E.clear&&delete E.clear}else y=h.getConstructor(t,e,b,_),d(y.prototype,n),o.NEED=!0;return p(y,e),w[e]=y,r(r.G+r.W+r.F*(y!=g),w),v||h.setStrong(y,e,b),y}},540:function(e,t,n){var u=n(13),r=n(541).set;e.exports=function(e,t,n){var a,d=t.constructor;return d!==n&&"function"==typeof d&&(a=d.prototype)!==n.prototype&&u(a)&&r&&r(e,a),e}},541:function(e,t,n){var u=n(13),r=n(8),a=function(e,t){if(r(e),!u(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,u){try{(u=n(30)(Function.call,n(542).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(r){t=!0}return function(e,n){return a(e,n),t?e.__proto__=n:u(e,n),e}}({},!1):void 0),check:a}},542:function(e,t,n){var u=n(62),r=n(57),a=n(33),d=n(87),o=n(31),i=n(86),c=Object.getOwnPropertyDescriptor;t.f=n(10)?c:function(e,t){if(e=a(e),t=d(t,!0),i)try{return c(e,t)}catch(n){}if(o(e,t))return r(!u.f.call(e,t),e[t])}},543:function(e,t,n){"use strict";var u=n(12),r=n(32),a=n(27),d=n(14),o=[].sort,i=[1,2,3];u(u.P+u.F*(d((function(){i.sort(void 0)}))||!d((function(){i.sort(null)}))||!n(544)(o)),"Array",{sort:function(e){return void 0===e?o.call(a(this)):o.call(a(this),r(e))}})},544:function(e,t,n){"use strict";var u=n(14);e.exports=function(e,t){return!!e&&u((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},553:function(e,t,n){"use strict";n(481),n(79),n(482),n(543),n(29),n(22),n(21),n(85),n(434);var u=n(1),r=(n(438),n(439),n(77),n(420),n(0)),a=n.n(r),d=n(473),o=n.n(d);n(150);var i=function(e){var t=e.humanize,n=e.icon,u=e.values,r=e.currentState,d=e.setState;if(0==u.size)return null;var i=Array.from(u);return a.a.createElement(a.a.Fragment,null,i.map((function(e,u){var i="string"==typeof e&&t?o()(e):e;return a.a.createElement("label",{key:u},a.a.createElement("input",{type:"checkbox",onChange:function(t){var n=new Set(r);t.currentTarget.checked?n.add(e):n.delete(e),d(n)},checked:r.has(e)}),i&&a.a.createElement(a.a.Fragment,null,n?a.a.createElement("i",{className:"feather icon-"+n}):""," ",i))})))},c=n(495),l=n(424),f=n(422),s=(n(432),n(443)),p=n.n(s),m=n(415),h=n.n(m),b=n(496),v=n.n(b),g=n(428);n(151);function y(e){var t=e.delivery_guarantee,n=e.description,u=e.event_types,r=e.function_category,d=(e.logo_path,e.name),o=e.pathTemplate,i=e.status,c=e.title,l=e.type,s=o;s||("source"==l&&(s="/docs/reference/sources//"),"transform"==l&&(s="/docs/reference/transforms//"),"sink"==l&&(s="/docs/reference/sinks//"));var p=s.replace("",d);return a.a.createElement(f.a,{to:p,className:"qovery-component",title:n},a.a.createElement("div",{className:"qovery-component--header"},a.a.createElement("div",{className:"qovery-component--name"},c)),a.a.createElement("div",{className:"qovery-component--badges"},"beta"==i?a.a.createElement("span",{className:"badge badge--warning",title:"This component is in beta and is not recommended for production environments"},a.a.createElement("i",{className:"feather icon-alert-triangle"})):a.a.createElement("span",{className:"badge badge--primary",title:"This component has passed reliability standards that make it production ready"},a.a.createElement("i",{className:"feather icon-award"})),"best_effort"==t?a.a.createElement("span",{className:"badge badge--warning",title:"This component makes a best-effort delivery guarantee, and in rare cases can lose data"},a.a.createElement("i",{className:"feather icon-shield-off"})):a.a.createElement("span",{className:"badge badge--primary",title:"This component offers an at-least-once delivery guarantee"},a.a.createElement("i",{className:"feather icon-shield"})),u.includes("log")?a.a.createElement("span",{className:"badge badge--primary",title:"This component works with log event types"},"log"):"",u.includes("metric")?a.a.createElement("span",{className:"badge badge--primary",title:"This component works with metric event types"},"metric"):"",a.a.createElement("span",{className:"badge badge--primary"},r)))}function _(e){var t=e.components,n=e.headingLevel,r=e.pathTemplate,d=e.titles,o=t.filter((function(e){return"source"==e.type})),i=t.filter((function(e){return"transform"==e.type})),f=t.filter((function(e){return"sink"==e.type})),s="h"+(n||3);return t.length>0?a.a.createElement(a.a.Fragment,null,o.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,o.length," Sources"),a.a.createElement("div",{className:"qovery-components--grid"},o.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",i.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,i.length," Transforms"),a.a.createElement("div",{className:"qovery-components--grid"},i.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",f.length>0?a.a.createElement(a.a.Fragment,null,d&&a.a.createElement(s,null,f.length," Sinks"),a.a.createElement("div",{className:"qovery-components--grid"},f.map((function(e,t){return a.a.createElement(y,Object(u.a)({key:t,pathTemplate:r},e))})))):"",a.a.createElement("hr",null),a.a.createElement(l.a,{to:"https://github.com/qovery/documentation/issues/new?labels=type%3A+new+feature",target:"_blank",rightIcon:"plus-circle"},"Request a new component")):a.a.createElement(c.a,{text:"no components found"})}t.a=function(e){var t=Object(g.a)().siteConfig.customFields.metadata,n=t.sources,u=t.transforms,d=t.sinks,o=e.titles||null==e.titles,c=1==e.filterColumn,l=e.pathTemplate,s=e.location?v.a.parse(e.location.search,{ignoreQueryPrefix:!0}):{},m=[];(e.sources||null==e.sources)&&(m=m.concat(Object.values(n))),(e.transforms||null==e.transforms)&&(m=m.concat(Object.values(u))),(e.sinks||null==e.sinks)&&(m=m.concat(Object.values(d))),m=m.sort((function(e,t){return e.name>t.name?1:-1}));var b=Object(r.useState)("true"==s["at-least-once"]),y=b[0],E=b[1],w=Object(r.useState)(new Set(s["event-types"]||e.eventTypes)),D=w[0],k=w[1],x=Object(r.useState)(new Set(s.functions)),S=x[0],C=x[1],O=Object(r.useState)(new Set(s["operating-systems"])),I=O[0],A=O[1],j=Object(r.useState)("true"==s["prod-ready"]),N=j[0],F=j[1],T=Object(r.useState)(new Set(s.providers)),P=T[0],M=T[1],R=Object(r.useState)(s.search),L=R[0],B=R[1];L&&(m=m.filter((function(e){return(e.name.toLowerCase()+" "+e.type.toLowerCase()).includes(L.toLowerCase())}))),y&&(m=m.filter((function(e){return"at_least_once"==e.delivery_guarantee}))),D.size>0&&(m=m.filter((function(e){return Array.from(D).some((function(t){return e.event_types.includes(t)}))}))),S.size>0&&(m=m.filter((function(e){return S.has(e.function_category)}))),I.size>0&&(m=m.filter((function(e){return Array.from(I).every((function(t){return e.operating_systems.includes(t)}))}))),N&&(m=m.filter((function(e){return"prod-ready"==e.status}))),P.size>0&&(m=m.filter((function(e){return Array.from(P).every((function(t){return e.service_providers&&e.service_providers.includes(t)}))}))),e.exceptNames&&e.exceptNames.length>0&&(m=m.filter((function(t){return!e.exceptNames.includes(t.name)}))),e.exceptFunctions&&e.exceptFunctions.length>0&&(m=m.filter((function(t){return!e.exceptFunctions.includes(t.function_category)})));var z=D.size>0?D:new Set(p()(m).map((function(e){return e.event_types})).flatten().uniq().compact().sort().value()),U=new Set(p()(m).map((function(e){return e.operating_systems})).flatten().uniq().compact().sort().value()),W=new Set(p()(m).map((function(e){return e.service_providers})).flatten().uniq().compact().sort().value()),H=new Set(p()(m).filter((function(e){return"source"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),$=new Set(p()(m).filter((function(e){return"transform"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),q=new Set(p()(m).filter((function(e){return"sink"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value());return a.a.createElement("div",{className:h()("qovery-components",{"qovery-components--cols":c})},a.a.createElement("div",{className:"filters"},a.a.createElement("div",{className:"search"},a.a.createElement("input",{className:"input--text input--lg",type:"text",onChange:function(e){return B(e.currentTarget.value)},placeholder:"\ud83d\udd0d Search..."})),a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/getting-started/data-model/",title:"Learn more about Qovery's event types"},"Event types ",a.a.createElement("i",{className:"feather icon-info"}))),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Event Types",icon:"database",values:z,humanize:!0,currentState:D,setState:k}))),a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/getting-started/whats-next/",title:"Learn more about Qovery's guarantees"},"Guarantees ",a.a.createElement("i",{className:"feather icon-info"}))),a.a.createElement("div",{className:"filter--choices"},a.a.createElement("label",{title:"Show only components that offer an at-least-once delivery guarantee."},a.a.createElement("input",{type:"checkbox",onChange:function(e){return E(e.currentTarget.checked)},checked:y}),a.a.createElement("i",{className:"feather icon-shield"})," At-least-once"),a.a.createElement("label",{title:"Show only production ready components."},a.a.createElement("input",{type:"checkbox",onChange:function(e){return F(e.currentTarget.checked)},checked:N}),a.a.createElement("i",{className:"feather icon-award"})," Prod-ready"))),H.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Source Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:H,humanize:!0,currentState:S,setState:C}))),$.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Transform Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:$,humanize:!0,currentState:S,setState:C}))),q.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Sink Functions"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Functions",icon:"settings",values:q,humanize:!0,currentState:S,setState:C}))),W.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},"Providers"),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Providers",icon:"cloud",values:W,currentState:P,setState:M}))),U.size>0&&a.a.createElement("div",{className:"filter"},a.a.createElement("div",{className:"filter--label"},a.a.createElement(f.a,{to:"/docs/setup/installation/operating-systems/",title:"Learn more about Qovery's operating systems"},"Operating Systems")),a.a.createElement("div",{className:"filter--choices"},a.a.createElement(i,{label:"Operating Systems",icon:"cpu",values:U,currentState:I,setState:A})))),a.a.createElement("div",{className:"qovery-components--results"},a.a.createElement(_,{components:m,headingLevel:e.headingLevel,pathTemplate:l,titles:o})))}},555:function(e,t,n){"use strict";n.d(t,"b",(function(){return d}));var u=n(53),r={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","at-rule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},a=n(0),d={Prism:u.a,theme:r};function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return(i=Object.assign||function(e){for(var t=1;t0&&e[n-1]===t?e:e.concat(t)},s=function(e,t){var n=e.plain,u=Object.create(null),r=e.styles.reduce((function(e,n){var u=n.languages,r=n.style;return u&&!u.includes(t)||n.types.forEach((function(t){var n=i({},e[t],r);e[t]=n})),e}),u);return r.root=n,r.plain=i({},n,{backgroundColor:null}),r};function p(e,t){var n={};for(var u in e)Object.prototype.hasOwnProperty.call(e,u)&&-1===t.indexOf(u)&&(n[u]=e[u]);return n}var m=function(e){function t(){for(var t=this,n=[],u=arguments.length;u--;)n[u]=arguments[u];e.apply(this,n),o(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?s(e.theme,e.language):void 0;return t.themeDict=n})),o(this,"getLineProps",(function(e){var n=e.key,u=e.className,r=e.style,a=i({},p(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),d=t.getThemeDict(t.props);return void 0!==d&&(a.style=d.plain),void 0!==r&&(a.style=void 0!==a.style?i({},a.style,r):r),void 0!==n&&(a.key=n),u&&(a.className+=" "+u),a})),o(this,"getStyleForToken",(function(e){var n=e.types,u=e.empty,r=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===r&&"plain"===n[0])return u?{display:"inline-block"}:void 0;if(1===r&&!u)return a[n[0]];var d=u?{display:"inline-block"}:{},o=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[d].concat(o))}})),o(this,"getTokenProps",(function(e){var n=e.key,u=e.className,r=e.style,a=e.token,d=i({},p(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==r&&(d.style=void 0!==d.style?i({},d.style,r):r),void 0!==n&&(d.key=n),u&&(d.className+=" "+u),d}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,u=e.code,r=e.children,a=this.getThemeDict(this.props),d=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],u=[0],r=[e.length],a=0,d=0,o=[],i=[o];d>-1;){for(;(a=u[d]++)0?p:["plain"],s=m):(p=f(p,m.type),m.alias&&(p=f(p,m.alias)),s=m.content),"string"==typeof s){var h=s.split(c),b=h.length;o.push({types:p,content:h[0]});for(var v=1;v=0)&&a(e,!n)}e.exports=t.default},560:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assertNodeList=i,t.setElement=function(e){var t=e;if("string"==typeof t&&d.canUseDOM){var n=document.querySelectorAll(t);i(n,t),t="length"in n?n[0]:n}return o=t||o},t.validateElement=c,t.hide=function(e){c(e)&&(e||o).setAttribute("aria-hidden","true")},t.show=function(e){c(e)&&(e||o).removeAttribute("aria-hidden")},t.documentNotReadyOrSSRTesting=function(){o=null},t.resetForTesting=function(){o=null};var u,r=n(585),a=(u=r)&&u.__esModule?u:{default:u},d=n(536);var o=null;function i(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function c(e){return!(!e&&!o)||((0,a.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),!1)}},561:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u=new function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.register=function(e){-1===t.openInstances.indexOf(e)&&(t.openInstances.push(e),t.emit("register"))},this.deregister=function(e){var n=t.openInstances.indexOf(e);-1!==n&&(t.openInstances.splice(n,1),t.emit("deregister"))},this.subscribe=function(e){t.subscribers.push(e)},this.emit=function(e){t.subscribers.forEach((function(n){return n(e,t.openInstances.slice())}))},this.openInstances=[],this.subscribers=[]};t.default=u,e.exports=t.default},580:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var u,r=n(581),a=(u=r)&&u.__esModule?u:{default:u};t.default=a.default,e.exports=t.default},581:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bodyOpenClassName=t.portalClassName=void 0;var u=Object.assign||function(e){for(var t=1;t0&&0===(g-=1)&&f.show(t),n.props.shouldFocusAfterRender&&(n.props.shouldReturnFocusAfterClose?(c.returnFocus(),c.teardownScopedFocus()):c.popWithoutFocus()),n.props.onAfterClose&&n.props.onAfterClose(),m.default.deregister(n)},n.open=function(){n.beforeOpen(),n.state.afterOpen&&n.state.beforeClose?(clearTimeout(n.closeTimer),n.setState({beforeClose:!1})):(n.props.shouldFocusAfterRender&&(c.setupScopedFocus(n.node),c.markForFocusLater()),n.setState({isOpen:!0},(function(){n.setState({afterOpen:!0}),n.props.isOpen&&n.props.onAfterOpen&&n.props.onAfterOpen({overlayEl:n.overlay,contentEl:n.content})})))},n.close=function(){n.props.closeTimeoutMS>0?n.closeWithTimeout():n.closeWithoutTimeout()},n.focusContent=function(){return n.content&&!n.contentHasFocus()&&n.content.focus()},n.closeWithTimeout=function(){var e=Date.now()+n.props.closeTimeoutMS;n.setState({beforeClose:!0,closesAt:e},(function(){n.closeTimer=setTimeout(n.closeWithoutTimeout,n.state.closesAt-Date.now())}))},n.closeWithoutTimeout=function(){n.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},n.afterClose)},n.handleKeyDown=function(e){9===e.keyCode&&(0,l.default)(n.content,e),n.props.shouldCloseOnEsc&&27===e.keyCode&&(e.stopPropagation(),n.requestClose(e))},n.handleOverlayOnClick=function(e){null===n.shouldClose&&(n.shouldClose=!0),n.shouldClose&&n.props.shouldCloseOnOverlayClick&&(n.ownerHandlesClose()?n.requestClose(e):n.focusContent()),n.shouldClose=null},n.handleContentOnMouseUp=function(){n.shouldClose=!1},n.handleOverlayOnMouseDown=function(e){n.props.shouldCloseOnOverlayClick||e.target!=n.overlay||e.preventDefault()},n.handleContentOnClick=function(){n.shouldClose=!1},n.handleContentOnMouseDown=function(){n.shouldClose=!1},n.requestClose=function(e){return n.ownerHandlesClose()&&n.props.onRequestClose(e)},n.ownerHandlesClose=function(){return n.props.onRequestClose},n.shouldBeClosed=function(){return!n.state.isOpen&&!n.state.beforeClose},n.contentHasFocus=function(){return document.activeElement===n.content||n.content.contains(document.activeElement)},n.buildClassName=function(e,t){var u="object"===(void 0===t?"undefined":r(t))?t:{base:v[e],afterOpen:v[e]+"--after-open",beforeClose:v[e]+"--before-close"},a=u.base;return n.state.afterOpen&&(a=a+" "+u.afterOpen),n.state.beforeClose&&(a=a+" "+u.beforeClose),"string"==typeof t&&t?a+" "+t:a},n.attributesFromObject=function(e,t){return Object.keys(t).reduce((function(n,u){return n[e+"-"+u]=t[u],n}),{})},n.state={afterOpen:!1,beforeClose:!1},n.shouldClose=null,n.moveFromContentToOverlay=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(e,t){this.props.isOpen&&!e.isOpen?this.open():!this.props.isOpen&&e.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!t.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.state.isOpen&&this.afterClose(),clearTimeout(this.closeTimer)}},{key:"beforeOpen",value:function(){var e=this.props,t=e.appElement,n=e.ariaHideApp,u=e.htmlOpenClassName,r=e.bodyOpenClassName;r&&s.add(document.body,r),u&&s.add(document.getElementsByTagName("html")[0],u),n&&(g+=1,f.hide(t)),m.default.register(this)}},{key:"render",value:function(){var e=this.props,t=e.id,n=e.className,r=e.overlayClassName,a=e.defaultStyles,d=n?{}:a.content,i=r?{}:a.overlay;return this.shouldBeClosed()?null:o.default.createElement("div",{ref:this.setOverlayRef,className:this.buildClassName("overlay",r),style:u({},i,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},o.default.createElement("div",u({id:t,ref:this.setContentRef,style:u({},d,this.props.style.content),className:this.buildClassName("content",n),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",this.props.aria||{}),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),this.props.children))}}]),t}(d.Component);y.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},y.propTypes={isOpen:i.default.bool.isRequired,defaultStyles:i.default.shape({content:i.default.object,overlay:i.default.object}),style:i.default.shape({content:i.default.object,overlay:i.default.object}),className:i.default.oneOfType([i.default.string,i.default.object]),overlayClassName:i.default.oneOfType([i.default.string,i.default.object]),bodyOpenClassName:i.default.string,htmlOpenClassName:i.default.string,ariaHideApp:i.default.bool,appElement:i.default.instanceOf(p.default),onAfterOpen:i.default.func,onAfterClose:i.default.func,onRequestClose:i.default.func,closeTimeoutMS:i.default.number,shouldFocusAfterRender:i.default.bool,shouldCloseOnOverlayClick:i.default.bool,shouldReturnFocusAfterClose:i.default.bool,role:i.default.string,contentLabel:i.default.string,aria:i.default.object,data:i.default.object,children:i.default.node,shouldCloseOnEsc:i.default.bool,overlayRef:i.default.func,contentRef:i.default.func,id:i.default.string,testId:i.default.string},t.default=y,e.exports=t.default},583:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.handleBlur=c,t.handleFocus=l,t.markForFocusLater=function(){d.push(document.activeElement)},t.returnFocus=function(){var e=null;try{return void(0!==d.length&&(e=d.pop()).focus())}catch(t){console.warn(["You tried to return focus to",e,"but it is not in the DOM anymore"].join(" "))}},t.popWithoutFocus=function(){d.length>0&&d.pop()},t.setupScopedFocus=function(e){o=e,window.addEventListener?(window.addEventListener("blur",c,!1),document.addEventListener("focus",l,!0)):(window.attachEvent("onBlur",c),document.attachEvent("onFocus",l))},t.teardownScopedFocus=function(){o=null,window.addEventListener?(window.removeEventListener("blur",c),document.removeEventListener("focus",l)):(window.detachEvent("onBlur",c),document.detachEvent("onFocus",l))};var u,r=n(559),a=(u=r)&&u.__esModule?u:{default:u};var d=[],o=null,i=!1;function c(){i=!0}function l(){if(i){if(i=!1,!o)return;setTimeout((function(){o.contains(document.activeElement)||((0,a.default)(o)[0]||o).focus()}),0)}}},584:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=(0,a.default)(e);if(!n.length)return void t.preventDefault();var u=void 0,r=t.shiftKey,d=n[0],o=n[n.length-1];if(e===document.activeElement){if(!r)return;u=o}o!==document.activeElement||r||(u=d);d===document.activeElement&&r&&(u=o);if(u)return t.preventDefault(),void u.focus();var i=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent);if(null==i||"Chrome"==i[1]||null!=/\biPod\b|\biPad\b/g.exec(navigator.userAgent))return;var c=n.indexOf(document.activeElement);c>-1&&(c+=r?-1:1);if(void 0===(u=n[c]))return t.preventDefault(),void(u=r?o:d).focus();t.preventDefault(),u.focus()};var u,r=n(559),a=(u=r)&&u.__esModule?u:{default:u};e.exports=t.default},585:function(e,t,n){"use strict";var u=function(){};e.exports=u},586:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dumpClassLists=function(){0};var u={},r={};t.add=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?u:r,void t.split(" ").forEach((function(e){!function(e,t){e[t]||(e[t]=0),e[t]+=1}(a,e),n.add(e)}));var n,a},t.remove=function(e,t){return n=e.classList,a="html"==e.nodeName.toLowerCase()?u:r,void t.split(" ").forEach((function(e){!function(e,t){e[t]&&(e[t]-=1)}(a,e),0===a[e]&&n.remove(e)}));var n,a}},587:function(e,t,n){"use strict";var u,r=n(561),a=(u=r)&&u.__esModule?u:{default:u};var d=void 0,o=void 0,i=[];function c(){0!==i.length&&i[i.length-1].focusContent()}a.default.subscribe((function(e,t){d&&o||((d=document.createElement("div")).setAttribute("data-react-modal-body-trap",""),d.style.position="absolute",d.style.opacity="0",d.setAttribute("tabindex","0"),d.addEventListener("focus",c),(o=d.cloneNode()).addEventListener("focus",c)),(i=t).length>0?(document.body.firstChild!==d&&document.body.insertBefore(d,document.body.firstChild),document.body.lastChild!==o&&document.body.appendChild(o)):(d.parentElement&&d.parentElement.removeChild(d),o.parentElement&&o.parentElement.removeChild(o))}))},588:function(e,t,n){"use strict";function u(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!=e&&this.setState(e)}function r(e){this.setState(function(t){var n=this.constructor.getDerivedStateFromProps(e,t);return null!=n?n:null}.bind(this))}function a(e,t){try{var n=this.props,u=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,u)}finally{this.props=n,this.state=u}}function d(e){var t=e.prototype;if(!t||!t.isReactComponent)throw new Error("Can only polyfill class components");if("function"!=typeof e.getDerivedStateFromProps&&"function"!=typeof t.getSnapshotBeforeUpdate)return e;var n=null,d=null,o=null;if("function"==typeof t.componentWillMount?n="componentWillMount":"function"==typeof t.UNSAFE_componentWillMount&&(n="UNSAFE_componentWillMount"),"function"==typeof t.componentWillReceiveProps?d="componentWillReceiveProps":"function"==typeof t.UNSAFE_componentWillReceiveProps&&(d="UNSAFE_componentWillReceiveProps"),"function"==typeof t.componentWillUpdate?o="componentWillUpdate":"function"==typeof t.UNSAFE_componentWillUpdate&&(o="UNSAFE_componentWillUpdate"),null!==n||null!==d||null!==o){var i=e.displayName||e.name,c="function"==typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+i+" uses "+c+" but also contains the following legacy lifecycles:"+(null!==n?"\n "+n:"")+(null!==d?"\n "+d:"")+(null!==o?"\n "+o:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"==typeof e.getDerivedStateFromProps&&(t.componentWillMount=u,t.componentWillReceiveProps=r),"function"==typeof t.getSnapshotBeforeUpdate){if("function"!=typeof t.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");t.componentWillUpdate=a;var l=t.componentDidUpdate;t.componentDidUpdate=function(e,t,n){var u=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;l.call(this,e,t,u)}}return e}n.r(t),n.d(t,"polyfill",(function(){return d})),u.__suppressDeprecationWarning=!0,r.__suppressDeprecationWarning=!0,a.__suppressDeprecationWarning=!0},589:function(e,t,n){var u;!function(r){"use strict";var a,d,o,i=(a=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g,d=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,o=/[^-+\dA-Z]/g,function(e,t,n,u){if(1!==arguments.length||"string"!==s(e)||/\d/.test(e)||(t=e,e=void 0),(e=e||new Date)instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");var r=(t=String(i.masks[t]||t||i.masks.default)).slice(0,4);"UTC:"!==r&&"GMT:"!==r||(t=t.slice(4),n=!0,"GMT:"===r&&(u=!0));var p=n?"getUTC":"get",m=e[p+"Date"](),h=e[p+"Day"](),b=e[p+"Month"](),v=e[p+"FullYear"](),g=e[p+"Hours"](),y=e[p+"Minutes"](),_=e[p+"Seconds"](),E=e[p+"Milliseconds"](),w=n?0:e.getTimezoneOffset(),D=l(e),k=f(e),x={d:m,dd:c(m),ddd:i.i18n.dayNames[h],dddd:i.i18n.dayNames[h+7],m:b+1,mm:c(b+1),mmm:i.i18n.monthNames[b],mmmm:i.i18n.monthNames[b+12],yy:String(v).slice(2),yyyy:v,h:g%12||12,hh:c(g%12||12),H:g,HH:c(g),M:y,MM:c(y),s:_,ss:c(_),l:c(E,3),L:c(Math.round(E/10)),t:g<12?i.i18n.timeNames[0]:i.i18n.timeNames[1],tt:g<12?i.i18n.timeNames[2]:i.i18n.timeNames[3],T:g<12?i.i18n.timeNames[4]:i.i18n.timeNames[5],TT:g<12?i.i18n.timeNames[6]:i.i18n.timeNames[7],Z:u?"GMT":n?"UTC":(String(e).match(d)||[""]).pop().replace(o,""),o:(w>0?"-":"+")+c(100*Math.floor(Math.abs(w)/60)+Math.abs(w)%60,4),S:["th","st","nd","rd"][m%10>3?0:(m%100-m%10!=10)*m%10],W:D,N:k};return t.replace(a,(function(e){return e in x?x[e]:e.slice(1,e.length-1)}))});function c(e,t){for(e=String(e),t=t||2;e.length0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:b,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,a){return r.a.createElement("div",{key:a,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,a){return e.html?r.a.createElement("li",{key:a,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(F,e))}))):null)}))),(m||o)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:A.a.footerLogoLink},r.a.createElement(P,{alt:m.alt,url:d})):r.a.createElement(P,{alt:m.alt,url:d})),r.a.createElement("small",null,o),r.a.createElement("br",null))))},Q=t(454),H=t(455),V=t(3);t(138);a.a=function(e){var a=Object(g.a)().siteConfig,t=void 0===a?{}:a,n=t.favicon,c=(t.tagline,t.title),i=t.themeConfig.image,s=t.url,m=e.children,u=e.title,d=e.noFooter,b=e.description,h=e.image,v=e.keywords,f=(e.permalink,e.version),E=u?u+" | "+c:c,p=h||i,_=s+Object(y.a)(p),k=Object(y.a)(n),w=Object(V.h)(),N=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(H.a,null,r.a.createElement(Q.a,null,r.a.createElement(o.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),E&&r.a.createElement("title",null,E),E&&r.a.createElement("meta",{property:"og:title",content:E}),n&&r.a.createElement("link",{rel:"shortcut icon",href:k}),b&&r.a.createElement("meta",{name:"description",content:b}),b&&r.a.createElement("meta",{property:"og:description",content:b}),f&&r.a.createElement("meta",{name:"docsearch:version",content:f}),v&&v.length&&r.a.createElement("meta",{name:"keywords",content:v.join(",")}),p&&r.a.createElement("meta",{property:"og:image",content:_}),p&&r.a.createElement("meta",{property:"twitter:image",content:_}),p&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+E}),N&&r.a.createElement("meta",{property:"og:url",content:N}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),N&&r.a.createElement("link",{rel:"canonical",href:N})),r.a.createElement(l.a,null),r.a.createElement(I,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(q,null)))}},446:function(e,a,t){"use strict";var n=t(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});a.a=r},556:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(437);a.default=function(){return r.a.createElement(l.a,{title:"Page Not Found"},r.a.createElement("div",{className:"container margin-vert--xl"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--6 col--offset-3"},r.a.createElement("h1",{className:"hero__title"},"Page Not Found"),r.a.createElement("p",null,"We could not find what you were looking for."),r.a.createElement("p",null,"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))}}}]); \ No newline at end of file diff --git a/262.ac716e50.js.LICENSE.txt b/262.5dfc77b3.js.LICENSE.txt similarity index 100% rename from 262.ac716e50.js.LICENSE.txt rename to 262.5dfc77b3.js.LICENSE.txt diff --git a/262.ac716e50.js b/262.ac716e50.js deleted file mode 100644 index aa08c95ff3..0000000000 --- a/262.ac716e50.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 262.ac716e50.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[262],{415:function(e,a,t){var n;!function(){"use strict";var t={}.hasOwnProperty;function r(){for(var e=[],a=0;a0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:b,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,a){return r.a.createElement("div",{key:a,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,a){return e.html?r.a.createElement("li",{key:a,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(F,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:A.a.footerLogoLink},r.a.createElement(q,{alt:m.alt,url:d})):r.a.createElement(q,{alt:m.alt,url:d})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},Q=t(454),H=t(455),V=t(3);t(138);a.a=function(e){var a=Object(g.a)().siteConfig,t=void 0===a?{}:a,n=t.favicon,o=(t.tagline,t.title),i=t.themeConfig.image,s=t.url,m=e.children,u=e.title,d=e.noFooter,b=e.description,h=e.image,v=e.keywords,f=(e.permalink,e.version),E=u?u+" | "+o:o,p=h||i,_=s+Object(y.a)(p),k=Object(y.a)(n),w=Object(V.h)(),N=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(H.a,null,r.a.createElement(Q.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),E&&r.a.createElement("title",null,E),E&&r.a.createElement("meta",{property:"og:title",content:E}),n&&r.a.createElement("link",{rel:"shortcut icon",href:k}),b&&r.a.createElement("meta",{name:"description",content:b}),b&&r.a.createElement("meta",{property:"og:description",content:b}),f&&r.a.createElement("meta",{name:"docsearch:version",content:f}),v&&v.length&&r.a.createElement("meta",{name:"keywords",content:v.join(",")}),p&&r.a.createElement("meta",{property:"og:image",content:_}),p&&r.a.createElement("meta",{property:"twitter:image",content:_}),p&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+E}),N&&r.a.createElement("meta",{property:"og:url",content:N}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),N&&r.a.createElement("link",{rel:"canonical",href:N})),r.a.createElement(l.a,null),r.a.createElement(L,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(P,null)))}},446:function(e,a,t){"use strict";var n=t(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});a.a=r},556:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(437);a.default=function(){return r.a.createElement(l.a,{title:"Page Not Found"},r.a.createElement("div",{className:"container margin-vert--xl"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--6 col--offset-3"},r.a.createElement("h1",{className:"hero__title"},"Page Not Found"),r.a.createElement("p",null,"We could not find what you were looking for."),r.a.createElement("p",null,"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))}}}]); \ No newline at end of file diff --git a/3116c1fa.152b7c26.js b/3116c1fa.152b7c26.js new file mode 100644 index 0000000000..d2221ab33c --- /dev/null +++ b/3116c1fa.152b7c26.js @@ -0,0 +1,2 @@ +/*! For license information please see 3116c1fa.152b7c26.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{204:function(u,e,d){"use strict";d.r(e);var n=d(1),t=(d(52),d(420),d(29),d(22),d(21),d(85),d(0)),r=d.n(t),a=d(442),c=d(437),f=(d(422),d(466)),i=d(443),o=d.n(i),l=d(447),s=d(473),p=d.n(s),m=d(590),h=d.n(m),b=Object(a.a)("h2");e.default=function(u){var e=u.tags,d=Object.values(e).map((function(u){return{count:u.count,label:u.name,permalink:u.permalink}})),t=Object(l.a)(d,"guides"),a=o.a.groupBy(t,"category");return r.a.createElement(c.a,{title:"Tags",description:"Qovery guide tags"},r.a.createElement("header",{className:"hero hero--clean"},r.a.createElement("div",{className:"container"},r.a.createElement("h1",null,"All Guide Tags"))),r.a.createElement("main",{className:"container container--xs"},Object.keys(a).map((function(u,e){var d=a[u];return r.a.createElement("section",null,r.a.createElement(b,{id:u.name},h()(p()(u))),d.map((function(u,e){return r.a.createElement("div",null,r.a.createElement(f.a,Object(n.a)({key:e,valueOnly:!0},u)))})))}))))}},415:function(u,e,d){var n;!function(){"use strict";var d={}.hasOwnProperty;function t(){for(var u=[],e=0;e1?arguments[1]:void 0)}}),d(74)("find")},437:function(u,e,d){"use strict";d(449);var n=d(0),t=d.n(n),r=d(450),a=d(435),c=d(1),f=(d(438),d(439),d(451),d(422)),i=d(452),o=d(432),l=d.n(o),s=d(453),p=d.n(s),m=d(428),h=d(415),b=d.n(h),v=d(135),_=d.n(v),g=function(){return t.a.createElement("span",{className:b()(_.a.toggle,_.a.moon)})},D=function(){return t.a.createElement("span",{className:b()(_.a.toggle,_.a.sun)})},y=function(u){var e=Object(m.a)().isClient;return t.a.createElement(p.a,Object(c.a)({disabled:!e,icons:{checked:t.a.createElement(g,null),unchecked:t.a.createElement(D,null)}},u))};function E(){var u=Object(m.a)().siteConfig,e=(void 0===u?{}:u).customFields.metadata.latest_post,d=Date.parse(e.date),n=new Date,t=Math.abs(n-d),r=Math.ceil(t/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),r<30&&(!a||a0&&t.a.createElement("div",{className:"row footer__links"},t.a.createElement("div",{className:"col col--5 footer__col"},t.a.createElement("div",{className:"margin-bottom--md"},t.a.createElement(l.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),t.a.createElement("div",{className:"margin-bottom--md"},t.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),t.a.createElement("div",null,t.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},t.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},t.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},t.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},t.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),f.map((function(u,e){return t.a.createElement("div",{key:e,className:"col footer__col"},null!=u.title?t.a.createElement("h4",{className:"footer__title"},u.title):null,null!=u.items&&Array.isArray(u.items)&&u.items.length>0?t.a.createElement("ul",{className:"footer__items"},u.items.map((function(u,e){return u.html?t.a.createElement("li",{key:e,className:"footer__item",dangerouslySetInnerHTML:{__html:u.html}}):t.a.createElement("li",{key:u.href||u.to,className:"footer__item"},t.a.createElement(L,u))}))):null)}))),(o||a)&&t.a.createElement("div",{className:"text--center"},o&&o.src&&t.a.createElement("div",{className:"margin-bottom--sm"},o.href?t.a.createElement("a",{href:o.href,target:"_blank",rel:"noopener noreferrer",className:B.a.footerLogoLink},t.a.createElement(P,{alt:o.alt,url:s})):t.a.createElement(P,{alt:o.alt,url:s})),t.a.createElement("small",null,a),t.a.createElement("br",null))))},T=d(454),R=d(455),U=d(3);d(138);e.a=function(u){var e=Object(m.a)().siteConfig,d=void 0===e?{}:e,n=d.favicon,c=(d.tagline,d.title),f=d.themeConfig.image,i=d.url,o=u.children,l=u.title,s=u.noFooter,p=u.description,h=u.image,b=u.keywords,v=(u.permalink,u.version),_=l?l+" | "+c:c,g=h||f,D=i+Object(I.a)(g),y=Object(I.a)(n),E=Object(U.h)(),x=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return t.a.createElement(R.a,null,t.a.createElement(T.a,null,t.a.createElement(a.a,null,t.a.createElement("html",{lang:"en"}),t.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&t.a.createElement("title",null,_),_&&t.a.createElement("meta",{property:"og:title",content:_}),n&&t.a.createElement("link",{rel:"shortcut icon",href:y}),p&&t.a.createElement("meta",{name:"description",content:p}),p&&t.a.createElement("meta",{property:"og:description",content:p}),v&&t.a.createElement("meta",{name:"docsearch:version",content:v}),b&&b.length&&t.a.createElement("meta",{name:"keywords",content:b.join(",")}),g&&t.a.createElement("meta",{property:"og:image",content:D}),g&&t.a.createElement("meta",{property:"twitter:image",content:D}),g&&t.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),x&&t.a.createElement("meta",{property:"og:url",content:x}),t.a.createElement("meta",{name:"twitter:card",content:"summary"}),x&&t.a.createElement("link",{rel:"canonical",href:x})),t.a.createElement(r.a,null),t.a.createElement(j,null),t.a.createElement("div",{className:"main-wrapper"},o),!s&&t.a.createElement(M,null)))}},442:function(u,e,d){"use strict";var n=d(9),t=d(0),r=d.n(t),a=d(415),c=d.n(a),f=d(428),i=(d(139),d(140)),o=d.n(i);e.a=function(u){return function(e){var d,t=e.id,a=Object(n.a)(e,["id"]),i=Object(f.a)().siteConfig,l=(i=void 0===i?{}:i).themeConfig,s=(l=void 0===l?{}:l).navbar,p=(s=void 0===s?{}:s).hideOnScroll,m=void 0!==p&&p;return t?r.a.createElement(u,a,r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:c()("anchor",(d={},d[o.a.enhancedAnchor]=!m,d)),id:t}),r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+t,title:"Direct link to heading"},"#"),a.children):r.a.createElement(u,a)}}},443:function(u,e,d){(function(u,n){var t;(function(){var r="Expected a function",a="__lodash_placeholder__",c=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],f="[object Arguments]",i="[object Array]",o="[object Boolean]",l="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",b="[object Number]",v="[object Object]",_="[object RegExp]",g="[object Set]",D="[object String]",y="[object Symbol]",E="[object WeakMap]",x="[object ArrayBuffer]",I="[object DataView]",w="[object Float32Array]",C="[object Float64Array]",F="[object Int8Array]",A="[object Int16Array]",k="[object Int32Array]",S="[object Uint8Array]",O="[object Uint16Array]",j="[object Uint32Array]",$=/\b__p \+= '';/g,N=/\b(__p \+=) '' \+/g,B=/(__e\(.*?\)|\b__t\)) \+\n'';/g,L=/&(?:amp|lt|gt|quot|#39);/g,P=/[&<>"']/g,M=RegExp(L.source),T=RegExp(P.source),R=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,W=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,q=RegExp(H.source),J=/^\s+|\s+$/g,Z=/^\s+/,V=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,uu=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,eu=/\\(\\)?/g,du=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nu=/\w*$/,tu=/^[-+]0x[0-9a-f]+$/i,ru=/^0b[01]+$/i,au=/^\[object .+?Constructor\]$/,cu=/^0o[0-7]+$/i,fu=/^(?:0|[1-9]\d*)$/,iu=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ou=/($^)/,lu=/['\n\r\u2028\u2029\\]/g,su="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pu="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",mu="[\\ud800-\\udfff]",hu="["+pu+"]",bu="["+su+"]",vu="\\d+",_u="[\\u2700-\\u27bf]",gu="[a-z\\xdf-\\xf6\\xf8-\\xff]",Du="[^\\ud800-\\udfff"+pu+vu+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",yu="\\ud83c[\\udffb-\\udfff]",Eu="[^\\ud800-\\udfff]",xu="(?:\\ud83c[\\udde6-\\uddff]){2}",Iu="[\\ud800-\\udbff][\\udc00-\\udfff]",wu="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Cu="(?:"+gu+"|"+Du+")",Fu="(?:"+wu+"|"+Du+")",Au="(?:"+bu+"|"+yu+")"+"?",ku="[\\ufe0e\\ufe0f]?"+Au+("(?:\\u200d(?:"+[Eu,xu,Iu].join("|")+")[\\ufe0e\\ufe0f]?"+Au+")*"),Su="(?:"+[_u,xu,Iu].join("|")+")"+ku,Ou="(?:"+[Eu+bu+"?",bu,xu,Iu,mu].join("|")+")",ju=RegExp("['\u2019]","g"),$u=RegExp(bu,"g"),Nu=RegExp(yu+"(?="+yu+")|"+Ou+ku,"g"),Bu=RegExp([wu+"?"+gu+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[hu,wu,"$"].join("|")+")",Fu+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[hu,wu+Cu,"$"].join("|")+")",wu+"?"+Cu+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",wu+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",vu,Su].join("|"),"g"),Lu=RegExp("[\\u200d\\ud800-\\udfff"+su+"\\ufe0e\\ufe0f]"),Pu=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Mu=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Tu=-1,Ru={};Ru[w]=Ru[C]=Ru[F]=Ru[A]=Ru[k]=Ru[S]=Ru["[object Uint8ClampedArray]"]=Ru[O]=Ru[j]=!0,Ru[f]=Ru[i]=Ru[x]=Ru[o]=Ru[I]=Ru[l]=Ru[s]=Ru[p]=Ru[h]=Ru[b]=Ru[v]=Ru[_]=Ru[g]=Ru[D]=Ru[E]=!1;var Uu={};Uu[f]=Uu[i]=Uu[x]=Uu[I]=Uu[o]=Uu[l]=Uu[w]=Uu[C]=Uu[F]=Uu[A]=Uu[k]=Uu[h]=Uu[b]=Uu[v]=Uu[_]=Uu[g]=Uu[D]=Uu[y]=Uu[S]=Uu["[object Uint8ClampedArray]"]=Uu[O]=Uu[j]=!0,Uu[s]=Uu[p]=Uu[E]=!1;var zu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ku=parseFloat,Wu=parseInt,Gu="object"==typeof u&&u&&u.Object===Object&&u,Hu="object"==typeof self&&self&&self.Object===Object&&self,qu=Gu||Hu||Function("return this")(),Ju=e&&!e.nodeType&&e,Zu=Ju&&"object"==typeof n&&n&&!n.nodeType&&n,Vu=Zu&&Zu.exports===Ju,Yu=Vu&&Gu.process,Qu=function(){try{var u=Zu&&Zu.require&&Zu.require("util").types;return u||Yu&&Yu.binding&&Yu.binding("util")}catch(e){}}(),Xu=Qu&&Qu.isArrayBuffer,ue=Qu&&Qu.isDate,ee=Qu&&Qu.isMap,de=Qu&&Qu.isRegExp,ne=Qu&&Qu.isSet,te=Qu&&Qu.isTypedArray;function re(u,e,d){switch(d.length){case 0:return u.call(e);case 1:return u.call(e,d[0]);case 2:return u.call(e,d[0],d[1]);case 3:return u.call(e,d[0],d[1],d[2])}return u.apply(e,d)}function ae(u,e,d,n){for(var t=-1,r=null==u?0:u.length;++t-1}function se(u,e,d){for(var n=-1,t=null==u?0:u.length;++n-1;);return d}function Ne(u,e){for(var d=u.length;d--&&ye(e,u[d],0)>-1;);return d}function Be(u,e){for(var d=u.length,n=0;d--;)u[d]===e&&++n;return n}var Le=Ce({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Pe=Ce({"&":"&","<":"<",">":">",'"':""","'":"'"});function Me(u){return"\\"+zu[u]}function Te(u){return Lu.test(u)}function Re(u){var e=-1,d=Array(u.size);return u.forEach((function(u,n){d[++e]=[n,u]})),d}function Ue(u,e){return function(d){return u(e(d))}}function ze(u,e){for(var d=-1,n=u.length,t=0,r=[];++d",""":'"',"'":"'"});var Je=function u(e){var d,n=(e=null==e?qu:Je.defaults(qu.Object(),e,Je.pick(qu,Mu))).Array,t=e.Date,su=e.Error,pu=e.Function,mu=e.Math,hu=e.Object,bu=e.RegExp,vu=e.String,_u=e.TypeError,gu=n.prototype,Du=pu.prototype,yu=hu.prototype,Eu=e["__core-js_shared__"],xu=Du.toString,Iu=yu.hasOwnProperty,wu=0,Cu=(d=/[^.]+$/.exec(Eu&&Eu.keys&&Eu.keys.IE_PROTO||""))?"Symbol(src)_1."+d:"",Fu=yu.toString,Au=xu.call(hu),ku=qu._,Su=bu("^"+xu.call(Iu).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ou=Vu?e.Buffer:void 0,Nu=e.Symbol,Lu=e.Uint8Array,zu=Ou?Ou.allocUnsafe:void 0,Gu=Ue(hu.getPrototypeOf,hu),Hu=hu.create,Ju=yu.propertyIsEnumerable,Zu=gu.splice,Yu=Nu?Nu.isConcatSpreadable:void 0,Qu=Nu?Nu.iterator:void 0,_e=Nu?Nu.toStringTag:void 0,Ce=function(){try{var u=Xt(hu,"defineProperty");return u({},"",{}),u}catch(e){}}(),Ze=e.clearTimeout!==qu.clearTimeout&&e.clearTimeout,Ve=t&&t.now!==qu.Date.now&&t.now,Ye=e.setTimeout!==qu.setTimeout&&e.setTimeout,Qe=mu.ceil,Xe=mu.floor,ud=hu.getOwnPropertySymbols,ed=Ou?Ou.isBuffer:void 0,dd=e.isFinite,nd=gu.join,td=Ue(hu.keys,hu),rd=mu.max,ad=mu.min,cd=t.now,fd=e.parseInt,id=mu.random,od=gu.reverse,ld=Xt(e,"DataView"),sd=Xt(e,"Map"),pd=Xt(e,"Promise"),md=Xt(e,"Set"),hd=Xt(e,"WeakMap"),bd=Xt(hu,"create"),vd=hd&&new hd,_d={},gd=Cr(ld),Dd=Cr(sd),yd=Cr(pd),Ed=Cr(md),xd=Cr(hd),Id=Nu?Nu.prototype:void 0,wd=Id?Id.valueOf:void 0,Cd=Id?Id.toString:void 0;function Fd(u){if(Ka(u)&&!ja(u)&&!(u instanceof Od)){if(u instanceof Sd)return u;if(Iu.call(u,"__wrapped__"))return Fr(u)}return new Sd(u)}var Ad=function(){function u(){}return function(e){if(!za(e))return{};if(Hu)return Hu(e);u.prototype=e;var d=new u;return u.prototype=void 0,d}}();function kd(){}function Sd(u,e){this.__wrapped__=u,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function Od(u){this.__wrapped__=u,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function jd(u){var e=-1,d=null==u?0:u.length;for(this.clear();++e=e?u:e)),u}function Zd(u,e,d,n,t,r){var a,c=1&e,i=2&e,s=4&e;if(d&&(a=t?d(u,n,t,r):d(u)),void 0!==a)return a;if(!za(u))return u;var E=ja(u);if(E){if(a=function(u){var e=u.length,d=new u.constructor(e);e&&"string"==typeof u[0]&&Iu.call(u,"index")&&(d.index=u.index,d.input=u.input);return d}(u),!c)return vt(u,a)}else{var $=dr(u),N=$==p||$==m;if(La(u))return lt(u,c);if($==v||$==f||N&&!t){if(a=i||N?{}:tr(u),!c)return i?function(u,e){return _t(u,er(u),e)}(u,function(u,e){return u&&_t(e,Dc(e),u)}(a,u)):function(u,e){return _t(u,ur(u),e)}(u,Gd(a,u))}else{if(!Uu[$])return t?u:{};a=function(u,e,d){var n=u.constructor;switch(e){case x:return st(u);case o:case l:return new n(+u);case I:return function(u,e){var d=e?st(u.buffer):u.buffer;return new u.constructor(d,u.byteOffset,u.byteLength)}(u,d);case w:case C:case F:case A:case k:case S:case"[object Uint8ClampedArray]":case O:case j:return pt(u,d);case h:return new n;case b:case D:return new n(u);case _:return function(u){var e=new u.constructor(u.source,nu.exec(u));return e.lastIndex=u.lastIndex,e}(u);case g:return new n;case y:return t=u,wd?hu(wd.call(t)):{}}var t}(u,$,c)}}r||(r=new Ld);var B=r.get(u);if(B)return B;r.set(u,a),Ja(u)?u.forEach((function(n){a.add(Zd(n,e,d,n,u,r))})):Wa(u)&&u.forEach((function(n,t){a.set(t,Zd(n,e,d,t,u,r))}));var L=E?void 0:(s?i?Ht:Gt:i?Dc:gc)(u);return ce(L||u,(function(n,t){L&&(n=u[t=n]),zd(a,t,Zd(n,e,d,t,u,r))})),a}function Vd(u,e,d){var n=d.length;if(null==u)return!n;for(u=hu(u);n--;){var t=d[n],r=e[t],a=u[t];if(void 0===a&&!(t in u)||!r(a))return!1}return!0}function Yd(u,e,d){if("function"!=typeof u)throw new _u(r);return gr((function(){u.apply(void 0,d)}),e)}function Qd(u,e,d,n){var t=-1,r=le,a=!0,c=u.length,f=[],i=e.length;if(!c)return f;d&&(e=pe(e,Se(d))),n?(r=se,a=!1):e.length>=200&&(r=je,a=!1,e=new Bd(e));u:for(;++t-1},$d.prototype.set=function(u,e){var d=this.__data__,n=Kd(d,u);return n<0?(++this.size,d.push([u,e])):d[n][1]=e,this},Nd.prototype.clear=function(){this.size=0,this.__data__={hash:new jd,map:new(sd||$d),string:new jd}},Nd.prototype.delete=function(u){var e=Yt(this,u).delete(u);return this.size-=e?1:0,e},Nd.prototype.get=function(u){return Yt(this,u).get(u)},Nd.prototype.has=function(u){return Yt(this,u).has(u)},Nd.prototype.set=function(u,e){var d=Yt(this,u),n=d.size;return d.set(u,e),this.size+=d.size==n?0:1,this},Bd.prototype.add=Bd.prototype.push=function(u){return this.__data__.set(u,"__lodash_hash_undefined__"),this},Bd.prototype.has=function(u){return this.__data__.has(u)},Ld.prototype.clear=function(){this.__data__=new $d,this.size=0},Ld.prototype.delete=function(u){var e=this.__data__,d=e.delete(u);return this.size=e.size,d},Ld.prototype.get=function(u){return this.__data__.get(u)},Ld.prototype.has=function(u){return this.__data__.has(u)},Ld.prototype.set=function(u,e){var d=this.__data__;if(d instanceof $d){var n=d.__data__;if(!sd||n.length<199)return n.push([u,e]),this.size=++d.size,this;d=this.__data__=new Nd(n)}return d.set(u,e),this.size=d.size,this};var Xd=yt(cn),un=yt(fn,!0);function en(u,e){var d=!0;return Xd(u,(function(u,n,t){return d=!!e(u,n,t)})),d}function dn(u,e,d){for(var n=-1,t=u.length;++n0&&d(c)?e>1?tn(c,e-1,d,n,t):me(t,c):n||(t[t.length]=c)}return t}var rn=Et(),an=Et(!0);function cn(u,e){return u&&rn(u,e,gc)}function fn(u,e){return u&&an(u,e,gc)}function on(u,e){return oe(e,(function(e){return Ta(u[e])}))}function ln(u,e){for(var d=0,n=(e=ct(e,u)).length;null!=u&&de}function hn(u,e){return null!=u&&Iu.call(u,e)}function bn(u,e){return null!=u&&e in hu(u)}function vn(u,e,d){for(var t=d?se:le,r=u[0].length,a=u.length,c=a,f=n(a),i=1/0,o=[];c--;){var l=u[c];c&&e&&(l=pe(l,Se(e))),i=ad(l.length,i),f[c]=!d&&(e||r>=120&&l.length>=120)?new Bd(c&&l):void 0}l=u[0];var s=-1,p=f[0];u:for(;++s=c)return f;var i=d[n];return f*("desc"==i?-1:1)}}return u.index-e.index}(u,e,d)}))}function $n(u,e,d){for(var n=-1,t=e.length,r={};++n-1;)c!==u&&Zu.call(c,f,1),Zu.call(u,f,1);return u}function Bn(u,e){for(var d=u?e.length:0,n=d-1;d--;){var t=e[d];if(d==n||t!==r){var r=t;ar(t)?Zu.call(u,t,1):Xn(u,t)}}return u}function Ln(u,e){return u+Xe(id()*(e-u+1))}function Pn(u,e){var d="";if(!u||e<1||e>9007199254740991)return d;do{e%2&&(d+=u),(e=Xe(e/2))&&(u+=u)}while(e);return d}function Mn(u,e){return Dr(mr(u,e,Gc),u+"")}function Tn(u){return Md(Ac(u))}function Rn(u,e){var d=Ac(u);return xr(d,Jd(e,0,d.length))}function Un(u,e,d,n){if(!za(u))return u;for(var t=-1,r=(e=ct(e,u)).length,a=r-1,c=u;null!=c&&++tr?0:r+e),(d=d>r?r:d)<0&&(d+=r),r=e>d?0:d-e>>>0,e>>>=0;for(var a=n(r);++t>>1,a=u[r];null!==a&&!Va(a)&&(d?a<=e:a=200){var i=e?null:Pt(u);if(i)return Ke(i);a=!1,t=je,f=new Bd}else f=e?[]:c;u:for(;++n=n?u:Gn(u,e,d)}var ot=Ze||function(u){return qu.clearTimeout(u)};function lt(u,e){if(e)return u.slice();var d=u.length,n=zu?zu(d):new u.constructor(d);return u.copy(n),n}function st(u){var e=new u.constructor(u.byteLength);return new Lu(e).set(new Lu(u)),e}function pt(u,e){var d=e?st(u.buffer):u.buffer;return new u.constructor(d,u.byteOffset,u.length)}function mt(u,e){if(u!==e){var d=void 0!==u,n=null===u,t=u==u,r=Va(u),a=void 0!==e,c=null===e,f=e==e,i=Va(e);if(!c&&!i&&!r&&u>e||r&&a&&f&&!c&&!i||n&&a&&f||!d&&f||!t)return 1;if(!n&&!r&&!i&&u1?d[t-1]:void 0,a=t>2?d[2]:void 0;for(r=u.length>3&&"function"==typeof r?(t--,r):void 0,a&&cr(d[0],d[1],a)&&(r=t<3?void 0:r,t=1),e=hu(e);++n-1?t[r?e[a]:a]:void 0}}function Ft(u){return Wt((function(e){var d=e.length,n=d,t=Sd.prototype.thru;for(u&&e.reverse();n--;){var a=e[n];if("function"!=typeof a)throw new _u(r);if(t&&!c&&"wrapper"==Jt(a))var c=new Sd([],!0)}for(n=c?n:d;++n1&&g.reverse(),l&&i<_&&(g.length=i),this&&this!==qu&&this instanceof v&&(w=b||wt(w)),w.apply(I,g)}}function kt(u,e){return function(d,n){return function(u,e,d,n){return cn(u,(function(u,t,r){e(n,d(u),t,r)})),n}(d,u,e(n),{})}}function St(u,e){return function(d,n){var t;if(void 0===d&&void 0===n)return e;if(void 0!==d&&(t=d),void 0!==n){if(void 0===t)return n;"string"==typeof d||"string"==typeof n?(d=Yn(d),n=Yn(n)):(d=Vn(d),n=Vn(n)),t=u(d,n)}return t}}function Ot(u){return Wt((function(e){return e=pe(e,Se(Vt())),Mn((function(d){var n=this;return u(e,(function(u){return re(u,n,d)}))}))}))}function jt(u,e){var d=(e=void 0===e?" ":Yn(e)).length;if(d<2)return d?Pn(e,u):e;var n=Pn(e,Qe(u/Ge(e)));return Te(e)?it(He(n),0,u).join(""):n.slice(0,u)}function $t(u){return function(e,d,t){return t&&"number"!=typeof t&&cr(e,d,t)&&(d=t=void 0),e=ec(e),void 0===d?(d=e,e=0):d=ec(d),function(u,e,d,t){for(var r=-1,a=rd(Qe((e-u)/(d||1)),0),c=n(a);a--;)c[t?a:++r]=u,u+=d;return c}(e,d,t=void 0===t?ec))return!1;var i=r.get(u);if(i&&r.get(e))return i==e;var o=-1,l=!0,s=2&d?new Bd:void 0;for(r.set(u,e),r.set(e,u);++o-1&&u%1==0&&u1?"& ":"")+e[n],e=e.join(d>2?", ":" "),u.replace(Y,"{\n/* [wrapped with "+e+"] */\n")}(n,function(u,e){return ce(c,(function(d){var n="_."+d[0];e&d[1]&&!le(u,n)&&u.push(n)})),u.sort()}(function(u){var e=u.match(Q);return e?e[1].split(X):[]}(n),d)))}function Er(u){var e=0,d=0;return function(){var n=cd(),t=16-(n-d);if(d=n,t>0){if(++e>=800)return arguments[0]}else e=0;return u.apply(void 0,arguments)}}function xr(u,e){var d=-1,n=u.length,t=n-1;for(e=void 0===e?n:e;++d1?u[e-1]:void 0;return d="function"==typeof d?(u.pop(),d):void 0,qr(u,d)}));function ua(u){var e=Fd(u);return e.__chain__=!0,e}function ea(u,e){return e(u)}var da=Wt((function(u){var e=u.length,d=e?u[0]:0,n=this.__wrapped__,t=function(e){return qd(e,u)};return!(e>1||this.__actions__.length)&&n instanceof Od&&ar(d)?((n=n.slice(d,+d+(e?1:0))).__actions__.push({func:ea,args:[t],thisArg:void 0}),new Sd(n,this.__chain__).thru((function(u){return e&&!u.length&&u.push(void 0),u}))):this.thru(t)}));var na=gt((function(u,e,d){Iu.call(u,d)?++u[d]:Hd(u,d,1)}));var ta=Ct(Or),ra=Ct(jr);function aa(u,e){return(ja(u)?ce:Xd)(u,Vt(e,3))}function ca(u,e){return(ja(u)?fe:un)(u,Vt(e,3))}var fa=gt((function(u,e,d){Iu.call(u,d)?u[d].push(e):Hd(u,d,[e])}));var ia=Mn((function(u,e,d){var t=-1,r="function"==typeof e,a=Na(u)?n(u.length):[];return Xd(u,(function(u){a[++t]=r?re(e,u,d):_n(u,e,d)})),a})),oa=gt((function(u,e,d){Hd(u,d,e)}));function la(u,e){return(ja(u)?pe:Fn)(u,Vt(e,3))}var sa=gt((function(u,e,d){u[d?0:1].push(e)}),(function(){return[[],[]]}));var pa=Mn((function(u,e){if(null==u)return[];var d=e.length;return d>1&&cr(u,e[0],e[1])?e=[]:d>2&&cr(e[0],e[1],e[2])&&(e=[e[0]]),jn(u,tn(e,1),[])})),ma=Ve||function(){return qu.Date.now()};function ha(u,e,d){return e=d?void 0:e,Tt(u,128,void 0,void 0,void 0,void 0,e=u&&null==e?u.length:e)}function ba(u,e){var d;if("function"!=typeof e)throw new _u(r);return u=dc(u),function(){return--u>0&&(d=e.apply(this,arguments)),u<=1&&(e=void 0),d}}var va=Mn((function(u,e,d){var n=1;if(d.length){var t=ze(d,Zt(va));n|=32}return Tt(u,n,e,d,t)})),_a=Mn((function(u,e,d){var n=3;if(d.length){var t=ze(d,Zt(_a));n|=32}return Tt(e,n,u,d,t)}));function ga(u,e,d){var n,t,a,c,f,i,o=0,l=!1,s=!1,p=!0;if("function"!=typeof u)throw new _u(r);function m(e){var d=n,r=t;return n=t=void 0,o=e,c=u.apply(r,d)}function h(u){return o=u,f=gr(v,e),l?m(u):c}function b(u){var d=u-i;return void 0===i||d>=e||d<0||s&&u-o>=a}function v(){var u=ma();if(b(u))return _(u);f=gr(v,function(u){var d=e-(u-i);return s?ad(d,a-(u-o)):d}(u))}function _(u){return f=void 0,p&&n?m(u):(n=t=void 0,c)}function g(){var u=ma(),d=b(u);if(n=arguments,t=this,i=u,d){if(void 0===f)return h(i);if(s)return ot(f),f=gr(v,e),m(i)}return void 0===f&&(f=gr(v,e)),c}return e=tc(e)||0,za(d)&&(l=!!d.leading,a=(s="maxWait"in d)?rd(tc(d.maxWait)||0,e):a,p="trailing"in d?!!d.trailing:p),g.cancel=function(){void 0!==f&&ot(f),o=0,n=i=t=f=void 0},g.flush=function(){return void 0===f?c:_(ma())},g}var Da=Mn((function(u,e){return Yd(u,1,e)})),ya=Mn((function(u,e,d){return Yd(u,tc(e)||0,d)}));function Ea(u,e){if("function"!=typeof u||null!=e&&"function"!=typeof e)throw new _u(r);var d=function(){var n=arguments,t=e?e.apply(this,n):n[0],r=d.cache;if(r.has(t))return r.get(t);var a=u.apply(this,n);return d.cache=r.set(t,a)||r,a};return d.cache=new(Ea.Cache||Nd),d}function xa(u){if("function"!=typeof u)throw new _u(r);return function(){var e=arguments;switch(e.length){case 0:return!u.call(this);case 1:return!u.call(this,e[0]);case 2:return!u.call(this,e[0],e[1]);case 3:return!u.call(this,e[0],e[1],e[2])}return!u.apply(this,e)}}Ea.Cache=Nd;var Ia=ft((function(u,e){var d=(e=1==e.length&&ja(e[0])?pe(e[0],Se(Vt())):pe(tn(e,1),Se(Vt()))).length;return Mn((function(n){for(var t=-1,r=ad(n.length,d);++t=e})),Oa=gn(function(){return arguments}())?gn:function(u){return Ka(u)&&Iu.call(u,"callee")&&!Ju.call(u,"callee")},ja=n.isArray,$a=Xu?Se(Xu):function(u){return Ka(u)&&pn(u)==x};function Na(u){return null!=u&&Ua(u.length)&&!Ta(u)}function Ba(u){return Ka(u)&&Na(u)}var La=ed||tf,Pa=ue?Se(ue):function(u){return Ka(u)&&pn(u)==l};function Ma(u){if(!Ka(u))return!1;var e=pn(u);return e==s||"[object DOMException]"==e||"string"==typeof u.message&&"string"==typeof u.name&&!Ha(u)}function Ta(u){if(!za(u))return!1;var e=pn(u);return e==p||e==m||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Ra(u){return"number"==typeof u&&u==dc(u)}function Ua(u){return"number"==typeof u&&u>-1&&u%1==0&&u<=9007199254740991}function za(u){var e=typeof u;return null!=u&&("object"==e||"function"==e)}function Ka(u){return null!=u&&"object"==typeof u}var Wa=ee?Se(ee):function(u){return Ka(u)&&dr(u)==h};function Ga(u){return"number"==typeof u||Ka(u)&&pn(u)==b}function Ha(u){if(!Ka(u)||pn(u)!=v)return!1;var e=Gu(u);if(null===e)return!0;var d=Iu.call(e,"constructor")&&e.constructor;return"function"==typeof d&&d instanceof d&&xu.call(d)==Au}var qa=de?Se(de):function(u){return Ka(u)&&pn(u)==_};var Ja=ne?Se(ne):function(u){return Ka(u)&&dr(u)==g};function Za(u){return"string"==typeof u||!ja(u)&&Ka(u)&&pn(u)==D}function Va(u){return"symbol"==typeof u||Ka(u)&&pn(u)==y}var Ya=te?Se(te):function(u){return Ka(u)&&Ua(u.length)&&!!Ru[pn(u)]};var Qa=Nt(Cn),Xa=Nt((function(u,e){return u<=e}));function uc(u){if(!u)return[];if(Na(u))return Za(u)?He(u):vt(u);if(Qu&&u[Qu])return function(u){for(var e,d=[];!(e=u.next()).done;)d.push(e.value);return d}(u[Qu]());var e=dr(u);return(e==h?Re:e==g?Ke:Ac)(u)}function ec(u){return u?(u=tc(u))===1/0||u===-1/0?17976931348623157e292*(u<0?-1:1):u==u?u:0:0===u?u:0}function dc(u){var e=ec(u),d=e%1;return e==e?d?e-d:e:0}function nc(u){return u?Jd(dc(u),0,4294967295):0}function tc(u){if("number"==typeof u)return u;if(Va(u))return NaN;if(za(u)){var e="function"==typeof u.valueOf?u.valueOf():u;u=za(e)?e+"":e}if("string"!=typeof u)return 0===u?u:+u;u=u.replace(J,"");var d=ru.test(u);return d||cu.test(u)?Wu(u.slice(2),d?2:8):tu.test(u)?NaN:+u}function rc(u){return _t(u,Dc(u))}function ac(u){return null==u?"":Yn(u)}var cc=Dt((function(u,e){if(lr(e)||Na(e))_t(e,gc(e),u);else for(var d in e)Iu.call(e,d)&&zd(u,d,e[d])})),fc=Dt((function(u,e){_t(e,Dc(e),u)})),ic=Dt((function(u,e,d,n){_t(e,Dc(e),u,n)})),oc=Dt((function(u,e,d,n){_t(e,gc(e),u,n)})),lc=Wt(qd);var sc=Mn((function(u,e){u=hu(u);var d=-1,n=e.length,t=n>2?e[2]:void 0;for(t&&cr(e[0],e[1],t)&&(n=1);++d1),e})),_t(u,Ht(u),d),n&&(d=Zd(d,7,zt));for(var t=e.length;t--;)Xn(d,e[t]);return d}));var Ic=Wt((function(u,e){return null==u?{}:function(u,e){return $n(u,e,(function(e,d){return hc(u,d)}))}(u,e)}));function wc(u,e){if(null==u)return{};var d=pe(Ht(u),(function(u){return[u]}));return e=Vt(e),$n(u,d,(function(u,d){return e(u,d[0])}))}var Cc=Mt(gc),Fc=Mt(Dc);function Ac(u){return null==u?[]:Oe(u,gc(u))}var kc=It((function(u,e,d){return e=e.toLowerCase(),u+(d?Sc(e):e)}));function Sc(u){return Mc(ac(u).toLowerCase())}function Oc(u){return(u=ac(u))&&u.replace(iu,Le).replace($u,"")}var jc=It((function(u,e,d){return u+(d?"-":"")+e.toLowerCase()})),$c=It((function(u,e,d){return u+(d?" ":"")+e.toLowerCase()})),Nc=xt("toLowerCase");var Bc=It((function(u,e,d){return u+(d?"_":"")+e.toLowerCase()}));var Lc=It((function(u,e,d){return u+(d?" ":"")+Mc(e)}));var Pc=It((function(u,e,d){return u+(d?" ":"")+e.toUpperCase()})),Mc=xt("toUpperCase");function Tc(u,e,d){return u=ac(u),void 0===(e=d?void 0:e)?function(u){return Pu.test(u)}(u)?function(u){return u.match(Bu)||[]}(u):function(u){return u.match(uu)||[]}(u):u.match(e)||[]}var Rc=Mn((function(u,e){try{return re(u,void 0,e)}catch(d){return Ma(d)?d:new su(d)}})),Uc=Wt((function(u,e){return ce(e,(function(e){e=wr(e),Hd(u,e,va(u[e],u))})),u}));function zc(u){return function(){return u}}var Kc=Ft(),Wc=Ft(!0);function Gc(u){return u}function Hc(u){return xn("function"==typeof u?u:Zd(u,1))}var qc=Mn((function(u,e){return function(d){return _n(d,u,e)}})),Jc=Mn((function(u,e){return function(d){return _n(u,d,e)}}));function Zc(u,e,d){var n=gc(e),t=on(e,n);null!=d||za(e)&&(t.length||!n.length)||(d=e,e=u,u=this,t=on(e,gc(e)));var r=!(za(d)&&"chain"in d&&!d.chain),a=Ta(u);return ce(t,(function(d){var n=e[d];u[d]=n,a&&(u.prototype[d]=function(){var e=this.__chain__;if(r||e){var d=u(this.__wrapped__),t=d.__actions__=vt(this.__actions__);return t.push({func:n,args:arguments,thisArg:u}),d.__chain__=e,d}return n.apply(u,me([this.value()],arguments))})})),u}function Vc(){}var Yc=Ot(pe),Qc=Ot(ie),Xc=Ot(ve);function uf(u){return fr(u)?we(wr(u)):function(u){return function(e){return ln(e,u)}}(u)}var ef=$t(),df=$t(!0);function nf(){return[]}function tf(){return!1}var rf=St((function(u,e){return u+e}),0),af=Lt("ceil"),cf=St((function(u,e){return u/e}),1),ff=Lt("floor");var of,lf=St((function(u,e){return u*e}),1),sf=Lt("round"),pf=St((function(u,e){return u-e}),0);return Fd.after=function(u,e){if("function"!=typeof e)throw new _u(r);return u=dc(u),function(){if(--u<1)return e.apply(this,arguments)}},Fd.ary=ha,Fd.assign=cc,Fd.assignIn=fc,Fd.assignInWith=ic,Fd.assignWith=oc,Fd.at=lc,Fd.before=ba,Fd.bind=va,Fd.bindAll=Uc,Fd.bindKey=_a,Fd.castArray=function(){if(!arguments.length)return[];var u=arguments[0];return ja(u)?u:[u]},Fd.chain=ua,Fd.chunk=function(u,e,d){e=(d?cr(u,e,d):void 0===e)?1:rd(dc(e),0);var t=null==u?0:u.length;if(!t||e<1)return[];for(var r=0,a=0,c=n(Qe(t/e));rt?0:t+d),(n=void 0===n||n>t?t:dc(n))<0&&(n+=t),n=d>n?0:nc(n);d>>0)?(u=ac(u))&&("string"==typeof e||null!=e&&!qa(e))&&!(e=Yn(e))&&Te(u)?it(He(u),0,d):u.split(e,d):[]},Fd.spread=function(u,e){if("function"!=typeof u)throw new _u(r);return e=null==e?0:rd(dc(e),0),Mn((function(d){var n=d[e],t=it(d,0,e);return n&&me(t,n),re(u,this,t)}))},Fd.tail=function(u){var e=null==u?0:u.length;return e?Gn(u,1,e):[]},Fd.take=function(u,e,d){return u&&u.length?Gn(u,0,(e=d||void 0===e?1:dc(e))<0?0:e):[]},Fd.takeRight=function(u,e,d){var n=null==u?0:u.length;return n?Gn(u,(e=n-(e=d||void 0===e?1:dc(e)))<0?0:e,n):[]},Fd.takeRightWhile=function(u,e){return u&&u.length?et(u,Vt(e,3),!1,!0):[]},Fd.takeWhile=function(u,e){return u&&u.length?et(u,Vt(e,3)):[]},Fd.tap=function(u,e){return e(u),u},Fd.throttle=function(u,e,d){var n=!0,t=!0;if("function"!=typeof u)throw new _u(r);return za(d)&&(n="leading"in d?!!d.leading:n,t="trailing"in d?!!d.trailing:t),ga(u,e,{leading:n,maxWait:e,trailing:t})},Fd.thru=ea,Fd.toArray=uc,Fd.toPairs=Cc,Fd.toPairsIn=Fc,Fd.toPath=function(u){return ja(u)?pe(u,wr):Va(u)?[u]:vt(Ir(ac(u)))},Fd.toPlainObject=rc,Fd.transform=function(u,e,d){var n=ja(u),t=n||La(u)||Ya(u);if(e=Vt(e,4),null==d){var r=u&&u.constructor;d=t?n?new r:[]:za(u)&&Ta(r)?Ad(Gu(u)):{}}return(t?ce:cn)(u,(function(u,n,t){return e(d,u,n,t)})),d},Fd.unary=function(u){return ha(u,1)},Fd.union=Kr,Fd.unionBy=Wr,Fd.unionWith=Gr,Fd.uniq=function(u){return u&&u.length?Qn(u):[]},Fd.uniqBy=function(u,e){return u&&u.length?Qn(u,Vt(e,2)):[]},Fd.uniqWith=function(u,e){return e="function"==typeof e?e:void 0,u&&u.length?Qn(u,void 0,e):[]},Fd.unset=function(u,e){return null==u||Xn(u,e)},Fd.unzip=Hr,Fd.unzipWith=qr,Fd.update=function(u,e,d){return null==u?u:ut(u,e,at(d))},Fd.updateWith=function(u,e,d,n){return n="function"==typeof n?n:void 0,null==u?u:ut(u,e,at(d),n)},Fd.values=Ac,Fd.valuesIn=function(u){return null==u?[]:Oe(u,Dc(u))},Fd.without=Jr,Fd.words=Tc,Fd.wrap=function(u,e){return wa(at(e),u)},Fd.xor=Zr,Fd.xorBy=Vr,Fd.xorWith=Yr,Fd.zip=Qr,Fd.zipObject=function(u,e){return tt(u||[],e||[],zd)},Fd.zipObjectDeep=function(u,e){return tt(u||[],e||[],Un)},Fd.zipWith=Xr,Fd.entries=Cc,Fd.entriesIn=Fc,Fd.extend=fc,Fd.extendWith=ic,Zc(Fd,Fd),Fd.add=rf,Fd.attempt=Rc,Fd.camelCase=kc,Fd.capitalize=Sc,Fd.ceil=af,Fd.clamp=function(u,e,d){return void 0===d&&(d=e,e=void 0),void 0!==d&&(d=(d=tc(d))==d?d:0),void 0!==e&&(e=(e=tc(e))==e?e:0),Jd(tc(u),e,d)},Fd.clone=function(u){return Zd(u,4)},Fd.cloneDeep=function(u){return Zd(u,5)},Fd.cloneDeepWith=function(u,e){return Zd(u,5,e="function"==typeof e?e:void 0)},Fd.cloneWith=function(u,e){return Zd(u,4,e="function"==typeof e?e:void 0)},Fd.conformsTo=function(u,e){return null==e||Vd(u,e,gc(e))},Fd.deburr=Oc,Fd.defaultTo=function(u,e){return null==u||u!=u?e:u},Fd.divide=cf,Fd.endsWith=function(u,e,d){u=ac(u),e=Yn(e);var n=u.length,t=d=void 0===d?n:Jd(dc(d),0,n);return(d-=e.length)>=0&&u.slice(d,t)==e},Fd.eq=Aa,Fd.escape=function(u){return(u=ac(u))&&T.test(u)?u.replace(P,Pe):u},Fd.escapeRegExp=function(u){return(u=ac(u))&&q.test(u)?u.replace(H,"\\$&"):u},Fd.every=function(u,e,d){var n=ja(u)?ie:en;return d&&cr(u,e,d)&&(e=void 0),n(u,Vt(e,3))},Fd.find=ta,Fd.findIndex=Or,Fd.findKey=function(u,e){return ge(u,Vt(e,3),cn)},Fd.findLast=ra,Fd.findLastIndex=jr,Fd.findLastKey=function(u,e){return ge(u,Vt(e,3),fn)},Fd.floor=ff,Fd.forEach=aa,Fd.forEachRight=ca,Fd.forIn=function(u,e){return null==u?u:rn(u,Vt(e,3),Dc)},Fd.forInRight=function(u,e){return null==u?u:an(u,Vt(e,3),Dc)},Fd.forOwn=function(u,e){return u&&cn(u,Vt(e,3))},Fd.forOwnRight=function(u,e){return u&&fn(u,Vt(e,3))},Fd.get=mc,Fd.gt=ka,Fd.gte=Sa,Fd.has=function(u,e){return null!=u&&nr(u,e,hn)},Fd.hasIn=hc,Fd.head=Nr,Fd.identity=Gc,Fd.includes=function(u,e,d,n){u=Na(u)?u:Ac(u),d=d&&!n?dc(d):0;var t=u.length;return d<0&&(d=rd(t+d,0)),Za(u)?d<=t&&u.indexOf(e,d)>-1:!!t&&ye(u,e,d)>-1},Fd.indexOf=function(u,e,d){var n=null==u?0:u.length;if(!n)return-1;var t=null==d?0:dc(d);return t<0&&(t=rd(n+t,0)),ye(u,e,t)},Fd.inRange=function(u,e,d){return e=ec(e),void 0===d?(d=e,e=0):d=ec(d),function(u,e,d){return u>=ad(e,d)&&u=-9007199254740991&&u<=9007199254740991},Fd.isSet=Ja,Fd.isString=Za,Fd.isSymbol=Va,Fd.isTypedArray=Ya,Fd.isUndefined=function(u){return void 0===u},Fd.isWeakMap=function(u){return Ka(u)&&dr(u)==E},Fd.isWeakSet=function(u){return Ka(u)&&"[object WeakSet]"==pn(u)},Fd.join=function(u,e){return null==u?"":nd.call(u,e)},Fd.kebabCase=jc,Fd.last=Mr,Fd.lastIndexOf=function(u,e,d){var n=null==u?0:u.length;if(!n)return-1;var t=n;return void 0!==d&&(t=(t=dc(d))<0?rd(n+t,0):ad(t,n-1)),e==e?function(u,e,d){for(var n=d+1;n--;)if(u[n]===e)return n;return n}(u,e,t):De(u,xe,t,!0)},Fd.lowerCase=$c,Fd.lowerFirst=Nc,Fd.lt=Qa,Fd.lte=Xa,Fd.max=function(u){return u&&u.length?dn(u,Gc,mn):void 0},Fd.maxBy=function(u,e){return u&&u.length?dn(u,Vt(e,2),mn):void 0},Fd.mean=function(u){return Ie(u,Gc)},Fd.meanBy=function(u,e){return Ie(u,Vt(e,2))},Fd.min=function(u){return u&&u.length?dn(u,Gc,Cn):void 0},Fd.minBy=function(u,e){return u&&u.length?dn(u,Vt(e,2),Cn):void 0},Fd.stubArray=nf,Fd.stubFalse=tf,Fd.stubObject=function(){return{}},Fd.stubString=function(){return""},Fd.stubTrue=function(){return!0},Fd.multiply=lf,Fd.nth=function(u,e){return u&&u.length?On(u,dc(e)):void 0},Fd.noConflict=function(){return qu._===this&&(qu._=ku),this},Fd.noop=Vc,Fd.now=ma,Fd.pad=function(u,e,d){u=ac(u);var n=(e=dc(e))?Ge(u):0;if(!e||n>=e)return u;var t=(e-n)/2;return jt(Xe(t),d)+u+jt(Qe(t),d)},Fd.padEnd=function(u,e,d){u=ac(u);var n=(e=dc(e))?Ge(u):0;return e&&ne){var n=u;u=e,e=n}if(d||u%1||e%1){var t=id();return ad(u+t*(e-u+Ku("1e-"+((t+"").length-1))),e)}return Ln(u,e)},Fd.reduce=function(u,e,d){var n=ja(u)?he:Fe,t=arguments.length<3;return n(u,Vt(e,4),d,t,Xd)},Fd.reduceRight=function(u,e,d){var n=ja(u)?be:Fe,t=arguments.length<3;return n(u,Vt(e,4),d,t,un)},Fd.repeat=function(u,e,d){return e=(d?cr(u,e,d):void 0===e)?1:dc(e),Pn(ac(u),e)},Fd.replace=function(){var u=arguments,e=ac(u[0]);return u.length<3?e:e.replace(u[1],u[2])},Fd.result=function(u,e,d){var n=-1,t=(e=ct(e,u)).length;for(t||(t=1,u=void 0);++n9007199254740991)return[];var d=4294967295,n=ad(u,4294967295);u-=4294967295;for(var t=ke(n,e=Vt(e));++d=r)return u;var c=d-Ge(n);if(c<1)return n;var f=a?it(a,0,c).join(""):u.slice(0,c);if(void 0===t)return f+n;if(a&&(c+=f.length-c),qa(t)){if(u.slice(c).search(t)){var i,o=f;for(t.global||(t=bu(t.source,ac(nu.exec(t))+"g")),t.lastIndex=0;i=t.exec(o);)var l=i.index;f=f.slice(0,void 0===l?c:l)}}else if(u.indexOf(Yn(t),c)!=c){var s=f.lastIndexOf(t);s>-1&&(f=f.slice(0,s))}return f+n},Fd.unescape=function(u){return(u=ac(u))&&M.test(u)?u.replace(L,qe):u},Fd.uniqueId=function(u){var e=++wu;return ac(u)+e},Fd.upperCase=Pc,Fd.upperFirst=Mc,Fd.each=aa,Fd.eachRight=ca,Fd.first=Nr,Zc(Fd,(of={},cn(Fd,(function(u,e){Iu.call(Fd.prototype,e)||(of[e]=u)})),of),{chain:!1}),Fd.VERSION="4.17.15",ce(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(u){Fd[u].placeholder=Fd})),ce(["drop","take"],(function(u,e){Od.prototype[u]=function(d){d=void 0===d?1:rd(dc(d),0);var n=this.__filtered__&&!e?new Od(this):this.clone();return n.__filtered__?n.__takeCount__=ad(d,n.__takeCount__):n.__views__.push({size:ad(d,4294967295),type:u+(n.__dir__<0?"Right":"")}),n},Od.prototype[u+"Right"]=function(e){return this.reverse()[u](e).reverse()}})),ce(["filter","map","takeWhile"],(function(u,e){var d=e+1,n=1==d||3==d;Od.prototype[u]=function(u){var e=this.clone();return e.__iteratees__.push({iteratee:Vt(u,3),type:d}),e.__filtered__=e.__filtered__||n,e}})),ce(["head","last"],(function(u,e){var d="take"+(e?"Right":"");Od.prototype[u]=function(){return this[d](1).value()[0]}})),ce(["initial","tail"],(function(u,e){var d="drop"+(e?"":"Right");Od.prototype[u]=function(){return this.__filtered__?new Od(this):this[d](1)}})),Od.prototype.compact=function(){return this.filter(Gc)},Od.prototype.find=function(u){return this.filter(u).head()},Od.prototype.findLast=function(u){return this.reverse().find(u)},Od.prototype.invokeMap=Mn((function(u,e){return"function"==typeof u?new Od(this):this.map((function(d){return _n(d,u,e)}))})),Od.prototype.reject=function(u){return this.filter(xa(Vt(u)))},Od.prototype.slice=function(u,e){u=dc(u);var d=this;return d.__filtered__&&(u>0||e<0)?new Od(d):(u<0?d=d.takeRight(-u):u&&(d=d.drop(u)),void 0!==e&&(d=(e=dc(e))<0?d.dropRight(-e):d.take(e-u)),d)},Od.prototype.takeRightWhile=function(u){return this.reverse().takeWhile(u).reverse()},Od.prototype.toArray=function(){return this.take(4294967295)},cn(Od.prototype,(function(u,e){var d=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),t=Fd[n?"take"+("last"==e?"Right":""):e],r=n||/^find/.test(e);t&&(Fd.prototype[e]=function(){var e=this.__wrapped__,a=n?[1]:arguments,c=e instanceof Od,f=a[0],i=c||ja(e),o=function(u){var e=t.apply(Fd,me([u],a));return n&&l?e[0]:e};i&&d&&"function"==typeof f&&1!=f.length&&(c=i=!1);var l=this.__chain__,s=!!this.__actions__.length,p=r&&!l,m=c&&!s;if(!r&&i){e=m?e:new Od(this);var h=u.apply(e,a);return h.__actions__.push({func:ea,args:[o],thisArg:void 0}),new Sd(h,l)}return p&&m?u.apply(this,a):(h=this.thru(o),p?n?h.value()[0]:h.value():h)})})),ce(["pop","push","shift","sort","splice","unshift"],(function(u){var e=gu[u],d=/^(?:push|sort|unshift)$/.test(u)?"tap":"thru",n=/^(?:pop|shift)$/.test(u);Fd.prototype[u]=function(){var u=arguments;if(n&&!this.__chain__){var t=this.value();return e.apply(ja(t)?t:[],u)}return this[d]((function(d){return e.apply(ja(d)?d:[],u)}))}})),cn(Od.prototype,(function(u,e){var d=Fd[e];if(d){var n=d.name+"";Iu.call(_d,n)||(_d[n]=[]),_d[n].push({name:e,func:d})}})),_d[At(void 0,2).name]=[{name:"wrapper",func:void 0}],Od.prototype.clone=function(){var u=new Od(this.__wrapped__);return u.__actions__=vt(this.__actions__),u.__dir__=this.__dir__,u.__filtered__=this.__filtered__,u.__iteratees__=vt(this.__iteratees__),u.__takeCount__=this.__takeCount__,u.__views__=vt(this.__views__),u},Od.prototype.reverse=function(){if(this.__filtered__){var u=new Od(this);u.__dir__=-1,u.__filtered__=!0}else(u=this.clone()).__dir__*=-1;return u},Od.prototype.value=function(){var u=this.__wrapped__.value(),e=this.__dir__,d=ja(u),n=e<0,t=d?u.length:0,r=function(u,e,d){var n=-1,t=d.length;for(;++n=this.__values__.length;return{done:u,value:u?void 0:this.__values__[this.__index__++]}},Fd.prototype.plant=function(u){for(var e,d=this;d instanceof kd;){var n=Fr(d);n.__index__=0,n.__values__=void 0,e?t.__wrapped__=n:e=n;var t=n;d=d.__wrapped__}return t.__wrapped__=u,e},Fd.prototype.reverse=function(){var u=this.__wrapped__;if(u instanceof Od){var e=u;return this.__actions__.length&&(e=new Od(this)),(e=e.reverse()).__actions__.push({func:ea,args:[zr],thisArg:void 0}),new Sd(e,this.__chain__)}return this.thru(zr)},Fd.prototype.toJSON=Fd.prototype.valueOf=Fd.prototype.value=function(){return dt(this.__wrapped__,this.__actions__)},Fd.prototype.first=Fd.prototype.head,Qu&&(Fd.prototype[Qu]=function(){return this}),Fd}();qu._=Je,void 0===(t=function(){return Je}.call(e,d,e,n))||(n.exports=t)}).call(this)}).call(this,d(76),d(448)(u))},446:function(u,e,d){"use strict";var n=d(0),t=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});e.a=t},447:function(u,e,d){"use strict";d.d(e,"a",(function(){return r}));d(77),d(465),d(431),d(78);var n=d(467),t=d.n(n);function r(u,e){var d=new t.a;return u.map((function(u){var n=u;return"string"==typeof u&&(n={label:u,permalink:"/blog/tags/"+d.slug(u)}),function(u,e){var d=u.label.split(": ",2),n=d[0],t=d[1],r="primary";switch(e){case"blog":case"guides":r=function(u){switch(u){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(n)}return{category:n,count:u.count,label:u.label,permalink:u.permalink,style:r,value:t}}(n,e)}))}},448:function(u,e){u.exports=function(u){return u.webpackPolyfill||(u.deprecate=function(){},u.paths=[],u.children||(u.children=[]),Object.defineProperty(u,"loaded",{enumerable:!0,get:function(){return u.l}}),Object.defineProperty(u,"id",{enumerable:!0,get:function(){return u.i}}),u.webpackPolyfill=1),u}},457:function(u,e,d){var n=d(30),t=d(54),r=d(27),a=d(26),c=d(458);u.exports=function(u,e){var d=1==u,f=2==u,i=3==u,o=4==u,l=6==u,s=5==u||l,p=e||c;return function(e,c,m){for(var h,b,v=r(e),_=t(v),g=n(c,m,3),D=a(_.length),y=0,E=d?p(e,D):f?p(e,0):void 0;D>y;y++)if((s||y in _)&&(b=g(h=_[y],y,v),u))if(d)E[y]=b;else if(b)switch(u){case 3:return!0;case 5:return h;case 6:return y;case 2:E.push(h)}else if(o)return!1;return l?-1:i||o?o:E}}},458:function(u,e,d){var n=d(459);u.exports=function(u,e){return new(n(u))(e)}},459:function(u,e,d){var n=d(13),t=d(460),r=d(2)("species");u.exports=function(u){var e;return t(u)&&("function"!=typeof(e=u.constructor)||e!==Array&&!t(e.prototype)||(e=void 0),n(e)&&null===(e=e[r])&&(e=void 0)),void 0===e?Array:e}},460:function(u,e,d){var n=d(23);u.exports=Array.isArray||function(u){return"Array"==n(u)}},466:function(u,e,d){"use strict";var n=d(0),t=d.n(n),r=d(422),a=d(415),c=d.n(a);e.a=function(u){var e=u.count,d=u.label,n=u.permalink,a=u.style,f=u.value,i=u.valueOnly;return t.a.createElement(r.a,{to:n+"/",className:c()("badge","badge--rounded","badge--"+a)},i?f:d,e&&t.a.createElement(t.a.Fragment,null," (",e,")"))}},467:function(u,e,d){var n=d(468);u.exports=c;var t=Object.hasOwnProperty,r=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function c(){if(!(this instanceof c))return new c;this.reset()}function f(u,e){return"string"!=typeof u?"":(e||(u=u.toLowerCase()),u.trim().replace(a,"").replace(n(),"").replace(r,"-"))}c.prototype.slug=function(u,e){for(var d=f(u,!0===e),n=d;t.call(this.occurrences,d);)this.occurrences[n]++,d=n+"-"+this.occurrences[n];return this.occurrences[d]=0,d},c.prototype.reset=function(){this.occurrences=Object.create(null)},c.slug=f},468:function(u,e){u.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},473:function(u,e,d){"use strict";const n=d(485),t=u=>{if("string"!=typeof u)throw new TypeError("Expected a string");return u=(u=(u=n(u)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+u.slice(1)};u.exports=t,u.exports.default=t},485:function(u,e,d){"use strict";const n=d(486);u.exports=(u,e)=>{if("string"!=typeof u)throw new TypeError("Expected a string");e=void 0===e?"_":e;const d=n("([\\p{Ll}\\d])(\\p{Lu})","g"),t=n("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return u.replace(d,`$1${e}$2`).replace(t,`$1${e}$2`).toLowerCase()}},486:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=l(d(487)),t=l(d(488)),r=l(d(489)),a=l(d(490)),c=l(d(491)),f=l(d(492)),i=l(d(493)),o=l(d(494));function l(u){return u&&u.__esModule?u:{default:u}}(0,t.default)(n.default),(0,r.default)(n.default),(0,a.default)(n.default),(0,c.default)(n.default),(0,f.default)(n.default),(0,i.default)(n.default),(0,o.default)(n.default),e.default=n.default,u.exports=e.default},487:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n={astral:!1},t={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},a={},c={},f=[],i={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},o=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,l=void 0===t.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(u){var e=!0;try{new RegExp("",u)}catch(d){e=!1}return e}var h=m("u"),b=m("y"),v={g:!0,i:!0,m:!0,u:h,y:b};function _(u,e,d,n,t){var r=void 0;if(u.xregexp={captureNames:e},t)return u;if(u.__proto__)u.__proto__=O.prototype;else for(r in O.prototype)u[r]=O.prototype[r];return u.xregexp.source=d,u.xregexp.flags=n?n.split("").sort().join(""):n,u}function g(u){return t.replace.call(u,/([\s\S])(?=[\s\S]*\1)/g,"")}function D(u,e){if(!O.isRegExp(u))throw new TypeError("Type RegExp expected");var d=u.xregexp||{},n=function(u){return s?u.flags:t.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(u))[1]}(u),r="",a="",c=null,f=null;return(e=e||{}).removeG&&(a+="g"),e.removeY&&(a+="y"),a&&(n=t.replace.call(n,new RegExp("["+a+"]+","g"),"")),e.addG&&(r+="g"),e.addY&&(r+="y"),r&&(n=g(n+r)),e.isInternalOnly||(void 0!==d.source&&(c=d.source),null!=d.flags&&(f=r?g(d.flags+r):d.flags)),u=_(new RegExp(e.source||u.source,n),function(u){return!(!u.xregexp||!u.xregexp.captureNames)}(u)?d.captureNames.slice(0):null,c,f,e.isInternalOnly)}function y(u){return parseInt(u,16)}function E(u,e,d){return"("===u.input[u.index-1]||")"===u.input[u.index+u[0].length]||function(u,e,d){return t.test.call(-1!==d.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,u.slice(e))}(u.input,u.index+u[0].length,d)?"":"(?:)"}function x(u){return parseInt(u,10).toString(16)}function I(u,e){return p.call(u)==="[object "+e+"]"}function w(u){for(;u.length<4;)u="0"+u;return u}function C(u){var e={};return I(u,"String")?(O.forEach(u,/[^\s,]+/,(function(u){e[u]=!0})),e):u}function F(u){if(!/^[\w$]$/.test(u))throw new Error("Flag must be a single character A-Za-z0-9_$");v[u]=!0}function A(u,e,d,n,t){for(var r=f.length,a=u[d],c=null,i=void 0,o=void 0;r--;)if(!((o=f[r]).leadChar&&o.leadChar!==a||o.scope!==n&&"all"!==o.scope||o.flag&&-1===e.indexOf(o.flag))&&(i=O.exec(u,o.regex,d,"sticky"))){c={matchLength:i[0].length,output:o.handler.call(t,i,n,e),reparse:o.reparse};break}return c}function k(u){n.astral=u}function S(u){if(null==u)throw new TypeError("Cannot convert null or undefined to object");return u}function O(u,e){if(O.isRegExp(u)){if(void 0!==e)throw new TypeError("Cannot supply flags when copying a RegExp");return D(u)}if(u=void 0===u?"":String(u),e=void 0===e?"":String(e),O.isInstalled("astral")&&-1===e.indexOf("A")&&(e+="A"),c[u]||(c[u]={}),!c[u][e]){for(var d={hasNamedCapture:!1,captureNames:[]},n="default",r="",a=0,f=void 0,o=function(u,e){var d=void 0;if(g(e)!==e)throw new SyntaxError("Invalid duplicate regex flag "+e);for(u=t.replace.call(u,/^\(\?([\w$]+)\)/,(function(u,d){if(t.test.call(/[gy]/,d))throw new SyntaxError("Cannot use flag g or y in mode modifier "+u);return e=g(e+d),""})),d=0;d"}else if(d)return"\\"+(+d+a);return u}if(!I(u,"Array")||!u.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,o=[],l=void 0,s=0;s1&&-1!==d.indexOf("")){var n=D(this,{removeG:!0,isInternalOnly:!0});t.replace.call(String(u).slice(d.index),n,(function(){for(var u=arguments.length,e=Array(u),n=0;nd.index&&(this.lastIndex=d.index)}return this.global||(this.lastIndex=e),d},r.test=function(u){return!!r.exec.call(this,u)},r.match=function(u){if(O.isRegExp(u)){if(u.global){var e=t.match.apply(this,arguments);return u.lastIndex=0,e}}else u=new RegExp(u);return r.exec.call(u,S(this))},r.replace=function(u,e){var d=O.isRegExp(u),n=void 0,r=void 0,a=void 0;return d?(u.xregexp&&(r=u.xregexp.captureNames),n=u.lastIndex):u+="",a=I(e,"Function")?t.replace.call(String(this),u,(function(){for(var n=arguments.length,t=Array(n),a=0;ad.length-3)throw new SyntaxError("Backreference to undefined group "+u);return d[t]||""}throw new SyntaxError("Invalid token "+u)}})),d&&(u.global?u.lastIndex=0:u.lastIndex=n),a},r.split=function(u,e){if(!O.isRegExp(u))return t.split.apply(this,arguments);var d=String(this),n=[],r=u.lastIndex,a=0,c=void 0;return e=(void 0===e?-1:e)>>>0,O.forEach(d,u,(function(u){u.index+u[0].length>a&&(n.push(d.slice(a,u.index)),u.length>1&&u.indexe?n.slice(0,e):n},O.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(u,e){if("B"===u[1]&&"default"===e)return u[0];throw new SyntaxError("Invalid escape "+u[0])}),{scope:"all",leadChar:"\\"}),O.addToken(/\\u{([\dA-Fa-f]+)}/,(function(u,e,d){var n=y(u[1]);if(n>1114111)throw new SyntaxError("Invalid Unicode code point "+u[0]);if(n<=65535)return"\\u"+w(x(n));if(h&&-1!==d.indexOf("u"))return u[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),O.addToken(/\[(\^?)\]/,(function(u){return u[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),O.addToken(/\(\?#[^)]*\)/,E,{leadChar:"("}),O.addToken(/\s+|#[^\n]*\n?/,E,{flag:"x"}),O.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),O.addToken(/\\k<([\w$]+)>/,(function(u){var e=isNaN(u[1])?this.captureNames.indexOf(u[1])+1:+u[1],d=u.index+u[0].length;if(!e||e>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+u[0]);return"\\"+e+(d===u.input.length||isNaN(u.input[d])?"":"(?:)")}),{leadChar:"\\"}),O.addToken(/\\(\d+)/,(function(u,e){if(!("default"===e&&/^[1-9]/.test(u[1])&&+u[1]<=this.captureNames.length)&&"0"!==u[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+u[0]);return u[0]}),{scope:"all",leadChar:"\\"}),O.addToken(/\(\?P?<([\w$]+)>/,(function(u){if(!isNaN(u[1]))throw new SyntaxError("Cannot use integer as capture name "+u[0]);if("length"===u[1]||"__proto__"===u[1])throw new SyntaxError("Cannot use reserved word as capture name "+u[0]);if(-1!==this.captureNames.indexOf(u[1]))throw new SyntaxError("Cannot use same name for multiple groups "+u[0]);return this.captureNames.push(u[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),O.addToken(/\((?!\?)/,(function(u,e,d){return-1!==d.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),e.default=O,u.exports=e.default},488:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){var e=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,d=u.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,e],"g",{conjunction:"or"});function n(u){var e=/^(?:\(\?:\))*\^/,d=/\$(?:\(\?:\))*$/;return e.test(u)&&d.test(u)&&d.test(u.replace(/\\[\s\S]/g,""))?u.replace(e,"").replace(d,""):u}function t(e,d){var n=d?"x":"";return u.isRegExp(e)?e.xregexp&&e.xregexp.captureNames?e:u(e.source,n):u(e,n)}function r(e){return e instanceof RegExp?e:u.escape(e)}function a(u,e,d){return u["subpattern"+d]=e,u}function c(u,e,d){return u+(e1?n-1:0),f=1;f"):f="(?:",h=m,""+f+o[a].pattern.replace(e,(function(u,e,d){if(e){if(c=o[a].names[m-h],++m,c)return"(?<"+c+">"}else if(d)return i=+d-1,o[a].names[i]?"\\k<"+o[a].names[i]+">":"\\"+(+d+h);return u}))+")"}if(t){if(c=_[b],v[++b]=++m,c)return"(?<"+c+">"}else if(r)return _[i=+r-1]?"\\k<"+_[i]+">":"\\"+v[+r];return u}));return u(g,c)}},u.exports=e.default},489:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){function e(u,e,d,n){return{name:u,value:e,start:d,end:n}}u.matchRecursive=function(d,n,t,r,a){a=a||{};var c=-1!==(r=r||"").indexOf("g"),f=-1!==r.indexOf("y"),i=r.replace(/y/g,""),o=a.escapeChar,l=a.valueNames,s=[],p=0,m=0,h=0,b=0,v=void 0,_=void 0,g=void 0,D=void 0,y=void 0;if(n=u(n,i),t=u(t,i),o){if(o.length>1)throw new Error("Cannot use more than one escape character");o=u.escape(o),y=new RegExp("(?:"+o+"[\\S\\s]|(?:(?!"+u.union([n,t],"",{conjunction:"or"}).source+")[^"+o+"])+)+",r.replace(/[^imu]+/g,""))}for(;;){if(o&&(h+=(u.exec(d,y,h,"sticky")||[""])[0].length),g=u.exec(d,n,h),D=u.exec(d,t,h),g&&D&&(g.index<=D.index?D=null:g=null),g||D)h=(m=(g||D).index)+(g||D)[0].length;else if(!p)break;if(f&&!p&&m>b)break;if(g)p||(v=m,_=h),++p;else{if(!D||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(l?(l[0]&&v>b&&s.push(e(l[0],d.slice(b,v),b,v)),l[1]&&s.push(e(l[1],d.slice(v,_),v,_)),l[2]&&s.push(e(l[2],d.slice(_,m),_,m)),l[3]&&s.push(e(l[3],d.slice(m,h),m,h))):s.push(d.slice(_,m)),b=h,!c))break}m===h&&++h}return c&&!f&&l&&l[0]&&d.length>b&&s.push(e(l[0],d.slice(b),b,d.length)),s}},u.exports=e.default},490:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){var e={},d=u._dec,n=u._hex,t=u._pad4;function r(u){return u.replace(/[- _]+/g,"").toLowerCase()}function a(u){var e=/^\\[xu](.+)/.exec(u);return e?d(e[1]):u.charCodeAt("\\"===u[0]?1:0)}function c(d){var r,c,f;return e[d]["b!"]||(e[d]["b!"]=(r=e[d].bmp,c="",f=-1,u.forEach(r,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(u){var e=a(u[1]);e>f+1&&(c+="\\u"+t(n(f+1)),e>f+2&&(c+="-\\u"+t(n(e-1)))),f=a(u[2]||u[1])})),f<65535&&(c+="\\u"+t(n(f+1)),f<65534&&(c+="-\\uFFFF")),c))}function f(u,d){var n=d?"a!":"a=";return e[u][n]||(e[u][n]=function(u,d){var n=e[u],t="";return n.bmp&&!n.isBmpLast&&(t="["+n.bmp+"]"+(n.astral?"|":"")),n.astral&&(t+=n.astral),n.isBmpLast&&n.bmp&&(t+=(n.astral?"|":"")+"["+n.bmp+"]"),d?"(?:(?!"+t+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+t+")"}(u,d))}u.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(u,d,n){var t="P"===u[1]||!!u[2],a=-1!==n.indexOf("A"),i=r(u[4]||u[3]),o=e[i];if("P"===u[1]&&u[2])throw new SyntaxError("Invalid double negation "+u[0]);if(!e.hasOwnProperty(i))throw new SyntaxError("Unknown Unicode token "+u[0]);if(o.inverseOf){if(i=r(o.inverseOf),!e.hasOwnProperty(i))throw new ReferenceError("Unicode token missing data "+u[0]+" -> "+o.inverseOf);o=e[i],t=!t}if(!o.bmp&&!a)throw new SyntaxError("Astral mode required for Unicode token "+u[0]);if(a){if("class"===d)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return f(i,t)}return"class"===d?t?c(i):o.bmp:(t?"[^":"[")+o.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),u.addUnicodeData=function(d){for(var n=void 0,t=0;t\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},u.exports=e.default},493:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){if(!u.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var e=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];e.push({name:"Assigned",inverseOf:"Cn"}),u.addUnicodeData(e)},u.exports=e.default},494:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){if(!u.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");u.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},u.exports=e.default},590:function(u,e,d){u.exports=function(){var u=[],e=[],d={},n={},t={};function r(u){return"string"==typeof u?new RegExp("^"+u+"$","i"):u}function a(u,e){return u===e?e:u===u.toLowerCase()?e.toLowerCase():u===u.toUpperCase()?e.toUpperCase():u[0]===u[0].toUpperCase()?e.charAt(0).toUpperCase()+e.substr(1).toLowerCase():e.toLowerCase()}function c(u,e){return u.replace(/\$(\d{1,2})/g,(function(u,d){return e[d]||""}))}function f(u,e){return u.replace(e[0],(function(d,n){var t=c(e[1],arguments);return a(""===d?u[n-1]:d,t)}))}function i(u,e,n){if(!u.length||d.hasOwnProperty(u))return e;for(var t=n.length;t--;){var r=n[t];if(r[0].test(e))return f(e,r)}return e}function o(u,e,d){return function(n){var t=n.toLowerCase();return e.hasOwnProperty(t)?a(n,t):u.hasOwnProperty(t)?a(n,u[t]):i(t,n,d)}}function l(u,e,d,n){return function(n){var t=n.toLowerCase();return!!e.hasOwnProperty(t)||!u.hasOwnProperty(t)&&i(t,t,d)===t}}function s(u,e,d){return(d?e+" ":"")+(1===e?s.singular(u):s.plural(u))}return s.plural=o(t,n,u),s.isPlural=l(t,n,u),s.singular=o(n,t,e),s.isSingular=l(n,t,e),s.addPluralRule=function(e,d){u.push([r(e),d])},s.addSingularRule=function(u,d){e.push([r(u),d])},s.addUncountableRule=function(u){"string"!=typeof u?(s.addPluralRule(u,"$0"),s.addSingularRule(u,"$0")):d[u.toLowerCase()]=!0},s.addIrregularRule=function(u,e){e=e.toLowerCase(),u=u.toLowerCase(),t[u]=e,n[e]=u},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(u){return s.addIrregularRule(u[0],u[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(u){return s.addPluralRule(u[0],u[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(u){return s.addSingularRule(u[0],u[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[e\xe9]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(s.addUncountableRule),s}()}}]); \ No newline at end of file diff --git a/3116c1fa.ca77b39e.js.LICENSE.txt b/3116c1fa.152b7c26.js.LICENSE.txt similarity index 100% rename from 3116c1fa.ca77b39e.js.LICENSE.txt rename to 3116c1fa.152b7c26.js.LICENSE.txt diff --git a/3116c1fa.ca77b39e.js b/3116c1fa.ca77b39e.js deleted file mode 100644 index 573ec81381..0000000000 --- a/3116c1fa.ca77b39e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 3116c1fa.ca77b39e.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{204:function(u,e,d){"use strict";d.r(e);var n=d(1),t=(d(52),d(420),d(29),d(22),d(21),d(85),d(0)),r=d.n(t),a=d(442),c=d(437),f=(d(422),d(466)),i=d(443),o=d.n(i),l=d(447),s=d(473),p=d.n(s),m=d(590),h=d.n(m),b=Object(a.a)("h2");e.default=function(u){var e=u.tags,d=Object.values(e).map((function(u){return{count:u.count,label:u.name,permalink:u.permalink}})),t=Object(l.a)(d,"guides"),a=o.a.groupBy(t,"category");return r.a.createElement(c.a,{title:"Tags",description:"Qovery guide tags"},r.a.createElement("header",{className:"hero hero--clean"},r.a.createElement("div",{className:"container"},r.a.createElement("h1",null,"All Guide Tags"))),r.a.createElement("main",{className:"container container--xs"},Object.keys(a).map((function(u,e){var d=a[u];return r.a.createElement("section",null,r.a.createElement(b,{id:u.name},h()(p()(u))),d.map((function(u,e){return r.a.createElement("div",null,r.a.createElement(f.a,Object(n.a)({key:e,valueOnly:!0},u)))})))}))))}},415:function(u,e,d){var n;!function(){"use strict";var d={}.hasOwnProperty;function t(){for(var u=[],e=0;e1?arguments[1]:void 0)}}),d(74)("find")},437:function(u,e,d){"use strict";d(449);var n=d(0),t=d.n(n),r=d(450),a=d(435),c=d(1),f=(d(438),d(439),d(451),d(422)),i=d(452),o=d(432),l=d.n(o),s=d(453),p=d.n(s),m=d(428),h=d(415),b=d.n(h),v=d(135),_=d.n(v),g=function(){return t.a.createElement("span",{className:b()(_.a.toggle,_.a.moon)})},D=function(){return t.a.createElement("span",{className:b()(_.a.toggle,_.a.sun)})},y=function(u){var e=Object(m.a)().isClient;return t.a.createElement(p.a,Object(c.a)({disabled:!e,icons:{checked:t.a.createElement(g,null),unchecked:t.a.createElement(D,null)}},u))};function E(){var u=Object(m.a)().siteConfig,e=(void 0===u?{}:u).customFields.metadata.latest_post,d=Date.parse(e.date),n=new Date,t=Math.abs(n-d),r=Math.ceil(t/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),r<30&&(!a||a0&&t.a.createElement("div",{className:"row footer__links"},t.a.createElement("div",{className:"col col--5 footer__col"},t.a.createElement("div",{className:"margin-bottom--md"},t.a.createElement(l.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),t.a.createElement("div",{className:"margin-bottom--md"},t.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),t.a.createElement("div",null,t.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},t.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},t.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},t.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",t.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},t.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),f.map((function(u,e){return t.a.createElement("div",{key:e,className:"col footer__col"},null!=u.title?t.a.createElement("h4",{className:"footer__title"},u.title):null,null!=u.items&&Array.isArray(u.items)&&u.items.length>0?t.a.createElement("ul",{className:"footer__items"},u.items.map((function(u,e){return u.html?t.a.createElement("li",{key:e,className:"footer__item",dangerouslySetInnerHTML:{__html:u.html}}):t.a.createElement("li",{key:u.href||u.to,className:"footer__item"},t.a.createElement(L,u))}))):null)}))),(o||a)&&t.a.createElement("div",{className:"text--center"},o&&o.src&&t.a.createElement("div",{className:"margin-bottom--sm"},o.href?t.a.createElement("a",{href:o.href,target:"_blank",rel:"noopener noreferrer",className:B.a.footerLogoLink},t.a.createElement(P,{alt:o.alt,url:s})):t.a.createElement(P,{alt:o.alt,url:s})),t.a.createElement("small",null,a),t.a.createElement("br",null))))},T=d(454),R=d(455),U=d(3);d(138);e.a=function(u){var e=Object(m.a)().siteConfig,d=void 0===e?{}:e,n=d.favicon,c=(d.tagline,d.title),f=d.themeConfig.image,i=d.url,o=u.children,l=u.title,s=u.noFooter,p=u.description,h=u.image,b=u.keywords,v=(u.permalink,u.version),_=l?l+" | "+c:c,g=h||f,D=i+Object(I.a)(g),y=Object(I.a)(n),E=Object(U.h)(),x=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return t.a.createElement(R.a,null,t.a.createElement(T.a,null,t.a.createElement(a.a,null,t.a.createElement("html",{lang:"en"}),t.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&t.a.createElement("title",null,_),_&&t.a.createElement("meta",{property:"og:title",content:_}),n&&t.a.createElement("link",{rel:"shortcut icon",href:y}),p&&t.a.createElement("meta",{name:"description",content:p}),p&&t.a.createElement("meta",{property:"og:description",content:p}),v&&t.a.createElement("meta",{name:"docsearch:version",content:v}),b&&b.length&&t.a.createElement("meta",{name:"keywords",content:b.join(",")}),g&&t.a.createElement("meta",{property:"og:image",content:D}),g&&t.a.createElement("meta",{property:"twitter:image",content:D}),g&&t.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),x&&t.a.createElement("meta",{property:"og:url",content:x}),t.a.createElement("meta",{name:"twitter:card",content:"summary"}),x&&t.a.createElement("link",{rel:"canonical",href:x})),t.a.createElement(r.a,null),t.a.createElement(j,null),t.a.createElement("div",{className:"main-wrapper"},o),!s&&t.a.createElement(M,null)))}},442:function(u,e,d){"use strict";var n=d(9),t=d(0),r=d.n(t),a=d(415),c=d.n(a),f=d(428),i=(d(139),d(140)),o=d.n(i);e.a=function(u){return function(e){var d,t=e.id,a=Object(n.a)(e,["id"]),i=Object(f.a)().siteConfig,l=(i=void 0===i?{}:i).themeConfig,s=(l=void 0===l?{}:l).navbar,p=(s=void 0===s?{}:s).hideOnScroll,m=void 0!==p&&p;return t?r.a.createElement(u,a,r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:c()("anchor",(d={},d[o.a.enhancedAnchor]=!m,d)),id:t}),r.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+t,title:"Direct link to heading"},"#"),a.children):r.a.createElement(u,a)}}},443:function(u,e,d){(function(u,n){var t;(function(){var r="Expected a function",a="__lodash_placeholder__",c=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],f="[object Arguments]",i="[object Array]",o="[object Boolean]",l="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",b="[object Number]",v="[object Object]",_="[object RegExp]",g="[object Set]",D="[object String]",y="[object Symbol]",E="[object WeakMap]",x="[object ArrayBuffer]",I="[object DataView]",w="[object Float32Array]",C="[object Float64Array]",F="[object Int8Array]",A="[object Int16Array]",k="[object Int32Array]",S="[object Uint8Array]",O="[object Uint16Array]",j="[object Uint32Array]",$=/\b__p \+= '';/g,N=/\b(__p \+=) '' \+/g,B=/(__e\(.*?\)|\b__t\)) \+\n'';/g,L=/&(?:amp|lt|gt|quot|#39);/g,P=/[&<>"']/g,M=RegExp(L.source),T=RegExp(P.source),R=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,K=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,W=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,q=RegExp(H.source),J=/^\s+|\s+$/g,Z=/^\s+/,V=/\s+$/,Y=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Q=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,uu=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,eu=/\\(\\)?/g,du=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nu=/\w*$/,tu=/^[-+]0x[0-9a-f]+$/i,ru=/^0b[01]+$/i,au=/^\[object .+?Constructor\]$/,cu=/^0o[0-7]+$/i,fu=/^(?:0|[1-9]\d*)$/,iu=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ou=/($^)/,lu=/['\n\r\u2028\u2029\\]/g,su="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pu="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",mu="[\\ud800-\\udfff]",hu="["+pu+"]",bu="["+su+"]",vu="\\d+",_u="[\\u2700-\\u27bf]",gu="[a-z\\xdf-\\xf6\\xf8-\\xff]",Du="[^\\ud800-\\udfff"+pu+vu+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",yu="\\ud83c[\\udffb-\\udfff]",Eu="[^\\ud800-\\udfff]",xu="(?:\\ud83c[\\udde6-\\uddff]){2}",Iu="[\\ud800-\\udbff][\\udc00-\\udfff]",wu="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Cu="(?:"+gu+"|"+Du+")",Fu="(?:"+wu+"|"+Du+")",Au="(?:"+bu+"|"+yu+")"+"?",ku="[\\ufe0e\\ufe0f]?"+Au+("(?:\\u200d(?:"+[Eu,xu,Iu].join("|")+")[\\ufe0e\\ufe0f]?"+Au+")*"),Su="(?:"+[_u,xu,Iu].join("|")+")"+ku,Ou="(?:"+[Eu+bu+"?",bu,xu,Iu,mu].join("|")+")",ju=RegExp("['\u2019]","g"),$u=RegExp(bu,"g"),Nu=RegExp(yu+"(?="+yu+")|"+Ou+ku,"g"),Bu=RegExp([wu+"?"+gu+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[hu,wu,"$"].join("|")+")",Fu+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[hu,wu+Cu,"$"].join("|")+")",wu+"?"+Cu+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",wu+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",vu,Su].join("|"),"g"),Lu=RegExp("[\\u200d\\ud800-\\udfff"+su+"\\ufe0e\\ufe0f]"),Pu=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Mu=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Tu=-1,Ru={};Ru[w]=Ru[C]=Ru[F]=Ru[A]=Ru[k]=Ru[S]=Ru["[object Uint8ClampedArray]"]=Ru[O]=Ru[j]=!0,Ru[f]=Ru[i]=Ru[x]=Ru[o]=Ru[I]=Ru[l]=Ru[s]=Ru[p]=Ru[h]=Ru[b]=Ru[v]=Ru[_]=Ru[g]=Ru[D]=Ru[E]=!1;var Uu={};Uu[f]=Uu[i]=Uu[x]=Uu[I]=Uu[o]=Uu[l]=Uu[w]=Uu[C]=Uu[F]=Uu[A]=Uu[k]=Uu[h]=Uu[b]=Uu[v]=Uu[_]=Uu[g]=Uu[D]=Uu[y]=Uu[S]=Uu["[object Uint8ClampedArray]"]=Uu[O]=Uu[j]=!0,Uu[s]=Uu[p]=Uu[E]=!1;var zu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ku=parseFloat,Wu=parseInt,Gu="object"==typeof u&&u&&u.Object===Object&&u,Hu="object"==typeof self&&self&&self.Object===Object&&self,qu=Gu||Hu||Function("return this")(),Ju=e&&!e.nodeType&&e,Zu=Ju&&"object"==typeof n&&n&&!n.nodeType&&n,Vu=Zu&&Zu.exports===Ju,Yu=Vu&&Gu.process,Qu=function(){try{var u=Zu&&Zu.require&&Zu.require("util").types;return u||Yu&&Yu.binding&&Yu.binding("util")}catch(e){}}(),Xu=Qu&&Qu.isArrayBuffer,ue=Qu&&Qu.isDate,ee=Qu&&Qu.isMap,de=Qu&&Qu.isRegExp,ne=Qu&&Qu.isSet,te=Qu&&Qu.isTypedArray;function re(u,e,d){switch(d.length){case 0:return u.call(e);case 1:return u.call(e,d[0]);case 2:return u.call(e,d[0],d[1]);case 3:return u.call(e,d[0],d[1],d[2])}return u.apply(e,d)}function ae(u,e,d,n){for(var t=-1,r=null==u?0:u.length;++t-1}function se(u,e,d){for(var n=-1,t=null==u?0:u.length;++n-1;);return d}function Ne(u,e){for(var d=u.length;d--&&ye(e,u[d],0)>-1;);return d}function Be(u,e){for(var d=u.length,n=0;d--;)u[d]===e&&++n;return n}var Le=Ce({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Pe=Ce({"&":"&","<":"<",">":">",'"':""","'":"'"});function Me(u){return"\\"+zu[u]}function Te(u){return Lu.test(u)}function Re(u){var e=-1,d=Array(u.size);return u.forEach((function(u,n){d[++e]=[n,u]})),d}function Ue(u,e){return function(d){return u(e(d))}}function ze(u,e){for(var d=-1,n=u.length,t=0,r=[];++d",""":'"',"'":"'"});var Je=function u(e){var d,n=(e=null==e?qu:Je.defaults(qu.Object(),e,Je.pick(qu,Mu))).Array,t=e.Date,su=e.Error,pu=e.Function,mu=e.Math,hu=e.Object,bu=e.RegExp,vu=e.String,_u=e.TypeError,gu=n.prototype,Du=pu.prototype,yu=hu.prototype,Eu=e["__core-js_shared__"],xu=Du.toString,Iu=yu.hasOwnProperty,wu=0,Cu=(d=/[^.]+$/.exec(Eu&&Eu.keys&&Eu.keys.IE_PROTO||""))?"Symbol(src)_1."+d:"",Fu=yu.toString,Au=xu.call(hu),ku=qu._,Su=bu("^"+xu.call(Iu).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ou=Vu?e.Buffer:void 0,Nu=e.Symbol,Lu=e.Uint8Array,zu=Ou?Ou.allocUnsafe:void 0,Gu=Ue(hu.getPrototypeOf,hu),Hu=hu.create,Ju=yu.propertyIsEnumerable,Zu=gu.splice,Yu=Nu?Nu.isConcatSpreadable:void 0,Qu=Nu?Nu.iterator:void 0,_e=Nu?Nu.toStringTag:void 0,Ce=function(){try{var u=Xt(hu,"defineProperty");return u({},"",{}),u}catch(e){}}(),Ze=e.clearTimeout!==qu.clearTimeout&&e.clearTimeout,Ve=t&&t.now!==qu.Date.now&&t.now,Ye=e.setTimeout!==qu.setTimeout&&e.setTimeout,Qe=mu.ceil,Xe=mu.floor,ud=hu.getOwnPropertySymbols,ed=Ou?Ou.isBuffer:void 0,dd=e.isFinite,nd=gu.join,td=Ue(hu.keys,hu),rd=mu.max,ad=mu.min,cd=t.now,fd=e.parseInt,id=mu.random,od=gu.reverse,ld=Xt(e,"DataView"),sd=Xt(e,"Map"),pd=Xt(e,"Promise"),md=Xt(e,"Set"),hd=Xt(e,"WeakMap"),bd=Xt(hu,"create"),vd=hd&&new hd,_d={},gd=Cr(ld),Dd=Cr(sd),yd=Cr(pd),Ed=Cr(md),xd=Cr(hd),Id=Nu?Nu.prototype:void 0,wd=Id?Id.valueOf:void 0,Cd=Id?Id.toString:void 0;function Fd(u){if(Ka(u)&&!ja(u)&&!(u instanceof Od)){if(u instanceof Sd)return u;if(Iu.call(u,"__wrapped__"))return Fr(u)}return new Sd(u)}var Ad=function(){function u(){}return function(e){if(!za(e))return{};if(Hu)return Hu(e);u.prototype=e;var d=new u;return u.prototype=void 0,d}}();function kd(){}function Sd(u,e){this.__wrapped__=u,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function Od(u){this.__wrapped__=u,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function jd(u){var e=-1,d=null==u?0:u.length;for(this.clear();++e=e?u:e)),u}function Zd(u,e,d,n,t,r){var a,c=1&e,i=2&e,s=4&e;if(d&&(a=t?d(u,n,t,r):d(u)),void 0!==a)return a;if(!za(u))return u;var E=ja(u);if(E){if(a=function(u){var e=u.length,d=new u.constructor(e);e&&"string"==typeof u[0]&&Iu.call(u,"index")&&(d.index=u.index,d.input=u.input);return d}(u),!c)return vt(u,a)}else{var $=dr(u),N=$==p||$==m;if(La(u))return lt(u,c);if($==v||$==f||N&&!t){if(a=i||N?{}:tr(u),!c)return i?function(u,e){return _t(u,er(u),e)}(u,function(u,e){return u&&_t(e,Dc(e),u)}(a,u)):function(u,e){return _t(u,ur(u),e)}(u,Gd(a,u))}else{if(!Uu[$])return t?u:{};a=function(u,e,d){var n=u.constructor;switch(e){case x:return st(u);case o:case l:return new n(+u);case I:return function(u,e){var d=e?st(u.buffer):u.buffer;return new u.constructor(d,u.byteOffset,u.byteLength)}(u,d);case w:case C:case F:case A:case k:case S:case"[object Uint8ClampedArray]":case O:case j:return pt(u,d);case h:return new n;case b:case D:return new n(u);case _:return function(u){var e=new u.constructor(u.source,nu.exec(u));return e.lastIndex=u.lastIndex,e}(u);case g:return new n;case y:return t=u,wd?hu(wd.call(t)):{}}var t}(u,$,c)}}r||(r=new Ld);var B=r.get(u);if(B)return B;r.set(u,a),Ja(u)?u.forEach((function(n){a.add(Zd(n,e,d,n,u,r))})):Wa(u)&&u.forEach((function(n,t){a.set(t,Zd(n,e,d,t,u,r))}));var L=E?void 0:(s?i?Ht:Gt:i?Dc:gc)(u);return ce(L||u,(function(n,t){L&&(n=u[t=n]),zd(a,t,Zd(n,e,d,t,u,r))})),a}function Vd(u,e,d){var n=d.length;if(null==u)return!n;for(u=hu(u);n--;){var t=d[n],r=e[t],a=u[t];if(void 0===a&&!(t in u)||!r(a))return!1}return!0}function Yd(u,e,d){if("function"!=typeof u)throw new _u(r);return gr((function(){u.apply(void 0,d)}),e)}function Qd(u,e,d,n){var t=-1,r=le,a=!0,c=u.length,f=[],i=e.length;if(!c)return f;d&&(e=pe(e,Se(d))),n?(r=se,a=!1):e.length>=200&&(r=je,a=!1,e=new Bd(e));u:for(;++t-1},$d.prototype.set=function(u,e){var d=this.__data__,n=Kd(d,u);return n<0?(++this.size,d.push([u,e])):d[n][1]=e,this},Nd.prototype.clear=function(){this.size=0,this.__data__={hash:new jd,map:new(sd||$d),string:new jd}},Nd.prototype.delete=function(u){var e=Yt(this,u).delete(u);return this.size-=e?1:0,e},Nd.prototype.get=function(u){return Yt(this,u).get(u)},Nd.prototype.has=function(u){return Yt(this,u).has(u)},Nd.prototype.set=function(u,e){var d=Yt(this,u),n=d.size;return d.set(u,e),this.size+=d.size==n?0:1,this},Bd.prototype.add=Bd.prototype.push=function(u){return this.__data__.set(u,"__lodash_hash_undefined__"),this},Bd.prototype.has=function(u){return this.__data__.has(u)},Ld.prototype.clear=function(){this.__data__=new $d,this.size=0},Ld.prototype.delete=function(u){var e=this.__data__,d=e.delete(u);return this.size=e.size,d},Ld.prototype.get=function(u){return this.__data__.get(u)},Ld.prototype.has=function(u){return this.__data__.has(u)},Ld.prototype.set=function(u,e){var d=this.__data__;if(d instanceof $d){var n=d.__data__;if(!sd||n.length<199)return n.push([u,e]),this.size=++d.size,this;d=this.__data__=new Nd(n)}return d.set(u,e),this.size=d.size,this};var Xd=yt(cn),un=yt(fn,!0);function en(u,e){var d=!0;return Xd(u,(function(u,n,t){return d=!!e(u,n,t)})),d}function dn(u,e,d){for(var n=-1,t=u.length;++n0&&d(c)?e>1?tn(c,e-1,d,n,t):me(t,c):n||(t[t.length]=c)}return t}var rn=Et(),an=Et(!0);function cn(u,e){return u&&rn(u,e,gc)}function fn(u,e){return u&&an(u,e,gc)}function on(u,e){return oe(e,(function(e){return Ta(u[e])}))}function ln(u,e){for(var d=0,n=(e=ct(e,u)).length;null!=u&&de}function hn(u,e){return null!=u&&Iu.call(u,e)}function bn(u,e){return null!=u&&e in hu(u)}function vn(u,e,d){for(var t=d?se:le,r=u[0].length,a=u.length,c=a,f=n(a),i=1/0,o=[];c--;){var l=u[c];c&&e&&(l=pe(l,Se(e))),i=ad(l.length,i),f[c]=!d&&(e||r>=120&&l.length>=120)?new Bd(c&&l):void 0}l=u[0];var s=-1,p=f[0];u:for(;++s=c)return f;var i=d[n];return f*("desc"==i?-1:1)}}return u.index-e.index}(u,e,d)}))}function $n(u,e,d){for(var n=-1,t=e.length,r={};++n-1;)c!==u&&Zu.call(c,f,1),Zu.call(u,f,1);return u}function Bn(u,e){for(var d=u?e.length:0,n=d-1;d--;){var t=e[d];if(d==n||t!==r){var r=t;ar(t)?Zu.call(u,t,1):Xn(u,t)}}return u}function Ln(u,e){return u+Xe(id()*(e-u+1))}function Pn(u,e){var d="";if(!u||e<1||e>9007199254740991)return d;do{e%2&&(d+=u),(e=Xe(e/2))&&(u+=u)}while(e);return d}function Mn(u,e){return Dr(mr(u,e,Gc),u+"")}function Tn(u){return Md(Ac(u))}function Rn(u,e){var d=Ac(u);return xr(d,Jd(e,0,d.length))}function Un(u,e,d,n){if(!za(u))return u;for(var t=-1,r=(e=ct(e,u)).length,a=r-1,c=u;null!=c&&++tr?0:r+e),(d=d>r?r:d)<0&&(d+=r),r=e>d?0:d-e>>>0,e>>>=0;for(var a=n(r);++t>>1,a=u[r];null!==a&&!Va(a)&&(d?a<=e:a=200){var i=e?null:Pt(u);if(i)return Ke(i);a=!1,t=je,f=new Bd}else f=e?[]:c;u:for(;++n=n?u:Gn(u,e,d)}var ot=Ze||function(u){return qu.clearTimeout(u)};function lt(u,e){if(e)return u.slice();var d=u.length,n=zu?zu(d):new u.constructor(d);return u.copy(n),n}function st(u){var e=new u.constructor(u.byteLength);return new Lu(e).set(new Lu(u)),e}function pt(u,e){var d=e?st(u.buffer):u.buffer;return new u.constructor(d,u.byteOffset,u.length)}function mt(u,e){if(u!==e){var d=void 0!==u,n=null===u,t=u==u,r=Va(u),a=void 0!==e,c=null===e,f=e==e,i=Va(e);if(!c&&!i&&!r&&u>e||r&&a&&f&&!c&&!i||n&&a&&f||!d&&f||!t)return 1;if(!n&&!r&&!i&&u1?d[t-1]:void 0,a=t>2?d[2]:void 0;for(r=u.length>3&&"function"==typeof r?(t--,r):void 0,a&&cr(d[0],d[1],a)&&(r=t<3?void 0:r,t=1),e=hu(e);++n-1?t[r?e[a]:a]:void 0}}function Ft(u){return Wt((function(e){var d=e.length,n=d,t=Sd.prototype.thru;for(u&&e.reverse();n--;){var a=e[n];if("function"!=typeof a)throw new _u(r);if(t&&!c&&"wrapper"==Jt(a))var c=new Sd([],!0)}for(n=c?n:d;++n1&&g.reverse(),l&&i<_&&(g.length=i),this&&this!==qu&&this instanceof v&&(w=b||wt(w)),w.apply(I,g)}}function kt(u,e){return function(d,n){return function(u,e,d,n){return cn(u,(function(u,t,r){e(n,d(u),t,r)})),n}(d,u,e(n),{})}}function St(u,e){return function(d,n){var t;if(void 0===d&&void 0===n)return e;if(void 0!==d&&(t=d),void 0!==n){if(void 0===t)return n;"string"==typeof d||"string"==typeof n?(d=Yn(d),n=Yn(n)):(d=Vn(d),n=Vn(n)),t=u(d,n)}return t}}function Ot(u){return Wt((function(e){return e=pe(e,Se(Vt())),Mn((function(d){var n=this;return u(e,(function(u){return re(u,n,d)}))}))}))}function jt(u,e){var d=(e=void 0===e?" ":Yn(e)).length;if(d<2)return d?Pn(e,u):e;var n=Pn(e,Qe(u/Ge(e)));return Te(e)?it(He(n),0,u).join(""):n.slice(0,u)}function $t(u){return function(e,d,t){return t&&"number"!=typeof t&&cr(e,d,t)&&(d=t=void 0),e=ec(e),void 0===d?(d=e,e=0):d=ec(d),function(u,e,d,t){for(var r=-1,a=rd(Qe((e-u)/(d||1)),0),c=n(a);a--;)c[t?a:++r]=u,u+=d;return c}(e,d,t=void 0===t?ec))return!1;var i=r.get(u);if(i&&r.get(e))return i==e;var o=-1,l=!0,s=2&d?new Bd:void 0;for(r.set(u,e),r.set(e,u);++o-1&&u%1==0&&u1?"& ":"")+e[n],e=e.join(d>2?", ":" "),u.replace(Y,"{\n/* [wrapped with "+e+"] */\n")}(n,function(u,e){return ce(c,(function(d){var n="_."+d[0];e&d[1]&&!le(u,n)&&u.push(n)})),u.sort()}(function(u){var e=u.match(Q);return e?e[1].split(X):[]}(n),d)))}function Er(u){var e=0,d=0;return function(){var n=cd(),t=16-(n-d);if(d=n,t>0){if(++e>=800)return arguments[0]}else e=0;return u.apply(void 0,arguments)}}function xr(u,e){var d=-1,n=u.length,t=n-1;for(e=void 0===e?n:e;++d1?u[e-1]:void 0;return d="function"==typeof d?(u.pop(),d):void 0,qr(u,d)}));function ua(u){var e=Fd(u);return e.__chain__=!0,e}function ea(u,e){return e(u)}var da=Wt((function(u){var e=u.length,d=e?u[0]:0,n=this.__wrapped__,t=function(e){return qd(e,u)};return!(e>1||this.__actions__.length)&&n instanceof Od&&ar(d)?((n=n.slice(d,+d+(e?1:0))).__actions__.push({func:ea,args:[t],thisArg:void 0}),new Sd(n,this.__chain__).thru((function(u){return e&&!u.length&&u.push(void 0),u}))):this.thru(t)}));var na=gt((function(u,e,d){Iu.call(u,d)?++u[d]:Hd(u,d,1)}));var ta=Ct(Or),ra=Ct(jr);function aa(u,e){return(ja(u)?ce:Xd)(u,Vt(e,3))}function ca(u,e){return(ja(u)?fe:un)(u,Vt(e,3))}var fa=gt((function(u,e,d){Iu.call(u,d)?u[d].push(e):Hd(u,d,[e])}));var ia=Mn((function(u,e,d){var t=-1,r="function"==typeof e,a=Na(u)?n(u.length):[];return Xd(u,(function(u){a[++t]=r?re(e,u,d):_n(u,e,d)})),a})),oa=gt((function(u,e,d){Hd(u,d,e)}));function la(u,e){return(ja(u)?pe:Fn)(u,Vt(e,3))}var sa=gt((function(u,e,d){u[d?0:1].push(e)}),(function(){return[[],[]]}));var pa=Mn((function(u,e){if(null==u)return[];var d=e.length;return d>1&&cr(u,e[0],e[1])?e=[]:d>2&&cr(e[0],e[1],e[2])&&(e=[e[0]]),jn(u,tn(e,1),[])})),ma=Ve||function(){return qu.Date.now()};function ha(u,e,d){return e=d?void 0:e,Tt(u,128,void 0,void 0,void 0,void 0,e=u&&null==e?u.length:e)}function ba(u,e){var d;if("function"!=typeof e)throw new _u(r);return u=dc(u),function(){return--u>0&&(d=e.apply(this,arguments)),u<=1&&(e=void 0),d}}var va=Mn((function(u,e,d){var n=1;if(d.length){var t=ze(d,Zt(va));n|=32}return Tt(u,n,e,d,t)})),_a=Mn((function(u,e,d){var n=3;if(d.length){var t=ze(d,Zt(_a));n|=32}return Tt(e,n,u,d,t)}));function ga(u,e,d){var n,t,a,c,f,i,o=0,l=!1,s=!1,p=!0;if("function"!=typeof u)throw new _u(r);function m(e){var d=n,r=t;return n=t=void 0,o=e,c=u.apply(r,d)}function h(u){return o=u,f=gr(v,e),l?m(u):c}function b(u){var d=u-i;return void 0===i||d>=e||d<0||s&&u-o>=a}function v(){var u=ma();if(b(u))return _(u);f=gr(v,function(u){var d=e-(u-i);return s?ad(d,a-(u-o)):d}(u))}function _(u){return f=void 0,p&&n?m(u):(n=t=void 0,c)}function g(){var u=ma(),d=b(u);if(n=arguments,t=this,i=u,d){if(void 0===f)return h(i);if(s)return ot(f),f=gr(v,e),m(i)}return void 0===f&&(f=gr(v,e)),c}return e=tc(e)||0,za(d)&&(l=!!d.leading,a=(s="maxWait"in d)?rd(tc(d.maxWait)||0,e):a,p="trailing"in d?!!d.trailing:p),g.cancel=function(){void 0!==f&&ot(f),o=0,n=i=t=f=void 0},g.flush=function(){return void 0===f?c:_(ma())},g}var Da=Mn((function(u,e){return Yd(u,1,e)})),ya=Mn((function(u,e,d){return Yd(u,tc(e)||0,d)}));function Ea(u,e){if("function"!=typeof u||null!=e&&"function"!=typeof e)throw new _u(r);var d=function(){var n=arguments,t=e?e.apply(this,n):n[0],r=d.cache;if(r.has(t))return r.get(t);var a=u.apply(this,n);return d.cache=r.set(t,a)||r,a};return d.cache=new(Ea.Cache||Nd),d}function xa(u){if("function"!=typeof u)throw new _u(r);return function(){var e=arguments;switch(e.length){case 0:return!u.call(this);case 1:return!u.call(this,e[0]);case 2:return!u.call(this,e[0],e[1]);case 3:return!u.call(this,e[0],e[1],e[2])}return!u.apply(this,e)}}Ea.Cache=Nd;var Ia=ft((function(u,e){var d=(e=1==e.length&&ja(e[0])?pe(e[0],Se(Vt())):pe(tn(e,1),Se(Vt()))).length;return Mn((function(n){for(var t=-1,r=ad(n.length,d);++t=e})),Oa=gn(function(){return arguments}())?gn:function(u){return Ka(u)&&Iu.call(u,"callee")&&!Ju.call(u,"callee")},ja=n.isArray,$a=Xu?Se(Xu):function(u){return Ka(u)&&pn(u)==x};function Na(u){return null!=u&&Ua(u.length)&&!Ta(u)}function Ba(u){return Ka(u)&&Na(u)}var La=ed||tf,Pa=ue?Se(ue):function(u){return Ka(u)&&pn(u)==l};function Ma(u){if(!Ka(u))return!1;var e=pn(u);return e==s||"[object DOMException]"==e||"string"==typeof u.message&&"string"==typeof u.name&&!Ha(u)}function Ta(u){if(!za(u))return!1;var e=pn(u);return e==p||e==m||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Ra(u){return"number"==typeof u&&u==dc(u)}function Ua(u){return"number"==typeof u&&u>-1&&u%1==0&&u<=9007199254740991}function za(u){var e=typeof u;return null!=u&&("object"==e||"function"==e)}function Ka(u){return null!=u&&"object"==typeof u}var Wa=ee?Se(ee):function(u){return Ka(u)&&dr(u)==h};function Ga(u){return"number"==typeof u||Ka(u)&&pn(u)==b}function Ha(u){if(!Ka(u)||pn(u)!=v)return!1;var e=Gu(u);if(null===e)return!0;var d=Iu.call(e,"constructor")&&e.constructor;return"function"==typeof d&&d instanceof d&&xu.call(d)==Au}var qa=de?Se(de):function(u){return Ka(u)&&pn(u)==_};var Ja=ne?Se(ne):function(u){return Ka(u)&&dr(u)==g};function Za(u){return"string"==typeof u||!ja(u)&&Ka(u)&&pn(u)==D}function Va(u){return"symbol"==typeof u||Ka(u)&&pn(u)==y}var Ya=te?Se(te):function(u){return Ka(u)&&Ua(u.length)&&!!Ru[pn(u)]};var Qa=Nt(Cn),Xa=Nt((function(u,e){return u<=e}));function uc(u){if(!u)return[];if(Na(u))return Za(u)?He(u):vt(u);if(Qu&&u[Qu])return function(u){for(var e,d=[];!(e=u.next()).done;)d.push(e.value);return d}(u[Qu]());var e=dr(u);return(e==h?Re:e==g?Ke:Ac)(u)}function ec(u){return u?(u=tc(u))===1/0||u===-1/0?17976931348623157e292*(u<0?-1:1):u==u?u:0:0===u?u:0}function dc(u){var e=ec(u),d=e%1;return e==e?d?e-d:e:0}function nc(u){return u?Jd(dc(u),0,4294967295):0}function tc(u){if("number"==typeof u)return u;if(Va(u))return NaN;if(za(u)){var e="function"==typeof u.valueOf?u.valueOf():u;u=za(e)?e+"":e}if("string"!=typeof u)return 0===u?u:+u;u=u.replace(J,"");var d=ru.test(u);return d||cu.test(u)?Wu(u.slice(2),d?2:8):tu.test(u)?NaN:+u}function rc(u){return _t(u,Dc(u))}function ac(u){return null==u?"":Yn(u)}var cc=Dt((function(u,e){if(lr(e)||Na(e))_t(e,gc(e),u);else for(var d in e)Iu.call(e,d)&&zd(u,d,e[d])})),fc=Dt((function(u,e){_t(e,Dc(e),u)})),ic=Dt((function(u,e,d,n){_t(e,Dc(e),u,n)})),oc=Dt((function(u,e,d,n){_t(e,gc(e),u,n)})),lc=Wt(qd);var sc=Mn((function(u,e){u=hu(u);var d=-1,n=e.length,t=n>2?e[2]:void 0;for(t&&cr(e[0],e[1],t)&&(n=1);++d1),e})),_t(u,Ht(u),d),n&&(d=Zd(d,7,zt));for(var t=e.length;t--;)Xn(d,e[t]);return d}));var Ic=Wt((function(u,e){return null==u?{}:function(u,e){return $n(u,e,(function(e,d){return hc(u,d)}))}(u,e)}));function wc(u,e){if(null==u)return{};var d=pe(Ht(u),(function(u){return[u]}));return e=Vt(e),$n(u,d,(function(u,d){return e(u,d[0])}))}var Cc=Mt(gc),Fc=Mt(Dc);function Ac(u){return null==u?[]:Oe(u,gc(u))}var kc=It((function(u,e,d){return e=e.toLowerCase(),u+(d?Sc(e):e)}));function Sc(u){return Mc(ac(u).toLowerCase())}function Oc(u){return(u=ac(u))&&u.replace(iu,Le).replace($u,"")}var jc=It((function(u,e,d){return u+(d?"-":"")+e.toLowerCase()})),$c=It((function(u,e,d){return u+(d?" ":"")+e.toLowerCase()})),Nc=xt("toLowerCase");var Bc=It((function(u,e,d){return u+(d?"_":"")+e.toLowerCase()}));var Lc=It((function(u,e,d){return u+(d?" ":"")+Mc(e)}));var Pc=It((function(u,e,d){return u+(d?" ":"")+e.toUpperCase()})),Mc=xt("toUpperCase");function Tc(u,e,d){return u=ac(u),void 0===(e=d?void 0:e)?function(u){return Pu.test(u)}(u)?function(u){return u.match(Bu)||[]}(u):function(u){return u.match(uu)||[]}(u):u.match(e)||[]}var Rc=Mn((function(u,e){try{return re(u,void 0,e)}catch(d){return Ma(d)?d:new su(d)}})),Uc=Wt((function(u,e){return ce(e,(function(e){e=wr(e),Hd(u,e,va(u[e],u))})),u}));function zc(u){return function(){return u}}var Kc=Ft(),Wc=Ft(!0);function Gc(u){return u}function Hc(u){return xn("function"==typeof u?u:Zd(u,1))}var qc=Mn((function(u,e){return function(d){return _n(d,u,e)}})),Jc=Mn((function(u,e){return function(d){return _n(u,d,e)}}));function Zc(u,e,d){var n=gc(e),t=on(e,n);null!=d||za(e)&&(t.length||!n.length)||(d=e,e=u,u=this,t=on(e,gc(e)));var r=!(za(d)&&"chain"in d&&!d.chain),a=Ta(u);return ce(t,(function(d){var n=e[d];u[d]=n,a&&(u.prototype[d]=function(){var e=this.__chain__;if(r||e){var d=u(this.__wrapped__),t=d.__actions__=vt(this.__actions__);return t.push({func:n,args:arguments,thisArg:u}),d.__chain__=e,d}return n.apply(u,me([this.value()],arguments))})})),u}function Vc(){}var Yc=Ot(pe),Qc=Ot(ie),Xc=Ot(ve);function uf(u){return fr(u)?we(wr(u)):function(u){return function(e){return ln(e,u)}}(u)}var ef=$t(),df=$t(!0);function nf(){return[]}function tf(){return!1}var rf=St((function(u,e){return u+e}),0),af=Lt("ceil"),cf=St((function(u,e){return u/e}),1),ff=Lt("floor");var of,lf=St((function(u,e){return u*e}),1),sf=Lt("round"),pf=St((function(u,e){return u-e}),0);return Fd.after=function(u,e){if("function"!=typeof e)throw new _u(r);return u=dc(u),function(){if(--u<1)return e.apply(this,arguments)}},Fd.ary=ha,Fd.assign=cc,Fd.assignIn=fc,Fd.assignInWith=ic,Fd.assignWith=oc,Fd.at=lc,Fd.before=ba,Fd.bind=va,Fd.bindAll=Uc,Fd.bindKey=_a,Fd.castArray=function(){if(!arguments.length)return[];var u=arguments[0];return ja(u)?u:[u]},Fd.chain=ua,Fd.chunk=function(u,e,d){e=(d?cr(u,e,d):void 0===e)?1:rd(dc(e),0);var t=null==u?0:u.length;if(!t||e<1)return[];for(var r=0,a=0,c=n(Qe(t/e));rt?0:t+d),(n=void 0===n||n>t?t:dc(n))<0&&(n+=t),n=d>n?0:nc(n);d>>0)?(u=ac(u))&&("string"==typeof e||null!=e&&!qa(e))&&!(e=Yn(e))&&Te(u)?it(He(u),0,d):u.split(e,d):[]},Fd.spread=function(u,e){if("function"!=typeof u)throw new _u(r);return e=null==e?0:rd(dc(e),0),Mn((function(d){var n=d[e],t=it(d,0,e);return n&&me(t,n),re(u,this,t)}))},Fd.tail=function(u){var e=null==u?0:u.length;return e?Gn(u,1,e):[]},Fd.take=function(u,e,d){return u&&u.length?Gn(u,0,(e=d||void 0===e?1:dc(e))<0?0:e):[]},Fd.takeRight=function(u,e,d){var n=null==u?0:u.length;return n?Gn(u,(e=n-(e=d||void 0===e?1:dc(e)))<0?0:e,n):[]},Fd.takeRightWhile=function(u,e){return u&&u.length?et(u,Vt(e,3),!1,!0):[]},Fd.takeWhile=function(u,e){return u&&u.length?et(u,Vt(e,3)):[]},Fd.tap=function(u,e){return e(u),u},Fd.throttle=function(u,e,d){var n=!0,t=!0;if("function"!=typeof u)throw new _u(r);return za(d)&&(n="leading"in d?!!d.leading:n,t="trailing"in d?!!d.trailing:t),ga(u,e,{leading:n,maxWait:e,trailing:t})},Fd.thru=ea,Fd.toArray=uc,Fd.toPairs=Cc,Fd.toPairsIn=Fc,Fd.toPath=function(u){return ja(u)?pe(u,wr):Va(u)?[u]:vt(Ir(ac(u)))},Fd.toPlainObject=rc,Fd.transform=function(u,e,d){var n=ja(u),t=n||La(u)||Ya(u);if(e=Vt(e,4),null==d){var r=u&&u.constructor;d=t?n?new r:[]:za(u)&&Ta(r)?Ad(Gu(u)):{}}return(t?ce:cn)(u,(function(u,n,t){return e(d,u,n,t)})),d},Fd.unary=function(u){return ha(u,1)},Fd.union=Kr,Fd.unionBy=Wr,Fd.unionWith=Gr,Fd.uniq=function(u){return u&&u.length?Qn(u):[]},Fd.uniqBy=function(u,e){return u&&u.length?Qn(u,Vt(e,2)):[]},Fd.uniqWith=function(u,e){return e="function"==typeof e?e:void 0,u&&u.length?Qn(u,void 0,e):[]},Fd.unset=function(u,e){return null==u||Xn(u,e)},Fd.unzip=Hr,Fd.unzipWith=qr,Fd.update=function(u,e,d){return null==u?u:ut(u,e,at(d))},Fd.updateWith=function(u,e,d,n){return n="function"==typeof n?n:void 0,null==u?u:ut(u,e,at(d),n)},Fd.values=Ac,Fd.valuesIn=function(u){return null==u?[]:Oe(u,Dc(u))},Fd.without=Jr,Fd.words=Tc,Fd.wrap=function(u,e){return wa(at(e),u)},Fd.xor=Zr,Fd.xorBy=Vr,Fd.xorWith=Yr,Fd.zip=Qr,Fd.zipObject=function(u,e){return tt(u||[],e||[],zd)},Fd.zipObjectDeep=function(u,e){return tt(u||[],e||[],Un)},Fd.zipWith=Xr,Fd.entries=Cc,Fd.entriesIn=Fc,Fd.extend=fc,Fd.extendWith=ic,Zc(Fd,Fd),Fd.add=rf,Fd.attempt=Rc,Fd.camelCase=kc,Fd.capitalize=Sc,Fd.ceil=af,Fd.clamp=function(u,e,d){return void 0===d&&(d=e,e=void 0),void 0!==d&&(d=(d=tc(d))==d?d:0),void 0!==e&&(e=(e=tc(e))==e?e:0),Jd(tc(u),e,d)},Fd.clone=function(u){return Zd(u,4)},Fd.cloneDeep=function(u){return Zd(u,5)},Fd.cloneDeepWith=function(u,e){return Zd(u,5,e="function"==typeof e?e:void 0)},Fd.cloneWith=function(u,e){return Zd(u,4,e="function"==typeof e?e:void 0)},Fd.conformsTo=function(u,e){return null==e||Vd(u,e,gc(e))},Fd.deburr=Oc,Fd.defaultTo=function(u,e){return null==u||u!=u?e:u},Fd.divide=cf,Fd.endsWith=function(u,e,d){u=ac(u),e=Yn(e);var n=u.length,t=d=void 0===d?n:Jd(dc(d),0,n);return(d-=e.length)>=0&&u.slice(d,t)==e},Fd.eq=Aa,Fd.escape=function(u){return(u=ac(u))&&T.test(u)?u.replace(P,Pe):u},Fd.escapeRegExp=function(u){return(u=ac(u))&&q.test(u)?u.replace(H,"\\$&"):u},Fd.every=function(u,e,d){var n=ja(u)?ie:en;return d&&cr(u,e,d)&&(e=void 0),n(u,Vt(e,3))},Fd.find=ta,Fd.findIndex=Or,Fd.findKey=function(u,e){return ge(u,Vt(e,3),cn)},Fd.findLast=ra,Fd.findLastIndex=jr,Fd.findLastKey=function(u,e){return ge(u,Vt(e,3),fn)},Fd.floor=ff,Fd.forEach=aa,Fd.forEachRight=ca,Fd.forIn=function(u,e){return null==u?u:rn(u,Vt(e,3),Dc)},Fd.forInRight=function(u,e){return null==u?u:an(u,Vt(e,3),Dc)},Fd.forOwn=function(u,e){return u&&cn(u,Vt(e,3))},Fd.forOwnRight=function(u,e){return u&&fn(u,Vt(e,3))},Fd.get=mc,Fd.gt=ka,Fd.gte=Sa,Fd.has=function(u,e){return null!=u&&nr(u,e,hn)},Fd.hasIn=hc,Fd.head=Nr,Fd.identity=Gc,Fd.includes=function(u,e,d,n){u=Na(u)?u:Ac(u),d=d&&!n?dc(d):0;var t=u.length;return d<0&&(d=rd(t+d,0)),Za(u)?d<=t&&u.indexOf(e,d)>-1:!!t&&ye(u,e,d)>-1},Fd.indexOf=function(u,e,d){var n=null==u?0:u.length;if(!n)return-1;var t=null==d?0:dc(d);return t<0&&(t=rd(n+t,0)),ye(u,e,t)},Fd.inRange=function(u,e,d){return e=ec(e),void 0===d?(d=e,e=0):d=ec(d),function(u,e,d){return u>=ad(e,d)&&u=-9007199254740991&&u<=9007199254740991},Fd.isSet=Ja,Fd.isString=Za,Fd.isSymbol=Va,Fd.isTypedArray=Ya,Fd.isUndefined=function(u){return void 0===u},Fd.isWeakMap=function(u){return Ka(u)&&dr(u)==E},Fd.isWeakSet=function(u){return Ka(u)&&"[object WeakSet]"==pn(u)},Fd.join=function(u,e){return null==u?"":nd.call(u,e)},Fd.kebabCase=jc,Fd.last=Mr,Fd.lastIndexOf=function(u,e,d){var n=null==u?0:u.length;if(!n)return-1;var t=n;return void 0!==d&&(t=(t=dc(d))<0?rd(n+t,0):ad(t,n-1)),e==e?function(u,e,d){for(var n=d+1;n--;)if(u[n]===e)return n;return n}(u,e,t):De(u,xe,t,!0)},Fd.lowerCase=$c,Fd.lowerFirst=Nc,Fd.lt=Qa,Fd.lte=Xa,Fd.max=function(u){return u&&u.length?dn(u,Gc,mn):void 0},Fd.maxBy=function(u,e){return u&&u.length?dn(u,Vt(e,2),mn):void 0},Fd.mean=function(u){return Ie(u,Gc)},Fd.meanBy=function(u,e){return Ie(u,Vt(e,2))},Fd.min=function(u){return u&&u.length?dn(u,Gc,Cn):void 0},Fd.minBy=function(u,e){return u&&u.length?dn(u,Vt(e,2),Cn):void 0},Fd.stubArray=nf,Fd.stubFalse=tf,Fd.stubObject=function(){return{}},Fd.stubString=function(){return""},Fd.stubTrue=function(){return!0},Fd.multiply=lf,Fd.nth=function(u,e){return u&&u.length?On(u,dc(e)):void 0},Fd.noConflict=function(){return qu._===this&&(qu._=ku),this},Fd.noop=Vc,Fd.now=ma,Fd.pad=function(u,e,d){u=ac(u);var n=(e=dc(e))?Ge(u):0;if(!e||n>=e)return u;var t=(e-n)/2;return jt(Xe(t),d)+u+jt(Qe(t),d)},Fd.padEnd=function(u,e,d){u=ac(u);var n=(e=dc(e))?Ge(u):0;return e&&ne){var n=u;u=e,e=n}if(d||u%1||e%1){var t=id();return ad(u+t*(e-u+Ku("1e-"+((t+"").length-1))),e)}return Ln(u,e)},Fd.reduce=function(u,e,d){var n=ja(u)?he:Fe,t=arguments.length<3;return n(u,Vt(e,4),d,t,Xd)},Fd.reduceRight=function(u,e,d){var n=ja(u)?be:Fe,t=arguments.length<3;return n(u,Vt(e,4),d,t,un)},Fd.repeat=function(u,e,d){return e=(d?cr(u,e,d):void 0===e)?1:dc(e),Pn(ac(u),e)},Fd.replace=function(){var u=arguments,e=ac(u[0]);return u.length<3?e:e.replace(u[1],u[2])},Fd.result=function(u,e,d){var n=-1,t=(e=ct(e,u)).length;for(t||(t=1,u=void 0);++n9007199254740991)return[];var d=4294967295,n=ad(u,4294967295);u-=4294967295;for(var t=ke(n,e=Vt(e));++d=r)return u;var c=d-Ge(n);if(c<1)return n;var f=a?it(a,0,c).join(""):u.slice(0,c);if(void 0===t)return f+n;if(a&&(c+=f.length-c),qa(t)){if(u.slice(c).search(t)){var i,o=f;for(t.global||(t=bu(t.source,ac(nu.exec(t))+"g")),t.lastIndex=0;i=t.exec(o);)var l=i.index;f=f.slice(0,void 0===l?c:l)}}else if(u.indexOf(Yn(t),c)!=c){var s=f.lastIndexOf(t);s>-1&&(f=f.slice(0,s))}return f+n},Fd.unescape=function(u){return(u=ac(u))&&M.test(u)?u.replace(L,qe):u},Fd.uniqueId=function(u){var e=++wu;return ac(u)+e},Fd.upperCase=Pc,Fd.upperFirst=Mc,Fd.each=aa,Fd.eachRight=ca,Fd.first=Nr,Zc(Fd,(of={},cn(Fd,(function(u,e){Iu.call(Fd.prototype,e)||(of[e]=u)})),of),{chain:!1}),Fd.VERSION="4.17.15",ce(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(u){Fd[u].placeholder=Fd})),ce(["drop","take"],(function(u,e){Od.prototype[u]=function(d){d=void 0===d?1:rd(dc(d),0);var n=this.__filtered__&&!e?new Od(this):this.clone();return n.__filtered__?n.__takeCount__=ad(d,n.__takeCount__):n.__views__.push({size:ad(d,4294967295),type:u+(n.__dir__<0?"Right":"")}),n},Od.prototype[u+"Right"]=function(e){return this.reverse()[u](e).reverse()}})),ce(["filter","map","takeWhile"],(function(u,e){var d=e+1,n=1==d||3==d;Od.prototype[u]=function(u){var e=this.clone();return e.__iteratees__.push({iteratee:Vt(u,3),type:d}),e.__filtered__=e.__filtered__||n,e}})),ce(["head","last"],(function(u,e){var d="take"+(e?"Right":"");Od.prototype[u]=function(){return this[d](1).value()[0]}})),ce(["initial","tail"],(function(u,e){var d="drop"+(e?"":"Right");Od.prototype[u]=function(){return this.__filtered__?new Od(this):this[d](1)}})),Od.prototype.compact=function(){return this.filter(Gc)},Od.prototype.find=function(u){return this.filter(u).head()},Od.prototype.findLast=function(u){return this.reverse().find(u)},Od.prototype.invokeMap=Mn((function(u,e){return"function"==typeof u?new Od(this):this.map((function(d){return _n(d,u,e)}))})),Od.prototype.reject=function(u){return this.filter(xa(Vt(u)))},Od.prototype.slice=function(u,e){u=dc(u);var d=this;return d.__filtered__&&(u>0||e<0)?new Od(d):(u<0?d=d.takeRight(-u):u&&(d=d.drop(u)),void 0!==e&&(d=(e=dc(e))<0?d.dropRight(-e):d.take(e-u)),d)},Od.prototype.takeRightWhile=function(u){return this.reverse().takeWhile(u).reverse()},Od.prototype.toArray=function(){return this.take(4294967295)},cn(Od.prototype,(function(u,e){var d=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),t=Fd[n?"take"+("last"==e?"Right":""):e],r=n||/^find/.test(e);t&&(Fd.prototype[e]=function(){var e=this.__wrapped__,a=n?[1]:arguments,c=e instanceof Od,f=a[0],i=c||ja(e),o=function(u){var e=t.apply(Fd,me([u],a));return n&&l?e[0]:e};i&&d&&"function"==typeof f&&1!=f.length&&(c=i=!1);var l=this.__chain__,s=!!this.__actions__.length,p=r&&!l,m=c&&!s;if(!r&&i){e=m?e:new Od(this);var h=u.apply(e,a);return h.__actions__.push({func:ea,args:[o],thisArg:void 0}),new Sd(h,l)}return p&&m?u.apply(this,a):(h=this.thru(o),p?n?h.value()[0]:h.value():h)})})),ce(["pop","push","shift","sort","splice","unshift"],(function(u){var e=gu[u],d=/^(?:push|sort|unshift)$/.test(u)?"tap":"thru",n=/^(?:pop|shift)$/.test(u);Fd.prototype[u]=function(){var u=arguments;if(n&&!this.__chain__){var t=this.value();return e.apply(ja(t)?t:[],u)}return this[d]((function(d){return e.apply(ja(d)?d:[],u)}))}})),cn(Od.prototype,(function(u,e){var d=Fd[e];if(d){var n=d.name+"";Iu.call(_d,n)||(_d[n]=[]),_d[n].push({name:e,func:d})}})),_d[At(void 0,2).name]=[{name:"wrapper",func:void 0}],Od.prototype.clone=function(){var u=new Od(this.__wrapped__);return u.__actions__=vt(this.__actions__),u.__dir__=this.__dir__,u.__filtered__=this.__filtered__,u.__iteratees__=vt(this.__iteratees__),u.__takeCount__=this.__takeCount__,u.__views__=vt(this.__views__),u},Od.prototype.reverse=function(){if(this.__filtered__){var u=new Od(this);u.__dir__=-1,u.__filtered__=!0}else(u=this.clone()).__dir__*=-1;return u},Od.prototype.value=function(){var u=this.__wrapped__.value(),e=this.__dir__,d=ja(u),n=e<0,t=d?u.length:0,r=function(u,e,d){var n=-1,t=d.length;for(;++n=this.__values__.length;return{done:u,value:u?void 0:this.__values__[this.__index__++]}},Fd.prototype.plant=function(u){for(var e,d=this;d instanceof kd;){var n=Fr(d);n.__index__=0,n.__values__=void 0,e?t.__wrapped__=n:e=n;var t=n;d=d.__wrapped__}return t.__wrapped__=u,e},Fd.prototype.reverse=function(){var u=this.__wrapped__;if(u instanceof Od){var e=u;return this.__actions__.length&&(e=new Od(this)),(e=e.reverse()).__actions__.push({func:ea,args:[zr],thisArg:void 0}),new Sd(e,this.__chain__)}return this.thru(zr)},Fd.prototype.toJSON=Fd.prototype.valueOf=Fd.prototype.value=function(){return dt(this.__wrapped__,this.__actions__)},Fd.prototype.first=Fd.prototype.head,Qu&&(Fd.prototype[Qu]=function(){return this}),Fd}();qu._=Je,void 0===(t=function(){return Je}.call(e,d,e,n))||(n.exports=t)}).call(this)}).call(this,d(76),d(448)(u))},446:function(u,e,d){"use strict";var n=d(0),t=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});e.a=t},447:function(u,e,d){"use strict";d.d(e,"a",(function(){return r}));d(77),d(465),d(431),d(78);var n=d(467),t=d.n(n);function r(u,e){var d=new t.a;return u.map((function(u){var n=u;return"string"==typeof u&&(n={label:u,permalink:"/blog/tags/"+d.slug(u)}),function(u,e){var d=u.label.split(": ",2),n=d[0],t=d[1],r="primary";switch(e){case"blog":case"guides":r=function(u){switch(u){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(n)}return{category:n,count:u.count,label:u.label,permalink:u.permalink,style:r,value:t}}(n,e)}))}},448:function(u,e){u.exports=function(u){return u.webpackPolyfill||(u.deprecate=function(){},u.paths=[],u.children||(u.children=[]),Object.defineProperty(u,"loaded",{enumerable:!0,get:function(){return u.l}}),Object.defineProperty(u,"id",{enumerable:!0,get:function(){return u.i}}),u.webpackPolyfill=1),u}},457:function(u,e,d){var n=d(30),t=d(54),r=d(27),a=d(26),c=d(458);u.exports=function(u,e){var d=1==u,f=2==u,i=3==u,o=4==u,l=6==u,s=5==u||l,p=e||c;return function(e,c,m){for(var h,b,v=r(e),_=t(v),g=n(c,m,3),D=a(_.length),y=0,E=d?p(e,D):f?p(e,0):void 0;D>y;y++)if((s||y in _)&&(b=g(h=_[y],y,v),u))if(d)E[y]=b;else if(b)switch(u){case 3:return!0;case 5:return h;case 6:return y;case 2:E.push(h)}else if(o)return!1;return l?-1:i||o?o:E}}},458:function(u,e,d){var n=d(459);u.exports=function(u,e){return new(n(u))(e)}},459:function(u,e,d){var n=d(13),t=d(460),r=d(2)("species");u.exports=function(u){var e;return t(u)&&("function"!=typeof(e=u.constructor)||e!==Array&&!t(e.prototype)||(e=void 0),n(e)&&null===(e=e[r])&&(e=void 0)),void 0===e?Array:e}},460:function(u,e,d){var n=d(23);u.exports=Array.isArray||function(u){return"Array"==n(u)}},466:function(u,e,d){"use strict";var n=d(0),t=d.n(n),r=d(422),a=d(415),c=d.n(a);e.a=function(u){var e=u.count,d=u.label,n=u.permalink,a=u.style,f=u.value,i=u.valueOnly;return t.a.createElement(r.a,{to:n+"/",className:c()("badge","badge--rounded","badge--"+a)},i?f:d,e&&t.a.createElement(t.a.Fragment,null," (",e,")"))}},467:function(u,e,d){var n=d(468);u.exports=c;var t=Object.hasOwnProperty,r=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function c(){if(!(this instanceof c))return new c;this.reset()}function f(u,e){return"string"!=typeof u?"":(e||(u=u.toLowerCase()),u.trim().replace(a,"").replace(n(),"").replace(r,"-"))}c.prototype.slug=function(u,e){for(var d=f(u,!0===e),n=d;t.call(this.occurrences,d);)this.occurrences[n]++,d=n+"-"+this.occurrences[n];return this.occurrences[d]=0,d},c.prototype.reset=function(){this.occurrences=Object.create(null)},c.slug=f},468:function(u,e){u.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},473:function(u,e,d){"use strict";const n=d(485),t=u=>{if("string"!=typeof u)throw new TypeError("Expected a string");return u=(u=(u=n(u)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+u.slice(1)};u.exports=t,u.exports.default=t},485:function(u,e,d){"use strict";const n=d(486);u.exports=(u,e)=>{if("string"!=typeof u)throw new TypeError("Expected a string");e=void 0===e?"_":e;const d=n("([\\p{Ll}\\d])(\\p{Lu})","g"),t=n("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return u.replace(d,`$1${e}$2`).replace(t,`$1${e}$2`).toLowerCase()}},486:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=l(d(487)),t=l(d(488)),r=l(d(489)),a=l(d(490)),c=l(d(491)),f=l(d(492)),i=l(d(493)),o=l(d(494));function l(u){return u&&u.__esModule?u:{default:u}}(0,t.default)(n.default),(0,r.default)(n.default),(0,a.default)(n.default),(0,c.default)(n.default),(0,f.default)(n.default),(0,i.default)(n.default),(0,o.default)(n.default),e.default=n.default,u.exports=e.default},487:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n={astral:!1},t={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},a={},c={},f=[],i={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},o=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,l=void 0===t.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(u){var e=!0;try{new RegExp("",u)}catch(d){e=!1}return e}var h=m("u"),b=m("y"),v={g:!0,i:!0,m:!0,u:h,y:b};function _(u,e,d,n,t){var r=void 0;if(u.xregexp={captureNames:e},t)return u;if(u.__proto__)u.__proto__=O.prototype;else for(r in O.prototype)u[r]=O.prototype[r];return u.xregexp.source=d,u.xregexp.flags=n?n.split("").sort().join(""):n,u}function g(u){return t.replace.call(u,/([\s\S])(?=[\s\S]*\1)/g,"")}function D(u,e){if(!O.isRegExp(u))throw new TypeError("Type RegExp expected");var d=u.xregexp||{},n=function(u){return s?u.flags:t.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(u))[1]}(u),r="",a="",c=null,f=null;return(e=e||{}).removeG&&(a+="g"),e.removeY&&(a+="y"),a&&(n=t.replace.call(n,new RegExp("["+a+"]+","g"),"")),e.addG&&(r+="g"),e.addY&&(r+="y"),r&&(n=g(n+r)),e.isInternalOnly||(void 0!==d.source&&(c=d.source),null!=d.flags&&(f=r?g(d.flags+r):d.flags)),u=_(new RegExp(e.source||u.source,n),function(u){return!(!u.xregexp||!u.xregexp.captureNames)}(u)?d.captureNames.slice(0):null,c,f,e.isInternalOnly)}function y(u){return parseInt(u,16)}function E(u,e,d){return"("===u.input[u.index-1]||")"===u.input[u.index+u[0].length]||function(u,e,d){return t.test.call(-1!==d.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,u.slice(e))}(u.input,u.index+u[0].length,d)?"":"(?:)"}function x(u){return parseInt(u,10).toString(16)}function I(u,e){return p.call(u)==="[object "+e+"]"}function w(u){for(;u.length<4;)u="0"+u;return u}function C(u){var e={};return I(u,"String")?(O.forEach(u,/[^\s,]+/,(function(u){e[u]=!0})),e):u}function F(u){if(!/^[\w$]$/.test(u))throw new Error("Flag must be a single character A-Za-z0-9_$");v[u]=!0}function A(u,e,d,n,t){for(var r=f.length,a=u[d],c=null,i=void 0,o=void 0;r--;)if(!((o=f[r]).leadChar&&o.leadChar!==a||o.scope!==n&&"all"!==o.scope||o.flag&&-1===e.indexOf(o.flag))&&(i=O.exec(u,o.regex,d,"sticky"))){c={matchLength:i[0].length,output:o.handler.call(t,i,n,e),reparse:o.reparse};break}return c}function k(u){n.astral=u}function S(u){if(null==u)throw new TypeError("Cannot convert null or undefined to object");return u}function O(u,e){if(O.isRegExp(u)){if(void 0!==e)throw new TypeError("Cannot supply flags when copying a RegExp");return D(u)}if(u=void 0===u?"":String(u),e=void 0===e?"":String(e),O.isInstalled("astral")&&-1===e.indexOf("A")&&(e+="A"),c[u]||(c[u]={}),!c[u][e]){for(var d={hasNamedCapture:!1,captureNames:[]},n="default",r="",a=0,f=void 0,o=function(u,e){var d=void 0;if(g(e)!==e)throw new SyntaxError("Invalid duplicate regex flag "+e);for(u=t.replace.call(u,/^\(\?([\w$]+)\)/,(function(u,d){if(t.test.call(/[gy]/,d))throw new SyntaxError("Cannot use flag g or y in mode modifier "+u);return e=g(e+d),""})),d=0;d"}else if(d)return"\\"+(+d+a);return u}if(!I(u,"Array")||!u.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,o=[],l=void 0,s=0;s1&&-1!==d.indexOf("")){var n=D(this,{removeG:!0,isInternalOnly:!0});t.replace.call(String(u).slice(d.index),n,(function(){for(var u=arguments.length,e=Array(u),n=0;nd.index&&(this.lastIndex=d.index)}return this.global||(this.lastIndex=e),d},r.test=function(u){return!!r.exec.call(this,u)},r.match=function(u){if(O.isRegExp(u)){if(u.global){var e=t.match.apply(this,arguments);return u.lastIndex=0,e}}else u=new RegExp(u);return r.exec.call(u,S(this))},r.replace=function(u,e){var d=O.isRegExp(u),n=void 0,r=void 0,a=void 0;return d?(u.xregexp&&(r=u.xregexp.captureNames),n=u.lastIndex):u+="",a=I(e,"Function")?t.replace.call(String(this),u,(function(){for(var n=arguments.length,t=Array(n),a=0;ad.length-3)throw new SyntaxError("Backreference to undefined group "+u);return d[t]||""}throw new SyntaxError("Invalid token "+u)}})),d&&(u.global?u.lastIndex=0:u.lastIndex=n),a},r.split=function(u,e){if(!O.isRegExp(u))return t.split.apply(this,arguments);var d=String(this),n=[],r=u.lastIndex,a=0,c=void 0;return e=(void 0===e?-1:e)>>>0,O.forEach(d,u,(function(u){u.index+u[0].length>a&&(n.push(d.slice(a,u.index)),u.length>1&&u.indexe?n.slice(0,e):n},O.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(u,e){if("B"===u[1]&&"default"===e)return u[0];throw new SyntaxError("Invalid escape "+u[0])}),{scope:"all",leadChar:"\\"}),O.addToken(/\\u{([\dA-Fa-f]+)}/,(function(u,e,d){var n=y(u[1]);if(n>1114111)throw new SyntaxError("Invalid Unicode code point "+u[0]);if(n<=65535)return"\\u"+w(x(n));if(h&&-1!==d.indexOf("u"))return u[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),O.addToken(/\[(\^?)\]/,(function(u){return u[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),O.addToken(/\(\?#[^)]*\)/,E,{leadChar:"("}),O.addToken(/\s+|#[^\n]*\n?/,E,{flag:"x"}),O.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),O.addToken(/\\k<([\w$]+)>/,(function(u){var e=isNaN(u[1])?this.captureNames.indexOf(u[1])+1:+u[1],d=u.index+u[0].length;if(!e||e>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+u[0]);return"\\"+e+(d===u.input.length||isNaN(u.input[d])?"":"(?:)")}),{leadChar:"\\"}),O.addToken(/\\(\d+)/,(function(u,e){if(!("default"===e&&/^[1-9]/.test(u[1])&&+u[1]<=this.captureNames.length)&&"0"!==u[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+u[0]);return u[0]}),{scope:"all",leadChar:"\\"}),O.addToken(/\(\?P?<([\w$]+)>/,(function(u){if(!isNaN(u[1]))throw new SyntaxError("Cannot use integer as capture name "+u[0]);if("length"===u[1]||"__proto__"===u[1])throw new SyntaxError("Cannot use reserved word as capture name "+u[0]);if(-1!==this.captureNames.indexOf(u[1]))throw new SyntaxError("Cannot use same name for multiple groups "+u[0]);return this.captureNames.push(u[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),O.addToken(/\((?!\?)/,(function(u,e,d){return-1!==d.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),e.default=O,u.exports=e.default},488:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){var e=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,d=u.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,e],"g",{conjunction:"or"});function n(u){var e=/^(?:\(\?:\))*\^/,d=/\$(?:\(\?:\))*$/;return e.test(u)&&d.test(u)&&d.test(u.replace(/\\[\s\S]/g,""))?u.replace(e,"").replace(d,""):u}function t(e,d){var n=d?"x":"";return u.isRegExp(e)?e.xregexp&&e.xregexp.captureNames?e:u(e.source,n):u(e,n)}function r(e){return e instanceof RegExp?e:u.escape(e)}function a(u,e,d){return u["subpattern"+d]=e,u}function c(u,e,d){return u+(e1?n-1:0),f=1;f"):f="(?:",h=m,""+f+o[a].pattern.replace(e,(function(u,e,d){if(e){if(c=o[a].names[m-h],++m,c)return"(?<"+c+">"}else if(d)return i=+d-1,o[a].names[i]?"\\k<"+o[a].names[i]+">":"\\"+(+d+h);return u}))+")"}if(t){if(c=_[b],v[++b]=++m,c)return"(?<"+c+">"}else if(r)return _[i=+r-1]?"\\k<"+_[i]+">":"\\"+v[+r];return u}));return u(g,c)}},u.exports=e.default},489:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){function e(u,e,d,n){return{name:u,value:e,start:d,end:n}}u.matchRecursive=function(d,n,t,r,a){a=a||{};var c=-1!==(r=r||"").indexOf("g"),f=-1!==r.indexOf("y"),i=r.replace(/y/g,""),o=a.escapeChar,l=a.valueNames,s=[],p=0,m=0,h=0,b=0,v=void 0,_=void 0,g=void 0,D=void 0,y=void 0;if(n=u(n,i),t=u(t,i),o){if(o.length>1)throw new Error("Cannot use more than one escape character");o=u.escape(o),y=new RegExp("(?:"+o+"[\\S\\s]|(?:(?!"+u.union([n,t],"",{conjunction:"or"}).source+")[^"+o+"])+)+",r.replace(/[^imu]+/g,""))}for(;;){if(o&&(h+=(u.exec(d,y,h,"sticky")||[""])[0].length),g=u.exec(d,n,h),D=u.exec(d,t,h),g&&D&&(g.index<=D.index?D=null:g=null),g||D)h=(m=(g||D).index)+(g||D)[0].length;else if(!p)break;if(f&&!p&&m>b)break;if(g)p||(v=m,_=h),++p;else{if(!D||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(l?(l[0]&&v>b&&s.push(e(l[0],d.slice(b,v),b,v)),l[1]&&s.push(e(l[1],d.slice(v,_),v,_)),l[2]&&s.push(e(l[2],d.slice(_,m),_,m)),l[3]&&s.push(e(l[3],d.slice(m,h),m,h))):s.push(d.slice(_,m)),b=h,!c))break}m===h&&++h}return c&&!f&&l&&l[0]&&d.length>b&&s.push(e(l[0],d.slice(b),b,d.length)),s}},u.exports=e.default},490:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){var e={},d=u._dec,n=u._hex,t=u._pad4;function r(u){return u.replace(/[- _]+/g,"").toLowerCase()}function a(u){var e=/^\\[xu](.+)/.exec(u);return e?d(e[1]):u.charCodeAt("\\"===u[0]?1:0)}function c(d){var r,c,f;return e[d]["b!"]||(e[d]["b!"]=(r=e[d].bmp,c="",f=-1,u.forEach(r,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(u){var e=a(u[1]);e>f+1&&(c+="\\u"+t(n(f+1)),e>f+2&&(c+="-\\u"+t(n(e-1)))),f=a(u[2]||u[1])})),f<65535&&(c+="\\u"+t(n(f+1)),f<65534&&(c+="-\\uFFFF")),c))}function f(u,d){var n=d?"a!":"a=";return e[u][n]||(e[u][n]=function(u,d){var n=e[u],t="";return n.bmp&&!n.isBmpLast&&(t="["+n.bmp+"]"+(n.astral?"|":"")),n.astral&&(t+=n.astral),n.isBmpLast&&n.bmp&&(t+=(n.astral?"|":"")+"["+n.bmp+"]"),d?"(?:(?!"+t+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+t+")"}(u,d))}u.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(u,d,n){var t="P"===u[1]||!!u[2],a=-1!==n.indexOf("A"),i=r(u[4]||u[3]),o=e[i];if("P"===u[1]&&u[2])throw new SyntaxError("Invalid double negation "+u[0]);if(!e.hasOwnProperty(i))throw new SyntaxError("Unknown Unicode token "+u[0]);if(o.inverseOf){if(i=r(o.inverseOf),!e.hasOwnProperty(i))throw new ReferenceError("Unicode token missing data "+u[0]+" -> "+o.inverseOf);o=e[i],t=!t}if(!o.bmp&&!a)throw new SyntaxError("Astral mode required for Unicode token "+u[0]);if(a){if("class"===d)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return f(i,t)}return"class"===d?t?c(i):o.bmp:(t?"[^":"[")+o.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),u.addUnicodeData=function(d){for(var n=void 0,t=0;t\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},u.exports=e.default},493:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){if(!u.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var e=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];e.push({name:"Assigned",inverseOf:"Cn"}),u.addUnicodeData(e)},u.exports=e.default},494:function(u,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(u){if(!u.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");u.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},u.exports=e.default},590:function(u,e,d){u.exports=function(){var u=[],e=[],d={},n={},t={};function r(u){return"string"==typeof u?new RegExp("^"+u+"$","i"):u}function a(u,e){return u===e?e:u===u.toLowerCase()?e.toLowerCase():u===u.toUpperCase()?e.toUpperCase():u[0]===u[0].toUpperCase()?e.charAt(0).toUpperCase()+e.substr(1).toLowerCase():e.toLowerCase()}function c(u,e){return u.replace(/\$(\d{1,2})/g,(function(u,d){return e[d]||""}))}function f(u,e){return u.replace(e[0],(function(d,n){var t=c(e[1],arguments);return a(""===d?u[n-1]:d,t)}))}function i(u,e,n){if(!u.length||d.hasOwnProperty(u))return e;for(var t=n.length;t--;){var r=n[t];if(r[0].test(e))return f(e,r)}return e}function o(u,e,d){return function(n){var t=n.toLowerCase();return e.hasOwnProperty(t)?a(n,t):u.hasOwnProperty(t)?a(n,u[t]):i(t,n,d)}}function l(u,e,d,n){return function(n){var t=n.toLowerCase();return!!e.hasOwnProperty(t)||!u.hasOwnProperty(t)&&i(t,t,d)===t}}function s(u,e,d){return(d?e+" ":"")+(1===e?s.singular(u):s.plural(u))}return s.plural=o(t,n,u),s.isPlural=l(t,n,u),s.singular=o(n,t,e),s.isSingular=l(n,t,e),s.addPluralRule=function(e,d){u.push([r(e),d])},s.addSingularRule=function(u,d){e.push([r(u),d])},s.addUncountableRule=function(u){"string"!=typeof u?(s.addPluralRule(u,"$0"),s.addSingularRule(u,"$0")):d[u.toLowerCase()]=!0},s.addIrregularRule=function(u,e){e=e.toLowerCase(),u=u.toLowerCase(),t[u]=e,n[e]=u},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(u){return s.addIrregularRule(u[0],u[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(u){return s.addPluralRule(u[0],u[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(u){return s.addSingularRule(u[0],u[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[e\xe9]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(s.addUncountableRule),s}()}}]); \ No newline at end of file diff --git a/404.html b/404.html index 0e56cc8d57..6c73027a80 100644 --- a/404.html +++ b/404.html @@ -26,22 +26,22 @@ - + - +
-

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + - + diff --git a/54e7632e.8e8ddea7.js b/54e7632e.8e8ddea7.js deleted file mode 100644 index b2b1c9a2a9..0000000000 --- a/54e7632e.8e8ddea7.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 54e7632e.8e8ddea7.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{411:function(e,u,t){"use strict";t.r(u);var n={};t.r(n),t.d(n,"now",(function(){return g})),t.d(n,"timer",(function(){return w})),t.d(n,"timerFlush",(function(){return E})),t.d(n,"timeout",(function(){return k})),t.d(n,"interval",(function(){return O}));var d,r,a=t(0),c=t.n(a),o=t(553),i=t(437),f=t(422),l=(t(418),t(84),0),s=0,p=0,m=0,h=0,v=0,b="object"==typeof performance&&performance.now?performance:Date,y="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function g(){return h||(y(_),h=b.now()+v)}function _(){h=0}function x(){this._call=this._time=this._next=null}function w(e,u,t){var n=new x;return n.restart(e,u,t),n}function E(){g(),++l;for(var e,u=d;u;)(e=h-u._time)>=0&&u._call.call(null,e),u=u._next;--l}function I(){h=(m=b.now())+v,l=s=0;try{E()}finally{l=0,function(){var e,u,t=d,n=1/0;for(;t;)t._call?(n>t._time&&(n=t._time),e=t,t=t._next):(u=t._next,t._next=null,t=e?e._next=u:d=u);r=e,A(n)}(),h=0}}function S(){var e=b.now(),u=e-m;u>1e3&&(v-=u,m=e)}function A(e){l||(s&&(s=clearTimeout(s)),e-h>24?(e<1/0&&(s=setTimeout(I,e-b.now()-v)),p&&(p=clearInterval(p))):(p||(m=b.now(),p=setInterval(S,1e3)),l=1,y(I)))}x.prototype=w.prototype={constructor:x,restart:function(e,u,t){if("function"!=typeof e)throw new TypeError("callback is not a function");t=(null==t?g():+t)+(null==u?0:+u),this._next||r===this||(r?r._next=this:d=this,r=this),this._call=e,this._time=t,A()},stop:function(){this._call&&(this._call=null,this._time=1/0,A())}};var k=function(e,u,t){var n=new x;return u=null==u?0:+u,n.restart((function(t){n.stop(),e(t+u)}),u,t),n},O=function(e,u,t){var n=new x,d=u;return null==u?(n.restart(e,u,t),n):(u=+u,t=null==t?g():+t,n.restart((function r(a){a+=d,n.restart(r,d+=u,t),e(a)}),u,t),n)},j=Object.assign({},n);t(428);u.default=function(e){return Object(a.useEffect)((function(){if("undefined"!=typeof document){var e=function(e){for(var u=e.getContext("2d"),t=e.width,n=e.height,d=2*Math.PI,r=200,a=new Array(r),c=0;ct+45&&(o.x-=t+90),o.y+=o.vy,o.y<-45?o.y+=n+90:o.y>n+45&&(o.y-=n+90),o.vx+=.2*(Math.random()-.5)-.01*o.vx,o.vy+=.2*(Math.random()-.5)-.01*o.vy,u.beginPath(),u.arc(o.x,o.y,3,0,d),u.fillStyle="rgba(40,217,242,0.4)",u.fill()}for(c=0;c3600?(2025-m)/-1575:1,u.beginPath(),u.moveTo(f.x,f.y),u.lineTo(l.x,l.y),u.strokeStyle="rgba(40,217,242,0.3)",u.stroke())}u.restore()}))}(document.querySelector("canvas"));return function(){e.stop()}}}),[]),c.a.createElement(i.a,{title:"Components - Sources, Transforms, & Sinks",description:"Browse and search all of Qovery's components: sources, transforms, and sinks. Filter by event type, guarantee, function, operating system, and provider."},c.a.createElement("header",{className:"hero hero--animated-graph"},c.a.createElement("div",{className:"container container--fluid container--flush"},c.a.createElement("canvas",{width:"2000",height:"200"}),c.a.createElement("div",{className:"overlay"},c.a.createElement("h1",null,"Qovery Components"),c.a.createElement("div",{className:"hero--subtitle"},"Components allow you to collect, transform, and route data with ease. ",c.a.createElement(f.a,{to:"/docs/getting-started/concepts/"},"Learn more"),".")))),c.a.createElement("main",{className:"container"},c.a.createElement(o.a,{filterColumn:!0,headingLevel:2,location:e.location})))}},415:function(e,u,t){var n;!function(){"use strict";var t={}.hasOwnProperty;function d(){for(var e=[],u=0;u1?arguments[1]:void 0,t),o=a>2?arguments[2]:void 0,i=void 0===o?t:d(o,t);i>c;)u[c++]=e;return u}},420:function(e,u,t){var n=t(28).f,d=Function.prototype,r=/^\s*function ([^ (]*)/;"name"in d||t(10)&&n(d,"name",{configurable:!0,get:function(){try{return(""+this).match(r)[1]}catch(e){return""}}})},424:function(e,u,t){"use strict";var n=t(0),d=t.n(n),r=t(422),a=t(415),c=t.n(a);t(133);u.a=function(e){var u=e.children,t=e.className,n=e.badge,a=e.leftIcon,o=e.rightIcon,i=e.size,f=e.target,l=e.to,s=c()("jump-to","jump-to--"+i,t),p=d.a.createElement("div",{className:"jump-to--inner"},d.a.createElement("div",{className:"jump-to--inner-2"},a&&d.a.createElement("div",{className:"jump-to--left"},d.a.createElement("i",{className:"feather icon-"+a})),d.a.createElement("div",{className:"jump-to--main"},n?d.a.createElement("span",{className:"badge badge--primary badge--right"},n):"",u),d.a.createElement("div",{className:"jump-to--right"},d.a.createElement("i",{className:"feather icon-"+(o||"chevron-right")+" arrow"}))));return f?d.a.createElement("a",{href:l,target:f,className:s},p):d.a.createElement(r.a,{to:l,className:s},p)}},434:function(e,u,t){"use strict";var n=t(8),d=t(478),r=t(55);t(56)("search",1,(function(e,u,t,a){return[function(t){var n=e(this),d=null==t?void 0:t[u];return void 0!==d?d.call(t,n):new RegExp(t)[u](String(n))},function(e){var u=a(t,e,this);if(u.done)return u.value;var c=n(e),o=String(this),i=c.lastIndex;d(i,0)||(c.lastIndex=0);var f=r(c,o);return d(c.lastIndex,i)||(c.lastIndex=i),null===f?-1:f.index}]}))},437:function(e,u,t){"use strict";t(449);var n=t(0),d=t.n(n),r=t(450),a=t(435),c=t(1),o=(t(438),t(439),t(451),t(422)),i=t(452),f=t(432),l=t.n(f),s=t(453),p=t.n(s),m=t(428),h=t(415),v=t.n(h),b=t(135),y=t.n(b),g=function(){return d.a.createElement("span",{className:v()(y.a.toggle,y.a.moon)})},_=function(){return d.a.createElement("span",{className:v()(y.a.toggle,y.a.sun)})},x=function(e){var u=Object(m.a)().isClient;return d.a.createElement(p.a,Object(c.a)({disabled:!u,icons:{checked:d.a.createElement(g,null),unchecked:d.a.createElement(_,null)}},e))};function w(){var e=Object(m.a)().siteConfig,u=(void 0===e?{}:e).customFields.metadata.latest_post,t=Date.parse(u.date),n=new Date,d=Math.abs(n-t),r=Math.ceil(d/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),r<30&&(!a||a0&&d.a.createElement("div",{className:"row footer__links"},d.a.createElement("div",{className:"col col--5 footer__col"},d.a.createElement("div",{className:"margin-bottom--md"},d.a.createElement(l.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),d.a.createElement("div",{className:"margin-bottom--md"},d.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),d.a.createElement("div",null,d.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},d.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},d.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},d.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},d.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),o.map((function(e,u){return d.a.createElement("div",{key:u,className:"col footer__col"},null!=e.title?d.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?d.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,u){return e.html?d.a.createElement("li",{key:u,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):d.a.createElement("li",{key:e.href||e.to,className:"footer__item"},d.a.createElement(L,e))}))):null)}))),(f||a)&&d.a.createElement("div",{className:"text--center"},f&&f.src&&d.a.createElement("div",{className:"margin-bottom--sm"},f.href?d.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:R.a.footerLogoLink},d.a.createElement(F,{alt:f.alt,url:s})):d.a.createElement(F,{alt:f.alt,url:s})),d.a.createElement("small",null,a),d.a.createElement("br",null))))},U=t(454),D=t(455),z=t(3);t(138);u.a=function(e){var u=Object(m.a)().siteConfig,t=void 0===u?{}:u,n=t.favicon,c=(t.tagline,t.title),o=t.themeConfig.image,i=t.url,f=e.children,l=e.title,s=e.noFooter,p=e.description,h=e.image,v=e.keywords,b=(e.permalink,e.version),y=l?l+" | "+c:c,g=h||o,_=i+Object(I.a)(g),x=Object(I.a)(n),w=Object(z.h)(),E=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return d.a.createElement(D.a,null,d.a.createElement(U.a,null,d.a.createElement(a.a,null,d.a.createElement("html",{lang:"en"}),d.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),y&&d.a.createElement("title",null,y),y&&d.a.createElement("meta",{property:"og:title",content:y}),n&&d.a.createElement("link",{rel:"shortcut icon",href:x}),p&&d.a.createElement("meta",{name:"description",content:p}),p&&d.a.createElement("meta",{property:"og:description",content:p}),b&&d.a.createElement("meta",{name:"docsearch:version",content:b}),v&&v.length&&d.a.createElement("meta",{name:"keywords",content:v.join(",")}),g&&d.a.createElement("meta",{property:"og:image",content:_}),g&&d.a.createElement("meta",{property:"twitter:image",content:_}),g&&d.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+y}),E&&d.a.createElement("meta",{property:"og:url",content:E}),d.a.createElement("meta",{name:"twitter:card",content:"summary"}),E&&d.a.createElement("link",{rel:"canonical",href:E})),d.a.createElement(r.a,null),d.a.createElement(P,null),d.a.createElement("div",{className:"main-wrapper"},f),!s&&d.a.createElement(B,null)))}},443:function(e,u,t){(function(e,n){var d;(function(){var r="Expected a function",a="__lodash_placeholder__",c=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],o="[object Arguments]",i="[object Array]",f="[object Boolean]",l="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",v="[object Number]",b="[object Object]",y="[object RegExp]",g="[object Set]",_="[object String]",x="[object Symbol]",w="[object WeakMap]",E="[object ArrayBuffer]",I="[object DataView]",S="[object Float32Array]",A="[object Float64Array]",k="[object Int8Array]",O="[object Int16Array]",j="[object Int32Array]",N="[object Uint8Array]",C="[object Uint16Array]",P="[object Uint32Array]",T=/\b__p \+= '';/g,M=/\b(__p \+=) '' \+/g,R=/(__e\(.*?\)|\b__t\)) \+\n'';/g,L=/&(?:amp|lt|gt|quot|#39);/g,F=/[&<>"']/g,B=RegExp(L.source),U=RegExp(F.source),D=/<%-([\s\S]+?)%>/g,z=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,G=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,K=RegExp(H.source),V=/^\s+|\s+$/g,J=/^\s+/,Z=/\s+$/,Q=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ue=/\\(\\)?/g,te=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ne=/\w*$/,de=/^[-+]0x[0-9a-f]+$/i,re=/^0b[01]+$/i,ae=/^\[object .+?Constructor\]$/,ce=/^0o[0-7]+$/i,oe=/^(?:0|[1-9]\d*)$/,ie=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,fe=/($^)/,le=/['\n\r\u2028\u2029\\]/g,se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",me="[\\ud800-\\udfff]",he="["+pe+"]",ve="["+se+"]",be="\\d+",ye="[\\u2700-\\u27bf]",ge="[a-z\\xdf-\\xf6\\xf8-\\xff]",_e="[^\\ud800-\\udfff"+pe+be+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",xe="\\ud83c[\\udffb-\\udfff]",we="[^\\ud800-\\udfff]",Ee="(?:\\ud83c[\\udde6-\\uddff]){2}",Ie="[\\ud800-\\udbff][\\udc00-\\udfff]",Se="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ae="(?:"+ge+"|"+_e+")",ke="(?:"+Se+"|"+_e+")",Oe="(?:"+ve+"|"+xe+")"+"?",je="[\\ufe0e\\ufe0f]?"+Oe+("(?:\\u200d(?:"+[we,Ee,Ie].join("|")+")[\\ufe0e\\ufe0f]?"+Oe+")*"),Ne="(?:"+[ye,Ee,Ie].join("|")+")"+je,Ce="(?:"+[we+ve+"?",ve,Ee,Ie,me].join("|")+")",Pe=RegExp("['\u2019]","g"),Te=RegExp(ve,"g"),Me=RegExp(xe+"(?="+xe+")|"+Ce+je,"g"),Re=RegExp([Se+"?"+ge+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[he,Se,"$"].join("|")+")",ke+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[he,Se+Ae,"$"].join("|")+")",Se+"?"+Ae+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",Se+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",be,Ne].join("|"),"g"),Le=RegExp("[\\u200d\\ud800-\\udfff"+se+"\\ufe0e\\ufe0f]"),Fe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Be=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ue=-1,De={};De[S]=De[A]=De[k]=De[O]=De[j]=De[N]=De["[object Uint8ClampedArray]"]=De[C]=De[P]=!0,De[o]=De[i]=De[E]=De[f]=De[I]=De[l]=De[s]=De[p]=De[h]=De[v]=De[b]=De[y]=De[g]=De[_]=De[w]=!1;var ze={};ze[o]=ze[i]=ze[E]=ze[I]=ze[f]=ze[l]=ze[S]=ze[A]=ze[k]=ze[O]=ze[j]=ze[h]=ze[v]=ze[b]=ze[y]=ze[g]=ze[_]=ze[x]=ze[N]=ze["[object Uint8ClampedArray]"]=ze[C]=ze[P]=!0,ze[s]=ze[p]=ze[w]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$e=parseFloat,Ge=parseInt,qe="object"==typeof e&&e&&e.Object===Object&&e,He="object"==typeof self&&self&&self.Object===Object&&self,Ke=qe||He||Function("return this")(),Ve=u&&!u.nodeType&&u,Je=Ve&&"object"==typeof n&&n&&!n.nodeType&&n,Ze=Je&&Je.exports===Ve,Qe=Ze&&qe.process,Ye=function(){try{var e=Je&&Je.require&&Je.require("util").types;return e||Qe&&Qe.binding&&Qe.binding("util")}catch(u){}}(),Xe=Ye&&Ye.isArrayBuffer,eu=Ye&&Ye.isDate,uu=Ye&&Ye.isMap,tu=Ye&&Ye.isRegExp,nu=Ye&&Ye.isSet,du=Ye&&Ye.isTypedArray;function ru(e,u,t){switch(t.length){case 0:return e.call(u);case 1:return e.call(u,t[0]);case 2:return e.call(u,t[0],t[1]);case 3:return e.call(u,t[0],t[1],t[2])}return e.apply(u,t)}function au(e,u,t,n){for(var d=-1,r=null==e?0:e.length;++d-1}function su(e,u,t){for(var n=-1,d=null==e?0:e.length;++n-1;);return t}function Mu(e,u){for(var t=e.length;t--&&xu(u,e[t],0)>-1;);return t}function Ru(e,u){for(var t=e.length,n=0;t--;)e[t]===u&&++n;return n}var Lu=Au({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Fu=Au({"&":"&","<":"<",">":">",'"':""","'":"'"});function Bu(e){return"\\"+We[e]}function Uu(e){return Le.test(e)}function Du(e){var u=-1,t=Array(e.size);return e.forEach((function(e,n){t[++u]=[n,e]})),t}function zu(e,u){return function(t){return e(u(t))}}function Wu(e,u){for(var t=-1,n=e.length,d=0,r=[];++t",""":'"',"'":"'"});var Vu=function e(u){var t,n=(u=null==u?Ke:Vu.defaults(Ke.Object(),u,Vu.pick(Ke,Be))).Array,d=u.Date,se=u.Error,pe=u.Function,me=u.Math,he=u.Object,ve=u.RegExp,be=u.String,ye=u.TypeError,ge=n.prototype,_e=pe.prototype,xe=he.prototype,we=u["__core-js_shared__"],Ee=_e.toString,Ie=xe.hasOwnProperty,Se=0,Ae=(t=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"",ke=xe.toString,Oe=Ee.call(he),je=Ke._,Ne=ve("^"+Ee.call(Ie).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ce=Ze?u.Buffer:void 0,Me=u.Symbol,Le=u.Uint8Array,We=Ce?Ce.allocUnsafe:void 0,qe=zu(he.getPrototypeOf,he),He=he.create,Ve=xe.propertyIsEnumerable,Je=ge.splice,Qe=Me?Me.isConcatSpreadable:void 0,Ye=Me?Me.iterator:void 0,yu=Me?Me.toStringTag:void 0,Au=function(){try{var e=Xd(he,"defineProperty");return e({},"",{}),e}catch(u){}}(),Ju=u.clearTimeout!==Ke.clearTimeout&&u.clearTimeout,Zu=d&&d.now!==Ke.Date.now&&d.now,Qu=u.setTimeout!==Ke.setTimeout&&u.setTimeout,Yu=me.ceil,Xu=me.floor,et=he.getOwnPropertySymbols,ut=Ce?Ce.isBuffer:void 0,tt=u.isFinite,nt=ge.join,dt=zu(he.keys,he),rt=me.max,at=me.min,ct=d.now,ot=u.parseInt,it=me.random,ft=ge.reverse,lt=Xd(u,"DataView"),st=Xd(u,"Map"),pt=Xd(u,"Promise"),mt=Xd(u,"Set"),ht=Xd(u,"WeakMap"),vt=Xd(he,"create"),bt=ht&&new ht,yt={},gt=Ar(lt),_t=Ar(st),xt=Ar(pt),wt=Ar(mt),Et=Ar(ht),It=Me?Me.prototype:void 0,St=It?It.valueOf:void 0,At=It?It.toString:void 0;function kt(e){if($a(e)&&!Pa(e)&&!(e instanceof Ct)){if(e instanceof Nt)return e;if(Ie.call(e,"__wrapped__"))return kr(e)}return new Nt(e)}var Ot=function(){function e(){}return function(u){if(!Wa(u))return{};if(He)return He(u);e.prototype=u;var t=new e;return e.prototype=void 0,t}}();function jt(){}function Nt(e,u){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!u,this.__index__=0,this.__values__=void 0}function Ct(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Pt(e){var u=-1,t=null==e?0:e.length;for(this.clear();++u=u?e:u)),e}function Jt(e,u,t,n,d,r){var a,c=1&u,i=2&u,s=4&u;if(t&&(a=d?t(e,n,d,r):t(e)),void 0!==a)return a;if(!Wa(e))return e;var w=Pa(e);if(w){if(a=function(e){var u=e.length,t=new e.constructor(u);u&&"string"==typeof e[0]&&Ie.call(e,"index")&&(t.index=e.index,t.input=e.input);return t}(e),!c)return bd(e,a)}else{var T=tr(e),M=T==p||T==m;if(La(e))return ld(e,c);if(T==b||T==o||M&&!d){if(a=i||M?{}:dr(e),!c)return i?function(e,u){return yd(e,ur(e),u)}(e,function(e,u){return e&&yd(u,_c(u),e)}(a,e)):function(e,u){return yd(e,er(e),u)}(e,qt(a,e))}else{if(!ze[T])return d?e:{};a=function(e,u,t){var n=e.constructor;switch(u){case E:return sd(e);case f:case l:return new n(+e);case I:return function(e,u){var t=u?sd(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}(e,t);case S:case A:case k:case O:case j:case N:case"[object Uint8ClampedArray]":case C:case P:return pd(e,t);case h:return new n;case v:case _:return new n(e);case y:return function(e){var u=new e.constructor(e.source,ne.exec(e));return u.lastIndex=e.lastIndex,u}(e);case g:return new n;case x:return d=e,St?he(St.call(d)):{}}var d}(e,T,c)}}r||(r=new Lt);var R=r.get(e);if(R)return R;r.set(e,a),Va(e)?e.forEach((function(n){a.add(Jt(n,u,t,n,e,r))})):Ga(e)&&e.forEach((function(n,d){a.set(d,Jt(n,u,t,d,e,r))}));var L=w?void 0:(s?i?Hd:qd:i?_c:gc)(e);return cu(L||e,(function(n,d){L&&(n=e[d=n]),Wt(a,d,Jt(n,u,t,d,e,r))})),a}function Zt(e,u,t){var n=t.length;if(null==e)return!n;for(e=he(e);n--;){var d=t[n],r=u[d],a=e[d];if(void 0===a&&!(d in e)||!r(a))return!1}return!0}function Qt(e,u,t){if("function"!=typeof e)throw new ye(r);return gr((function(){e.apply(void 0,t)}),u)}function Yt(e,u,t,n){var d=-1,r=lu,a=!0,c=e.length,o=[],i=u.length;if(!c)return o;t&&(u=pu(u,Nu(t))),n?(r=su,a=!1):u.length>=200&&(r=Pu,a=!1,u=new Rt(u));e:for(;++d-1},Tt.prototype.set=function(e,u){var t=this.__data__,n=$t(t,e);return n<0?(++this.size,t.push([e,u])):t[n][1]=u,this},Mt.prototype.clear=function(){this.size=0,this.__data__={hash:new Pt,map:new(st||Tt),string:new Pt}},Mt.prototype.delete=function(e){var u=Qd(this,e).delete(e);return this.size-=u?1:0,u},Mt.prototype.get=function(e){return Qd(this,e).get(e)},Mt.prototype.has=function(e){return Qd(this,e).has(e)},Mt.prototype.set=function(e,u){var t=Qd(this,e),n=t.size;return t.set(e,u),this.size+=t.size==n?0:1,this},Rt.prototype.add=Rt.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Rt.prototype.has=function(e){return this.__data__.has(e)},Lt.prototype.clear=function(){this.__data__=new Tt,this.size=0},Lt.prototype.delete=function(e){var u=this.__data__,t=u.delete(e);return this.size=u.size,t},Lt.prototype.get=function(e){return this.__data__.get(e)},Lt.prototype.has=function(e){return this.__data__.has(e)},Lt.prototype.set=function(e,u){var t=this.__data__;if(t instanceof Tt){var n=t.__data__;if(!st||n.length<199)return n.push([e,u]),this.size=++t.size,this;t=this.__data__=new Mt(n)}return t.set(e,u),this.size=t.size,this};var Xt=xd(cn),en=xd(on,!0);function un(e,u){var t=!0;return Xt(e,(function(e,n,d){return t=!!u(e,n,d)})),t}function tn(e,u,t){for(var n=-1,d=e.length;++n0&&t(c)?u>1?dn(c,u-1,t,n,d):mu(d,c):n||(d[d.length]=c)}return d}var rn=wd(),an=wd(!0);function cn(e,u){return e&&rn(e,u,gc)}function on(e,u){return e&&an(e,u,gc)}function fn(e,u){return fu(u,(function(u){return Ua(e[u])}))}function ln(e,u){for(var t=0,n=(u=cd(u,e)).length;null!=e&&tu}function hn(e,u){return null!=e&&Ie.call(e,u)}function vn(e,u){return null!=e&&u in he(e)}function bn(e,u,t){for(var d=t?su:lu,r=e[0].length,a=e.length,c=a,o=n(a),i=1/0,f=[];c--;){var l=e[c];c&&u&&(l=pu(l,Nu(u))),i=at(l.length,i),o[c]=!t&&(u||r>=120&&l.length>=120)?new Rt(c&&l):void 0}l=e[0];var s=-1,p=o[0];e:for(;++s=c)return o;var i=t[n];return o*("desc"==i?-1:1)}}return e.index-u.index}(e,u,t)}))}function Tn(e,u,t){for(var n=-1,d=u.length,r={};++n-1;)c!==e&&Je.call(c,o,1),Je.call(e,o,1);return e}function Rn(e,u){for(var t=e?u.length:0,n=t-1;t--;){var d=u[t];if(t==n||d!==r){var r=d;ar(d)?Je.call(e,d,1):Xn(e,d)}}return e}function Ln(e,u){return e+Xu(it()*(u-e+1))}function Fn(e,u){var t="";if(!e||u<1||u>9007199254740991)return t;do{u%2&&(t+=e),(u=Xu(u/2))&&(e+=e)}while(u);return t}function Bn(e,u){return _r(mr(e,u,qc),e+"")}function Un(e){return Bt(Oc(e))}function Dn(e,u){var t=Oc(e);return Er(t,Vt(u,0,t.length))}function zn(e,u,t,n){if(!Wa(e))return e;for(var d=-1,r=(u=cd(u,e)).length,a=r-1,c=e;null!=c&&++dr?0:r+u),(t=t>r?r:t)<0&&(t+=r),r=u>t?0:t-u>>>0,u>>>=0;for(var a=n(r);++d>>1,a=e[r];null!==a&&!Za(a)&&(t?a<=u:a=200){var i=u?null:Fd(e);if(i)return $u(i);a=!1,d=Pu,o=new Rt}else o=u?[]:c;e:for(;++n=n?e:qn(e,u,t)}var fd=Ju||function(e){return Ke.clearTimeout(e)};function ld(e,u){if(u)return e.slice();var t=e.length,n=We?We(t):new e.constructor(t);return e.copy(n),n}function sd(e){var u=new e.constructor(e.byteLength);return new Le(u).set(new Le(e)),u}function pd(e,u){var t=u?sd(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}function md(e,u){if(e!==u){var t=void 0!==e,n=null===e,d=e==e,r=Za(e),a=void 0!==u,c=null===u,o=u==u,i=Za(u);if(!c&&!i&&!r&&e>u||r&&a&&o&&!c&&!i||n&&a&&o||!t&&o||!d)return 1;if(!n&&!r&&!i&&e1?t[d-1]:void 0,a=d>2?t[2]:void 0;for(r=e.length>3&&"function"==typeof r?(d--,r):void 0,a&&cr(t[0],t[1],a)&&(r=d<3?void 0:r,d=1),u=he(u);++n-1?d[r?u[a]:a]:void 0}}function kd(e){return Gd((function(u){var t=u.length,n=t,d=Nt.prototype.thru;for(e&&u.reverse();n--;){var a=u[n];if("function"!=typeof a)throw new ye(r);if(d&&!c&&"wrapper"==Vd(a))var c=new Nt([],!0)}for(n=c?n:t;++n1&&g.reverse(),l&&ic))return!1;var i=r.get(e);if(i&&r.get(u))return i==u;var f=-1,l=!0,s=2&t?new Rt:void 0;for(r.set(e,u),r.set(u,e);++f-1&&e%1==0&&e1?"& ":"")+u[n],u=u.join(t>2?", ":" "),e.replace(Q,"{\n/* [wrapped with "+u+"] */\n")}(n,function(e,u){return cu(c,(function(t){var n="_."+t[0];u&t[1]&&!lu(e,n)&&e.push(n)})),e.sort()}(function(e){var u=e.match(Y);return u?u[1].split(X):[]}(n),t)))}function wr(e){var u=0,t=0;return function(){var n=ct(),d=16-(n-t);if(t=n,d>0){if(++u>=800)return arguments[0]}else u=0;return e.apply(void 0,arguments)}}function Er(e,u){var t=-1,n=e.length,d=n-1;for(u=void 0===u?n:u;++t1?e[u-1]:void 0;return t="function"==typeof t?(e.pop(),t):void 0,Kr(e,t)}));function ea(e){var u=kt(e);return u.__chain__=!0,u}function ua(e,u){return u(e)}var ta=Gd((function(e){var u=e.length,t=u?e[0]:0,n=this.__wrapped__,d=function(u){return Kt(u,e)};return!(u>1||this.__actions__.length)&&n instanceof Ct&&ar(t)?((n=n.slice(t,+t+(u?1:0))).__actions__.push({func:ua,args:[d],thisArg:void 0}),new Nt(n,this.__chain__).thru((function(e){return u&&!e.length&&e.push(void 0),e}))):this.thru(d)}));var na=gd((function(e,u,t){Ie.call(e,t)?++e[t]:Ht(e,t,1)}));var da=Ad(Cr),ra=Ad(Pr);function aa(e,u){return(Pa(e)?cu:Xt)(e,Zd(u,3))}function ca(e,u){return(Pa(e)?ou:en)(e,Zd(u,3))}var oa=gd((function(e,u,t){Ie.call(e,t)?e[t].push(u):Ht(e,t,[u])}));var ia=Bn((function(e,u,t){var d=-1,r="function"==typeof u,a=Ma(e)?n(e.length):[];return Xt(e,(function(e){a[++d]=r?ru(u,e,t):yn(e,u,t)})),a})),fa=gd((function(e,u,t){Ht(e,t,u)}));function la(e,u){return(Pa(e)?pu:kn)(e,Zd(u,3))}var sa=gd((function(e,u,t){e[t?0:1].push(u)}),(function(){return[[],[]]}));var pa=Bn((function(e,u){if(null==e)return[];var t=u.length;return t>1&&cr(e,u[0],u[1])?u=[]:t>2&&cr(u[0],u[1],u[2])&&(u=[u[0]]),Pn(e,dn(u,1),[])})),ma=Zu||function(){return Ke.Date.now()};function ha(e,u,t){return u=t?void 0:u,Ud(e,128,void 0,void 0,void 0,void 0,u=e&&null==u?e.length:u)}function va(e,u){var t;if("function"!=typeof u)throw new ye(r);return e=tc(e),function(){return--e>0&&(t=u.apply(this,arguments)),e<=1&&(u=void 0),t}}var ba=Bn((function(e,u,t){var n=1;if(t.length){var d=Wu(t,Jd(ba));n|=32}return Ud(e,n,u,t,d)})),ya=Bn((function(e,u,t){var n=3;if(t.length){var d=Wu(t,Jd(ya));n|=32}return Ud(u,n,e,t,d)}));function ga(e,u,t){var n,d,a,c,o,i,f=0,l=!1,s=!1,p=!0;if("function"!=typeof e)throw new ye(r);function m(u){var t=n,r=d;return n=d=void 0,f=u,c=e.apply(r,t)}function h(e){return f=e,o=gr(b,u),l?m(e):c}function v(e){var t=e-i;return void 0===i||t>=u||t<0||s&&e-f>=a}function b(){var e=ma();if(v(e))return y(e);o=gr(b,function(e){var t=u-(e-i);return s?at(t,a-(e-f)):t}(e))}function y(e){return o=void 0,p&&n?m(e):(n=d=void 0,c)}function g(){var e=ma(),t=v(e);if(n=arguments,d=this,i=e,t){if(void 0===o)return h(i);if(s)return fd(o),o=gr(b,u),m(i)}return void 0===o&&(o=gr(b,u)),c}return u=dc(u)||0,Wa(t)&&(l=!!t.leading,a=(s="maxWait"in t)?rt(dc(t.maxWait)||0,u):a,p="trailing"in t?!!t.trailing:p),g.cancel=function(){void 0!==o&&fd(o),f=0,n=i=d=o=void 0},g.flush=function(){return void 0===o?c:y(ma())},g}var _a=Bn((function(e,u){return Qt(e,1,u)})),xa=Bn((function(e,u,t){return Qt(e,dc(u)||0,t)}));function wa(e,u){if("function"!=typeof e||null!=u&&"function"!=typeof u)throw new ye(r);var t=function(){var n=arguments,d=u?u.apply(this,n):n[0],r=t.cache;if(r.has(d))return r.get(d);var a=e.apply(this,n);return t.cache=r.set(d,a)||r,a};return t.cache=new(wa.Cache||Mt),t}function Ea(e){if("function"!=typeof e)throw new ye(r);return function(){var u=arguments;switch(u.length){case 0:return!e.call(this);case 1:return!e.call(this,u[0]);case 2:return!e.call(this,u[0],u[1]);case 3:return!e.call(this,u[0],u[1],u[2])}return!e.apply(this,u)}}wa.Cache=Mt;var Ia=od((function(e,u){var t=(u=1==u.length&&Pa(u[0])?pu(u[0],Nu(Zd())):pu(dn(u,1),Nu(Zd()))).length;return Bn((function(n){for(var d=-1,r=at(n.length,t);++d=u})),Ca=gn(function(){return arguments}())?gn:function(e){return $a(e)&&Ie.call(e,"callee")&&!Ve.call(e,"callee")},Pa=n.isArray,Ta=Xe?Nu(Xe):function(e){return $a(e)&&pn(e)==E};function Ma(e){return null!=e&&za(e.length)&&!Ua(e)}function Ra(e){return $a(e)&&Ma(e)}var La=ut||ro,Fa=eu?Nu(eu):function(e){return $a(e)&&pn(e)==l};function Ba(e){if(!$a(e))return!1;var u=pn(e);return u==s||"[object DOMException]"==u||"string"==typeof e.message&&"string"==typeof e.name&&!Ha(e)}function Ua(e){if(!Wa(e))return!1;var u=pn(e);return u==p||u==m||"[object AsyncFunction]"==u||"[object Proxy]"==u}function Da(e){return"number"==typeof e&&e==tc(e)}function za(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Wa(e){var u=typeof e;return null!=e&&("object"==u||"function"==u)}function $a(e){return null!=e&&"object"==typeof e}var Ga=uu?Nu(uu):function(e){return $a(e)&&tr(e)==h};function qa(e){return"number"==typeof e||$a(e)&&pn(e)==v}function Ha(e){if(!$a(e)||pn(e)!=b)return!1;var u=qe(e);if(null===u)return!0;var t=Ie.call(u,"constructor")&&u.constructor;return"function"==typeof t&&t instanceof t&&Ee.call(t)==Oe}var Ka=tu?Nu(tu):function(e){return $a(e)&&pn(e)==y};var Va=nu?Nu(nu):function(e){return $a(e)&&tr(e)==g};function Ja(e){return"string"==typeof e||!Pa(e)&&$a(e)&&pn(e)==_}function Za(e){return"symbol"==typeof e||$a(e)&&pn(e)==x}var Qa=du?Nu(du):function(e){return $a(e)&&za(e.length)&&!!De[pn(e)]};var Ya=Md(An),Xa=Md((function(e,u){return e<=u}));function ec(e){if(!e)return[];if(Ma(e))return Ja(e)?Hu(e):bd(e);if(Ye&&e[Ye])return function(e){for(var u,t=[];!(u=e.next()).done;)t.push(u.value);return t}(e[Ye]());var u=tr(e);return(u==h?Du:u==g?$u:Oc)(e)}function uc(e){return e?(e=dc(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function tc(e){var u=uc(e),t=u%1;return u==u?t?u-t:u:0}function nc(e){return e?Vt(tc(e),0,4294967295):0}function dc(e){if("number"==typeof e)return e;if(Za(e))return NaN;if(Wa(e)){var u="function"==typeof e.valueOf?e.valueOf():e;e=Wa(u)?u+"":u}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(V,"");var t=re.test(e);return t||ce.test(e)?Ge(e.slice(2),t?2:8):de.test(e)?NaN:+e}function rc(e){return yd(e,_c(e))}function ac(e){return null==e?"":Qn(e)}var cc=_d((function(e,u){if(lr(u)||Ma(u))yd(u,gc(u),e);else for(var t in u)Ie.call(u,t)&&Wt(e,t,u[t])})),oc=_d((function(e,u){yd(u,_c(u),e)})),ic=_d((function(e,u,t,n){yd(u,_c(u),e,n)})),fc=_d((function(e,u,t,n){yd(u,gc(u),e,n)})),lc=Gd(Kt);var sc=Bn((function(e,u){e=he(e);var t=-1,n=u.length,d=n>2?u[2]:void 0;for(d&&cr(u[0],u[1],d)&&(n=1);++t1),u})),yd(e,Hd(e),t),n&&(t=Jt(t,7,Wd));for(var d=u.length;d--;)Xn(t,u[d]);return t}));var Ic=Gd((function(e,u){return null==e?{}:function(e,u){return Tn(e,u,(function(u,t){return hc(e,t)}))}(e,u)}));function Sc(e,u){if(null==e)return{};var t=pu(Hd(e),(function(e){return[e]}));return u=Zd(u),Tn(e,t,(function(e,t){return u(e,t[0])}))}var Ac=Bd(gc),kc=Bd(_c);function Oc(e){return null==e?[]:Cu(e,gc(e))}var jc=Id((function(e,u,t){return u=u.toLowerCase(),e+(t?Nc(u):u)}));function Nc(e){return Bc(ac(e).toLowerCase())}function Cc(e){return(e=ac(e))&&e.replace(ie,Lu).replace(Te,"")}var Pc=Id((function(e,u,t){return e+(t?"-":"")+u.toLowerCase()})),Tc=Id((function(e,u,t){return e+(t?" ":"")+u.toLowerCase()})),Mc=Ed("toLowerCase");var Rc=Id((function(e,u,t){return e+(t?"_":"")+u.toLowerCase()}));var Lc=Id((function(e,u,t){return e+(t?" ":"")+Bc(u)}));var Fc=Id((function(e,u,t){return e+(t?" ":"")+u.toUpperCase()})),Bc=Ed("toUpperCase");function Uc(e,u,t){return e=ac(e),void 0===(u=t?void 0:u)?function(e){return Fe.test(e)}(e)?function(e){return e.match(Re)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(u)||[]}var Dc=Bn((function(e,u){try{return ru(e,void 0,u)}catch(t){return Ba(t)?t:new se(t)}})),zc=Gd((function(e,u){return cu(u,(function(u){u=Sr(u),Ht(e,u,ba(e[u],e))})),e}));function Wc(e){return function(){return e}}var $c=kd(),Gc=kd(!0);function qc(e){return e}function Hc(e){return En("function"==typeof e?e:Jt(e,1))}var Kc=Bn((function(e,u){return function(t){return yn(t,e,u)}})),Vc=Bn((function(e,u){return function(t){return yn(e,t,u)}}));function Jc(e,u,t){var n=gc(u),d=fn(u,n);null!=t||Wa(u)&&(d.length||!n.length)||(t=u,u=e,e=this,d=fn(u,gc(u)));var r=!(Wa(t)&&"chain"in t&&!t.chain),a=Ua(e);return cu(d,(function(t){var n=u[t];e[t]=n,a&&(e.prototype[t]=function(){var u=this.__chain__;if(r||u){var t=e(this.__wrapped__),d=t.__actions__=bd(this.__actions__);return d.push({func:n,args:arguments,thisArg:e}),t.__chain__=u,t}return n.apply(e,mu([this.value()],arguments))})})),e}function Zc(){}var Qc=Cd(pu),Yc=Cd(iu),Xc=Cd(bu);function eo(e){return or(e)?Su(Sr(e)):function(e){return function(u){return ln(u,e)}}(e)}var uo=Td(),to=Td(!0);function no(){return[]}function ro(){return!1}var ao=Nd((function(e,u){return e+u}),0),co=Ld("ceil"),oo=Nd((function(e,u){return e/u}),1),io=Ld("floor");var fo,lo=Nd((function(e,u){return e*u}),1),so=Ld("round"),po=Nd((function(e,u){return e-u}),0);return kt.after=function(e,u){if("function"!=typeof u)throw new ye(r);return e=tc(e),function(){if(--e<1)return u.apply(this,arguments)}},kt.ary=ha,kt.assign=cc,kt.assignIn=oc,kt.assignInWith=ic,kt.assignWith=fc,kt.at=lc,kt.before=va,kt.bind=ba,kt.bindAll=zc,kt.bindKey=ya,kt.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Pa(e)?e:[e]},kt.chain=ea,kt.chunk=function(e,u,t){u=(t?cr(e,u,t):void 0===u)?1:rt(tc(u),0);var d=null==e?0:e.length;if(!d||u<1)return[];for(var r=0,a=0,c=n(Yu(d/u));rd?0:d+t),(n=void 0===n||n>d?d:tc(n))<0&&(n+=d),n=t>n?0:nc(n);t>>0)?(e=ac(e))&&("string"==typeof u||null!=u&&!Ka(u))&&!(u=Qn(u))&&Uu(e)?id(Hu(e),0,t):e.split(u,t):[]},kt.spread=function(e,u){if("function"!=typeof e)throw new ye(r);return u=null==u?0:rt(tc(u),0),Bn((function(t){var n=t[u],d=id(t,0,u);return n&&mu(d,n),ru(e,this,d)}))},kt.tail=function(e){var u=null==e?0:e.length;return u?qn(e,1,u):[]},kt.take=function(e,u,t){return e&&e.length?qn(e,0,(u=t||void 0===u?1:tc(u))<0?0:u):[]},kt.takeRight=function(e,u,t){var n=null==e?0:e.length;return n?qn(e,(u=n-(u=t||void 0===u?1:tc(u)))<0?0:u,n):[]},kt.takeRightWhile=function(e,u){return e&&e.length?ud(e,Zd(u,3),!1,!0):[]},kt.takeWhile=function(e,u){return e&&e.length?ud(e,Zd(u,3)):[]},kt.tap=function(e,u){return u(e),e},kt.throttle=function(e,u,t){var n=!0,d=!0;if("function"!=typeof e)throw new ye(r);return Wa(t)&&(n="leading"in t?!!t.leading:n,d="trailing"in t?!!t.trailing:d),ga(e,u,{leading:n,maxWait:u,trailing:d})},kt.thru=ua,kt.toArray=ec,kt.toPairs=Ac,kt.toPairsIn=kc,kt.toPath=function(e){return Pa(e)?pu(e,Sr):Za(e)?[e]:bd(Ir(ac(e)))},kt.toPlainObject=rc,kt.transform=function(e,u,t){var n=Pa(e),d=n||La(e)||Qa(e);if(u=Zd(u,4),null==t){var r=e&&e.constructor;t=d?n?new r:[]:Wa(e)&&Ua(r)?Ot(qe(e)):{}}return(d?cu:cn)(e,(function(e,n,d){return u(t,e,n,d)})),t},kt.unary=function(e){return ha(e,1)},kt.union=$r,kt.unionBy=Gr,kt.unionWith=qr,kt.uniq=function(e){return e&&e.length?Yn(e):[]},kt.uniqBy=function(e,u){return e&&e.length?Yn(e,Zd(u,2)):[]},kt.uniqWith=function(e,u){return u="function"==typeof u?u:void 0,e&&e.length?Yn(e,void 0,u):[]},kt.unset=function(e,u){return null==e||Xn(e,u)},kt.unzip=Hr,kt.unzipWith=Kr,kt.update=function(e,u,t){return null==e?e:ed(e,u,ad(t))},kt.updateWith=function(e,u,t,n){return n="function"==typeof n?n:void 0,null==e?e:ed(e,u,ad(t),n)},kt.values=Oc,kt.valuesIn=function(e){return null==e?[]:Cu(e,_c(e))},kt.without=Vr,kt.words=Uc,kt.wrap=function(e,u){return Sa(ad(u),e)},kt.xor=Jr,kt.xorBy=Zr,kt.xorWith=Qr,kt.zip=Yr,kt.zipObject=function(e,u){return dd(e||[],u||[],Wt)},kt.zipObjectDeep=function(e,u){return dd(e||[],u||[],zn)},kt.zipWith=Xr,kt.entries=Ac,kt.entriesIn=kc,kt.extend=oc,kt.extendWith=ic,Jc(kt,kt),kt.add=ao,kt.attempt=Dc,kt.camelCase=jc,kt.capitalize=Nc,kt.ceil=co,kt.clamp=function(e,u,t){return void 0===t&&(t=u,u=void 0),void 0!==t&&(t=(t=dc(t))==t?t:0),void 0!==u&&(u=(u=dc(u))==u?u:0),Vt(dc(e),u,t)},kt.clone=function(e){return Jt(e,4)},kt.cloneDeep=function(e){return Jt(e,5)},kt.cloneDeepWith=function(e,u){return Jt(e,5,u="function"==typeof u?u:void 0)},kt.cloneWith=function(e,u){return Jt(e,4,u="function"==typeof u?u:void 0)},kt.conformsTo=function(e,u){return null==u||Zt(e,u,gc(u))},kt.deburr=Cc,kt.defaultTo=function(e,u){return null==e||e!=e?u:e},kt.divide=oo,kt.endsWith=function(e,u,t){e=ac(e),u=Qn(u);var n=e.length,d=t=void 0===t?n:Vt(tc(t),0,n);return(t-=u.length)>=0&&e.slice(t,d)==u},kt.eq=Oa,kt.escape=function(e){return(e=ac(e))&&U.test(e)?e.replace(F,Fu):e},kt.escapeRegExp=function(e){return(e=ac(e))&&K.test(e)?e.replace(H,"\\$&"):e},kt.every=function(e,u,t){var n=Pa(e)?iu:un;return t&&cr(e,u,t)&&(u=void 0),n(e,Zd(u,3))},kt.find=da,kt.findIndex=Cr,kt.findKey=function(e,u){return gu(e,Zd(u,3),cn)},kt.findLast=ra,kt.findLastIndex=Pr,kt.findLastKey=function(e,u){return gu(e,Zd(u,3),on)},kt.floor=io,kt.forEach=aa,kt.forEachRight=ca,kt.forIn=function(e,u){return null==e?e:rn(e,Zd(u,3),_c)},kt.forInRight=function(e,u){return null==e?e:an(e,Zd(u,3),_c)},kt.forOwn=function(e,u){return e&&cn(e,Zd(u,3))},kt.forOwnRight=function(e,u){return e&&on(e,Zd(u,3))},kt.get=mc,kt.gt=ja,kt.gte=Na,kt.has=function(e,u){return null!=e&&nr(e,u,hn)},kt.hasIn=hc,kt.head=Mr,kt.identity=qc,kt.includes=function(e,u,t,n){e=Ma(e)?e:Oc(e),t=t&&!n?tc(t):0;var d=e.length;return t<0&&(t=rt(d+t,0)),Ja(e)?t<=d&&e.indexOf(u,t)>-1:!!d&&xu(e,u,t)>-1},kt.indexOf=function(e,u,t){var n=null==e?0:e.length;if(!n)return-1;var d=null==t?0:tc(t);return d<0&&(d=rt(n+d,0)),xu(e,u,d)},kt.inRange=function(e,u,t){return u=uc(u),void 0===t?(t=u,u=0):t=uc(t),function(e,u,t){return e>=at(u,t)&&e=-9007199254740991&&e<=9007199254740991},kt.isSet=Va,kt.isString=Ja,kt.isSymbol=Za,kt.isTypedArray=Qa,kt.isUndefined=function(e){return void 0===e},kt.isWeakMap=function(e){return $a(e)&&tr(e)==w},kt.isWeakSet=function(e){return $a(e)&&"[object WeakSet]"==pn(e)},kt.join=function(e,u){return null==e?"":nt.call(e,u)},kt.kebabCase=Pc,kt.last=Br,kt.lastIndexOf=function(e,u,t){var n=null==e?0:e.length;if(!n)return-1;var d=n;return void 0!==t&&(d=(d=tc(t))<0?rt(n+d,0):at(d,n-1)),u==u?function(e,u,t){for(var n=t+1;n--;)if(e[n]===u)return n;return n}(e,u,d):_u(e,Eu,d,!0)},kt.lowerCase=Tc,kt.lowerFirst=Mc,kt.lt=Ya,kt.lte=Xa,kt.max=function(e){return e&&e.length?tn(e,qc,mn):void 0},kt.maxBy=function(e,u){return e&&e.length?tn(e,Zd(u,2),mn):void 0},kt.mean=function(e){return Iu(e,qc)},kt.meanBy=function(e,u){return Iu(e,Zd(u,2))},kt.min=function(e){return e&&e.length?tn(e,qc,An):void 0},kt.minBy=function(e,u){return e&&e.length?tn(e,Zd(u,2),An):void 0},kt.stubArray=no,kt.stubFalse=ro,kt.stubObject=function(){return{}},kt.stubString=function(){return""},kt.stubTrue=function(){return!0},kt.multiply=lo,kt.nth=function(e,u){return e&&e.length?Cn(e,tc(u)):void 0},kt.noConflict=function(){return Ke._===this&&(Ke._=je),this},kt.noop=Zc,kt.now=ma,kt.pad=function(e,u,t){e=ac(e);var n=(u=tc(u))?qu(e):0;if(!u||n>=u)return e;var d=(u-n)/2;return Pd(Xu(d),t)+e+Pd(Yu(d),t)},kt.padEnd=function(e,u,t){e=ac(e);var n=(u=tc(u))?qu(e):0;return u&&nu){var n=e;e=u,u=n}if(t||e%1||u%1){var d=it();return at(e+d*(u-e+$e("1e-"+((d+"").length-1))),u)}return Ln(e,u)},kt.reduce=function(e,u,t){var n=Pa(e)?hu:ku,d=arguments.length<3;return n(e,Zd(u,4),t,d,Xt)},kt.reduceRight=function(e,u,t){var n=Pa(e)?vu:ku,d=arguments.length<3;return n(e,Zd(u,4),t,d,en)},kt.repeat=function(e,u,t){return u=(t?cr(e,u,t):void 0===u)?1:tc(u),Fn(ac(e),u)},kt.replace=function(){var e=arguments,u=ac(e[0]);return e.length<3?u:u.replace(e[1],e[2])},kt.result=function(e,u,t){var n=-1,d=(u=cd(u,e)).length;for(d||(d=1,e=void 0);++n9007199254740991)return[];var t=4294967295,n=at(e,4294967295);e-=4294967295;for(var d=ju(n,u=Zd(u));++t=r)return e;var c=t-qu(n);if(c<1)return n;var o=a?id(a,0,c).join(""):e.slice(0,c);if(void 0===d)return o+n;if(a&&(c+=o.length-c),Ka(d)){if(e.slice(c).search(d)){var i,f=o;for(d.global||(d=ve(d.source,ac(ne.exec(d))+"g")),d.lastIndex=0;i=d.exec(f);)var l=i.index;o=o.slice(0,void 0===l?c:l)}}else if(e.indexOf(Qn(d),c)!=c){var s=o.lastIndexOf(d);s>-1&&(o=o.slice(0,s))}return o+n},kt.unescape=function(e){return(e=ac(e))&&B.test(e)?e.replace(L,Ku):e},kt.uniqueId=function(e){var u=++Se;return ac(e)+u},kt.upperCase=Fc,kt.upperFirst=Bc,kt.each=aa,kt.eachRight=ca,kt.first=Mr,Jc(kt,(fo={},cn(kt,(function(e,u){Ie.call(kt.prototype,u)||(fo[u]=e)})),fo),{chain:!1}),kt.VERSION="4.17.15",cu(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){kt[e].placeholder=kt})),cu(["drop","take"],(function(e,u){Ct.prototype[e]=function(t){t=void 0===t?1:rt(tc(t),0);var n=this.__filtered__&&!u?new Ct(this):this.clone();return n.__filtered__?n.__takeCount__=at(t,n.__takeCount__):n.__views__.push({size:at(t,4294967295),type:e+(n.__dir__<0?"Right":"")}),n},Ct.prototype[e+"Right"]=function(u){return this.reverse()[e](u).reverse()}})),cu(["filter","map","takeWhile"],(function(e,u){var t=u+1,n=1==t||3==t;Ct.prototype[e]=function(e){var u=this.clone();return u.__iteratees__.push({iteratee:Zd(e,3),type:t}),u.__filtered__=u.__filtered__||n,u}})),cu(["head","last"],(function(e,u){var t="take"+(u?"Right":"");Ct.prototype[e]=function(){return this[t](1).value()[0]}})),cu(["initial","tail"],(function(e,u){var t="drop"+(u?"":"Right");Ct.prototype[e]=function(){return this.__filtered__?new Ct(this):this[t](1)}})),Ct.prototype.compact=function(){return this.filter(qc)},Ct.prototype.find=function(e){return this.filter(e).head()},Ct.prototype.findLast=function(e){return this.reverse().find(e)},Ct.prototype.invokeMap=Bn((function(e,u){return"function"==typeof e?new Ct(this):this.map((function(t){return yn(t,e,u)}))})),Ct.prototype.reject=function(e){return this.filter(Ea(Zd(e)))},Ct.prototype.slice=function(e,u){e=tc(e);var t=this;return t.__filtered__&&(e>0||u<0)?new Ct(t):(e<0?t=t.takeRight(-e):e&&(t=t.drop(e)),void 0!==u&&(t=(u=tc(u))<0?t.dropRight(-u):t.take(u-e)),t)},Ct.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Ct.prototype.toArray=function(){return this.take(4294967295)},cn(Ct.prototype,(function(e,u){var t=/^(?:filter|find|map|reject)|While$/.test(u),n=/^(?:head|last)$/.test(u),d=kt[n?"take"+("last"==u?"Right":""):u],r=n||/^find/.test(u);d&&(kt.prototype[u]=function(){var u=this.__wrapped__,a=n?[1]:arguments,c=u instanceof Ct,o=a[0],i=c||Pa(u),f=function(e){var u=d.apply(kt,mu([e],a));return n&&l?u[0]:u};i&&t&&"function"==typeof o&&1!=o.length&&(c=i=!1);var l=this.__chain__,s=!!this.__actions__.length,p=r&&!l,m=c&&!s;if(!r&&i){u=m?u:new Ct(this);var h=e.apply(u,a);return h.__actions__.push({func:ua,args:[f],thisArg:void 0}),new Nt(h,l)}return p&&m?e.apply(this,a):(h=this.thru(f),p?n?h.value()[0]:h.value():h)})})),cu(["pop","push","shift","sort","splice","unshift"],(function(e){var u=ge[e],t=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);kt.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var d=this.value();return u.apply(Pa(d)?d:[],e)}return this[t]((function(t){return u.apply(Pa(t)?t:[],e)}))}})),cn(Ct.prototype,(function(e,u){var t=kt[u];if(t){var n=t.name+"";Ie.call(yt,n)||(yt[n]=[]),yt[n].push({name:u,func:t})}})),yt[Od(void 0,2).name]=[{name:"wrapper",func:void 0}],Ct.prototype.clone=function(){var e=new Ct(this.__wrapped__);return e.__actions__=bd(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=bd(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=bd(this.__views__),e},Ct.prototype.reverse=function(){if(this.__filtered__){var e=new Ct(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Ct.prototype.value=function(){var e=this.__wrapped__.value(),u=this.__dir__,t=Pa(e),n=u<0,d=t?e.length:0,r=function(e,u,t){var n=-1,d=t.length;for(;++n=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},kt.prototype.plant=function(e){for(var u,t=this;t instanceof jt;){var n=kr(t);n.__index__=0,n.__values__=void 0,u?d.__wrapped__=n:u=n;var d=n;t=t.__wrapped__}return d.__wrapped__=e,u},kt.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Ct){var u=e;return this.__actions__.length&&(u=new Ct(this)),(u=u.reverse()).__actions__.push({func:ua,args:[Wr],thisArg:void 0}),new Nt(u,this.__chain__)}return this.thru(Wr)},kt.prototype.toJSON=kt.prototype.valueOf=kt.prototype.value=function(){return td(this.__wrapped__,this.__actions__)},kt.prototype.first=kt.prototype.head,Ye&&(kt.prototype[Ye]=function(){return this}),kt}();Ke._=Vu,void 0===(d=function(){return Vu}.call(u,t,u,n))||(n.exports=d)}).call(this)}).call(this,t(76),t(448)(e))},446:function(e,u,t){"use strict";var n=t(0),d=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});u.a=d},448:function(e,u){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},461:function(e,u,t){"use strict";var n=SyntaxError,d=Function,r=TypeError,a=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(u){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(k){c=null}var o=function(){throw new r},i=c?function(){try{return o}catch(e){try{return c(arguments,"callee").get}catch(u){return o}}}():o,f=t(499)(),l=Object.getPrototypeOf||function(e){return e.__proto__},s={},p="undefined"==typeof Uint8Array?void 0:l(Uint8Array),m={"%AggregateError%":"undefined"==typeof AggregateError?void 0:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayIteratorPrototype%":f?l([][Symbol.iterator]()):void 0,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":s,"%AsyncGenerator%":s,"%AsyncGeneratorFunction%":s,"%AsyncIteratorPrototype%":s,"%Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"%BigInt%":"undefined"==typeof BigInt?void 0:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?void 0:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":s,"%Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?l(l([][Symbol.iterator]())):void 0,"%JSON%":"object"==typeof JSON?JSON:void 0,"%Map%":"undefined"==typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?l((new Map)[Symbol.iterator]()):void 0,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?void 0:Promise,"%Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?l((new Set)[Symbol.iterator]()):void 0,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?l(""[Symbol.iterator]()):void 0,"%Symbol%":f?Symbol:void 0,"%SyntaxError%":n,"%ThrowTypeError%":i,"%TypedArray%":p,"%TypeError%":r,"%Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?void 0:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet},h={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},v=t(462),b=t(502),y=v.call(Function.call,Array.prototype.concat),g=v.call(Function.apply,Array.prototype.splice),_=v.call(Function.call,String.prototype.replace),x=v.call(Function.call,String.prototype.slice),w=v.call(Function.call,RegExp.prototype.exec),E=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,S=function(e){var u=x(e,0,1),t=x(e,-1);if("%"===u&&"%"!==t)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===t&&"%"!==u)throw new n("invalid intrinsic syntax, expected opening `%`");var d=[];return _(e,E,(function(e,u,t,n){d[d.length]=t?_(n,I,"$1"):u||e})),d},A=function(e,u){var t,d=e;if(b(h,d)&&(d="%"+(t=h[d])[0]+"%"),b(m,d)){var c=m[d];if(c===s&&(c=function e(u){var t;if("%AsyncFunction%"===u)t=a("async function () {}");else if("%GeneratorFunction%"===u)t=a("function* () {}");else if("%AsyncGeneratorFunction%"===u)t=a("async function* () {}");else if("%AsyncGenerator%"===u){var n=e("%AsyncGeneratorFunction%");n&&(t=n.prototype)}else if("%AsyncIteratorPrototype%"===u){var d=e("%AsyncGenerator%");d&&(t=l(d.prototype))}return m[u]=t,t}(d)),void 0===c&&!u)throw new r("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:t,name:d,value:c}}throw new n("intrinsic "+e+" does not exist!")};e.exports=function(e,u){if("string"!=typeof e||0===e.length)throw new r("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof u)throw new r('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,e))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var t=S(e),d=t.length>0?t[0]:"",a=A("%"+d+"%",u),o=a.name,i=a.value,f=!1,l=a.alias;l&&(d=l[0],g(t,y([0,1],l)));for(var s=1,p=!0;s=t.length){var E=c(i,h);i=(p=!!E)&&"get"in E&&!("originalValue"in E.get)?E.get:i[h]}else p=b(i,h),i=i[h];p&&!f&&(m[o]=i)}}return i}},462:function(e,u,t){"use strict";var n=t(501);e.exports=Function.prototype.bind||n},463:function(e,u,t){"use strict";var n=String.prototype.replace,d=/%20/g,r="RFC1738",a="RFC3986";e.exports={default:a,formatters:{RFC1738:function(e){return n.call(e,d,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:a}},470:function(e,u,t){"use strict";var n=t(463),d=Object.prototype.hasOwnProperty,r=Array.isArray,a=function(){for(var e=[],u=0;u<256;++u)e.push("%"+((u<16?"0":"")+u.toString(16)).toUpperCase());return e}(),c=function(e,u){for(var t=u&&u.plainObjects?Object.create(null):{},n=0;n1;){var u=e.pop(),t=u.obj[u.prop];if(r(t)){for(var n=[],d=0;d=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||r===n.RFC1738&&(40===f||41===f)?o+=c.charAt(i):f<128?o+=a[f]:f<2048?o+=a[192|f>>6]+a[128|63&f]:f<55296||f>=57344?o+=a[224|f>>12]+a[128|f>>6&63]+a[128|63&f]:(i+=1,f=65536+((1023&f)<<10|1023&c.charCodeAt(i)),o+=a[240|f>>18]+a[128|f>>12&63]+a[128|f>>6&63]+a[128|63&f])}return o},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,u){if(r(e)){for(var t=[],n=0;n{if("string"!=typeof e)throw new TypeError("Expected a string");return e=(e=(e=n(e)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+e.slice(1)};e.exports=d,e.exports.default=d},478:function(e,u){e.exports=Object.is||function(e,u){return e===u?0!==e||1/e==1/u:e!=e&&u!=u}},481:function(e,u,t){"use strict";var n=t(30),d=t(12),r=t(27),a=t(91),c=t(92),o=t(26),i=t(537),f=t(93);d(d.S+d.F*!t(83)((function(e){Array.from(e)})),"Array",{from:function(e){var u,t,d,l,s=r(e),p="function"==typeof this?this:Array,m=arguments.length,h=m>1?arguments[1]:void 0,v=void 0!==h,b=0,y=f(s);if(v&&(h=n(h,m>2?arguments[2]:void 0,2)),null==y||p==Array&&c(y))for(t=new p(u=o(s.length));u>b;b++)i(t,b,v?h(s[b],b):s[b]);else for(l=y.call(s),t=new p;!(d=l.next()).done;b++)i(t,b,v?a(l,h,[d.value,b],!0):d.value);return t.length=b,t}})},482:function(e,u,t){"use strict";var n=t(538),d=t(484);e.exports=t(539)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return n.def(d(this,"Set"),e=0===e?0:e,e)}},n)},483:function(e,u,t){var n=t(40)("meta"),d=t(13),r=t(31),a=t(28).f,c=0,o=Object.isExtensible||function(){return!0},i=!t(14)((function(){return o(Object.preventExtensions({}))})),f=function(e){a(e,n,{value:{i:"O"+ ++c,w:{}}})},l=e.exports={KEY:n,NEED:!1,fastKey:function(e,u){if(!d(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!r(e,n)){if(!o(e))return"F";if(!u)return"E";f(e)}return e[n].i},getWeak:function(e,u){if(!r(e,n)){if(!o(e))return!0;if(!u)return!1;f(e)}return e[n].w},onFreeze:function(e){return i&&l.NEED&&o(e)&&!r(e,n)&&f(e),e}}},484:function(e,u,t){var n=t(13);e.exports=function(e,u){if(!n(e)||e._t!==u)throw TypeError("Incompatible receiver, "+u+" required!");return e}},485:function(e,u,t){"use strict";const n=t(486);e.exports=(e,u)=>{if("string"!=typeof e)throw new TypeError("Expected a string");u=void 0===u?"_":u;const t=n("([\\p{Ll}\\d])(\\p{Lu})","g"),d=n("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return e.replace(t,`$1${u}$2`).replace(d,`$1${u}$2`).toLowerCase()}},486:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0});var n=l(t(487)),d=l(t(488)),r=l(t(489)),a=l(t(490)),c=l(t(491)),o=l(t(492)),i=l(t(493)),f=l(t(494));function l(e){return e&&e.__esModule?e:{default:e}}(0,d.default)(n.default),(0,r.default)(n.default),(0,a.default)(n.default),(0,c.default)(n.default),(0,o.default)(n.default),(0,i.default)(n.default),(0,f.default)(n.default),u.default=n.default,e.exports=u.default},487:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0});var n={astral:!1},d={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},a={},c={},o=[],i={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},f=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,l=void 0===d.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(e){var u=!0;try{new RegExp("",e)}catch(t){u=!1}return u}var h=m("u"),v=m("y"),b={g:!0,i:!0,m:!0,u:h,y:v};function y(e,u,t,n,d){var r=void 0;if(e.xregexp={captureNames:u},d)return e;if(e.__proto__)e.__proto__=C.prototype;else for(r in C.prototype)e[r]=C.prototype[r];return e.xregexp.source=t,e.xregexp.flags=n?n.split("").sort().join(""):n,e}function g(e){return d.replace.call(e,/([\s\S])(?=[\s\S]*\1)/g,"")}function _(e,u){if(!C.isRegExp(e))throw new TypeError("Type RegExp expected");var t=e.xregexp||{},n=function(e){return s?e.flags:d.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(e))[1]}(e),r="",a="",c=null,o=null;return(u=u||{}).removeG&&(a+="g"),u.removeY&&(a+="y"),a&&(n=d.replace.call(n,new RegExp("["+a+"]+","g"),"")),u.addG&&(r+="g"),u.addY&&(r+="y"),r&&(n=g(n+r)),u.isInternalOnly||(void 0!==t.source&&(c=t.source),null!=t.flags&&(o=r?g(t.flags+r):t.flags)),e=y(new RegExp(u.source||e.source,n),function(e){return!(!e.xregexp||!e.xregexp.captureNames)}(e)?t.captureNames.slice(0):null,c,o,u.isInternalOnly)}function x(e){return parseInt(e,16)}function w(e,u,t){return"("===e.input[e.index-1]||")"===e.input[e.index+e[0].length]||function(e,u,t){return d.test.call(-1!==t.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,e.slice(u))}(e.input,e.index+e[0].length,t)?"":"(?:)"}function E(e){return parseInt(e,10).toString(16)}function I(e,u){return p.call(e)==="[object "+u+"]"}function S(e){for(;e.length<4;)e="0"+e;return e}function A(e){var u={};return I(e,"String")?(C.forEach(e,/[^\s,]+/,(function(e){u[e]=!0})),u):e}function k(e){if(!/^[\w$]$/.test(e))throw new Error("Flag must be a single character A-Za-z0-9_$");b[e]=!0}function O(e,u,t,n,d){for(var r=o.length,a=e[t],c=null,i=void 0,f=void 0;r--;)if(!((f=o[r]).leadChar&&f.leadChar!==a||f.scope!==n&&"all"!==f.scope||f.flag&&-1===u.indexOf(f.flag))&&(i=C.exec(e,f.regex,t,"sticky"))){c={matchLength:i[0].length,output:f.handler.call(d,i,n,u),reparse:f.reparse};break}return c}function j(e){n.astral=e}function N(e){if(null==e)throw new TypeError("Cannot convert null or undefined to object");return e}function C(e,u){if(C.isRegExp(e)){if(void 0!==u)throw new TypeError("Cannot supply flags when copying a RegExp");return _(e)}if(e=void 0===e?"":String(e),u=void 0===u?"":String(u),C.isInstalled("astral")&&-1===u.indexOf("A")&&(u+="A"),c[e]||(c[e]={}),!c[e][u]){for(var t={hasNamedCapture:!1,captureNames:[]},n="default",r="",a=0,o=void 0,f=function(e,u){var t=void 0;if(g(u)!==u)throw new SyntaxError("Invalid duplicate regex flag "+u);for(e=d.replace.call(e,/^\(\?([\w$]+)\)/,(function(e,t){if(d.test.call(/[gy]/,t))throw new SyntaxError("Cannot use flag g or y in mode modifier "+e);return u=g(u+t),""})),t=0;t"}else if(t)return"\\"+(+t+a);return e}if(!I(e,"Array")||!e.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,f=[],l=void 0,s=0;s1&&-1!==t.indexOf("")){var n=_(this,{removeG:!0,isInternalOnly:!0});d.replace.call(String(e).slice(t.index),n,(function(){for(var e=arguments.length,u=Array(e),n=0;nt.index&&(this.lastIndex=t.index)}return this.global||(this.lastIndex=u),t},r.test=function(e){return!!r.exec.call(this,e)},r.match=function(e){if(C.isRegExp(e)){if(e.global){var u=d.match.apply(this,arguments);return e.lastIndex=0,u}}else e=new RegExp(e);return r.exec.call(e,N(this))},r.replace=function(e,u){var t=C.isRegExp(e),n=void 0,r=void 0,a=void 0;return t?(e.xregexp&&(r=e.xregexp.captureNames),n=e.lastIndex):e+="",a=I(u,"Function")?d.replace.call(String(this),e,(function(){for(var n=arguments.length,d=Array(n),a=0;at.length-3)throw new SyntaxError("Backreference to undefined group "+e);return t[d]||""}throw new SyntaxError("Invalid token "+e)}})),t&&(e.global?e.lastIndex=0:e.lastIndex=n),a},r.split=function(e,u){if(!C.isRegExp(e))return d.split.apply(this,arguments);var t=String(this),n=[],r=e.lastIndex,a=0,c=void 0;return u=(void 0===u?-1:u)>>>0,C.forEach(t,e,(function(e){e.index+e[0].length>a&&(n.push(t.slice(a,e.index)),e.length>1&&e.indexu?n.slice(0,u):n},C.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(e,u){if("B"===e[1]&&"default"===u)return e[0];throw new SyntaxError("Invalid escape "+e[0])}),{scope:"all",leadChar:"\\"}),C.addToken(/\\u{([\dA-Fa-f]+)}/,(function(e,u,t){var n=x(e[1]);if(n>1114111)throw new SyntaxError("Invalid Unicode code point "+e[0]);if(n<=65535)return"\\u"+S(E(n));if(h&&-1!==t.indexOf("u"))return e[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),C.addToken(/\[(\^?)\]/,(function(e){return e[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),C.addToken(/\(\?#[^)]*\)/,w,{leadChar:"("}),C.addToken(/\s+|#[^\n]*\n?/,w,{flag:"x"}),C.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),C.addToken(/\\k<([\w$]+)>/,(function(e){var u=isNaN(e[1])?this.captureNames.indexOf(e[1])+1:+e[1],t=e.index+e[0].length;if(!u||u>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+e[0]);return"\\"+u+(t===e.input.length||isNaN(e.input[t])?"":"(?:)")}),{leadChar:"\\"}),C.addToken(/\\(\d+)/,(function(e,u){if(!("default"===u&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&"0"!==e[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+e[0]);return e[0]}),{scope:"all",leadChar:"\\"}),C.addToken(/\(\?P?<([\w$]+)>/,(function(e){if(!isNaN(e[1]))throw new SyntaxError("Cannot use integer as capture name "+e[0]);if("length"===e[1]||"__proto__"===e[1])throw new SyntaxError("Cannot use reserved word as capture name "+e[0]);if(-1!==this.captureNames.indexOf(e[1]))throw new SyntaxError("Cannot use same name for multiple groups "+e[0]);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),C.addToken(/\((?!\?)/,(function(e,u,t){return-1!==t.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),u.default=C,e.exports=u.default},488:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){var u=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,t=e.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,u],"g",{conjunction:"or"});function n(e){var u=/^(?:\(\?:\))*\^/,t=/\$(?:\(\?:\))*$/;return u.test(e)&&t.test(e)&&t.test(e.replace(/\\[\s\S]/g,""))?e.replace(u,"").replace(t,""):e}function d(u,t){var n=t?"x":"";return e.isRegExp(u)?u.xregexp&&u.xregexp.captureNames?u:e(u.source,n):e(u,n)}function r(u){return u instanceof RegExp?u:e.escape(u)}function a(e,u,t){return e["subpattern"+t]=u,e}function c(e,u,t){return e+(u1?n-1:0),o=1;o"):o="(?:",h=m,""+o+f[a].pattern.replace(u,(function(e,u,t){if(u){if(c=f[a].names[m-h],++m,c)return"(?<"+c+">"}else if(t)return i=+t-1,f[a].names[i]?"\\k<"+f[a].names[i]+">":"\\"+(+t+h);return e}))+")"}if(d){if(c=y[v],b[++v]=++m,c)return"(?<"+c+">"}else if(r)return y[i=+r-1]?"\\k<"+y[i]+">":"\\"+b[+r];return e}));return e(g,c)}},e.exports=u.default},489:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){function u(e,u,t,n){return{name:e,value:u,start:t,end:n}}e.matchRecursive=function(t,n,d,r,a){a=a||{};var c=-1!==(r=r||"").indexOf("g"),o=-1!==r.indexOf("y"),i=r.replace(/y/g,""),f=a.escapeChar,l=a.valueNames,s=[],p=0,m=0,h=0,v=0,b=void 0,y=void 0,g=void 0,_=void 0,x=void 0;if(n=e(n,i),d=e(d,i),f){if(f.length>1)throw new Error("Cannot use more than one escape character");f=e.escape(f),x=new RegExp("(?:"+f+"[\\S\\s]|(?:(?!"+e.union([n,d],"",{conjunction:"or"}).source+")[^"+f+"])+)+",r.replace(/[^imu]+/g,""))}for(;;){if(f&&(h+=(e.exec(t,x,h,"sticky")||[""])[0].length),g=e.exec(t,n,h),_=e.exec(t,d,h),g&&_&&(g.index<=_.index?_=null:g=null),g||_)h=(m=(g||_).index)+(g||_)[0].length;else if(!p)break;if(o&&!p&&m>v)break;if(g)p||(b=m,y=h),++p;else{if(!_||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(l?(l[0]&&b>v&&s.push(u(l[0],t.slice(v,b),v,b)),l[1]&&s.push(u(l[1],t.slice(b,y),b,y)),l[2]&&s.push(u(l[2],t.slice(y,m),y,m)),l[3]&&s.push(u(l[3],t.slice(m,h),m,h))):s.push(t.slice(y,m)),v=h,!c))break}m===h&&++h}return c&&!o&&l&&l[0]&&t.length>v&&s.push(u(l[0],t.slice(v),v,t.length)),s}},e.exports=u.default},490:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){var u={},t=e._dec,n=e._hex,d=e._pad4;function r(e){return e.replace(/[- _]+/g,"").toLowerCase()}function a(e){var u=/^\\[xu](.+)/.exec(e);return u?t(u[1]):e.charCodeAt("\\"===e[0]?1:0)}function c(t){var r,c,o;return u[t]["b!"]||(u[t]["b!"]=(r=u[t].bmp,c="",o=-1,e.forEach(r,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(e){var u=a(e[1]);u>o+1&&(c+="\\u"+d(n(o+1)),u>o+2&&(c+="-\\u"+d(n(u-1)))),o=a(e[2]||e[1])})),o<65535&&(c+="\\u"+d(n(o+1)),o<65534&&(c+="-\\uFFFF")),c))}function o(e,t){var n=t?"a!":"a=";return u[e][n]||(u[e][n]=function(e,t){var n=u[e],d="";return n.bmp&&!n.isBmpLast&&(d="["+n.bmp+"]"+(n.astral?"|":"")),n.astral&&(d+=n.astral),n.isBmpLast&&n.bmp&&(d+=(n.astral?"|":"")+"["+n.bmp+"]"),t?"(?:(?!"+d+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+d+")"}(e,t))}e.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(e,t,n){var d="P"===e[1]||!!e[2],a=-1!==n.indexOf("A"),i=r(e[4]||e[3]),f=u[i];if("P"===e[1]&&e[2])throw new SyntaxError("Invalid double negation "+e[0]);if(!u.hasOwnProperty(i))throw new SyntaxError("Unknown Unicode token "+e[0]);if(f.inverseOf){if(i=r(f.inverseOf),!u.hasOwnProperty(i))throw new ReferenceError("Unicode token missing data "+e[0]+" -> "+f.inverseOf);f=u[i],d=!d}if(!f.bmp&&!a)throw new SyntaxError("Astral mode required for Unicode token "+e[0]);if(a){if("class"===t)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return o(i,d)}return"class"===t?d?c(i):f.bmp:(d?"[^":"[")+f.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),e.addUnicodeData=function(t){for(var n=void 0,d=0;d\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},e.exports=u.default},493:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var u=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];u.push({name:"Assigned",inverseOf:"Cn"}),e.addUnicodeData(u)},e.exports=u.default},494:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");e.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},e.exports=u.default},495:function(e,u,t){"use strict";var n=t(0),d=t.n(n);u.a=function(e){var u=e.text;return d.a.createElement("section",{className:"empty"},d.a.createElement("div",{className:"icon"},d.a.createElement("img",{src:"/img/logo-square.svg",alt:"The Qovery Logo"})),d.a.createElement("div",{className:"text"},u))}},496:function(e,u,t){"use strict";var n=t(497),d=t(507),r=t(463);e.exports={formats:r,parse:d,stringify:n}},497:function(e,u,t){"use strict";var n=t(498),d=t(470),r=t(463),a=Object.prototype.hasOwnProperty,c={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,u){return e+"["+u+"]"},repeat:function(e){return e}},o=Array.isArray,i=String.prototype.split,f=Array.prototype.push,l=function(e,u){f.apply(e,o(u)?u:[u])},s=Date.prototype.toISOString,p=r.default,m={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:d.encode,encodeValuesOnly:!1,format:p,formatter:r.formatters[p],indices:!1,serializeDate:function(e){return s.call(e)},skipNulls:!1,strictNullHandling:!1},h={},v=function e(u,t,r,a,c,f,s,p,v,b,y,g,_,x,w,E){for(var I,S=u,A=E,k=0,O=!1;void 0!==(A=A.get(h))&&!O;){var j=A.get(u);if(k+=1,void 0!==j){if(j===k)throw new RangeError("Cyclic object value");O=!0}void 0===A.get(h)&&(k=0)}if("function"==typeof p?S=p(t,S):S instanceof Date?S=y(S):"comma"===r&&o(S)&&(S=d.maybeMap(S,(function(e){return e instanceof Date?y(e):e}))),null===S){if(c)return s&&!x?s(t,m.encoder,w,"key",g):t;S=""}if("string"==typeof(I=S)||"number"==typeof I||"boolean"==typeof I||"symbol"==typeof I||"bigint"==typeof I||d.isBuffer(S)){if(s){var N=x?t:s(t,m.encoder,w,"key",g);if("comma"===r&&x){for(var C=i.call(String(S),","),P="",T=0;T0?S.join(",")||null:void 0}];else if(o(p))M=p;else{var L=Object.keys(S);M=v?L.sort(v):L}for(var F=a&&o(S)&&1===S.length?t+"[]":t,B=0;B0?x+_:""}},498:function(e,u,t){"use strict";var n=t(461),d=t(503),r=t(505),a=n("%TypeError%"),c=n("%WeakMap%",!0),o=n("%Map%",!0),i=d("WeakMap.prototype.get",!0),f=d("WeakMap.prototype.set",!0),l=d("WeakMap.prototype.has",!0),s=d("Map.prototype.get",!0),p=d("Map.prototype.set",!0),m=d("Map.prototype.has",!0),h=function(e,u){for(var t,n=e;null!==(t=n.next);n=t)if(t.key===u)return n.next=t.next,t.next=e.next,e.next=t,t};e.exports=function(){var e,u,t,n={assert:function(e){if(!n.has(e))throw new a("Side channel does not contain "+r(e))},get:function(n){if(c&&n&&("object"==typeof n||"function"==typeof n)){if(e)return i(e,n)}else if(o){if(u)return s(u,n)}else if(t)return function(e,u){var t=h(e,u);return t&&t.value}(t,n)},has:function(n){if(c&&n&&("object"==typeof n||"function"==typeof n)){if(e)return l(e,n)}else if(o){if(u)return m(u,n)}else if(t)return function(e,u){return!!h(e,u)}(t,n);return!1},set:function(n,d){c&&n&&("object"==typeof n||"function"==typeof n)?(e||(e=new c),f(e,n,d)):o?(u||(u=new o),p(u,n,d)):(t||(t={key:{},next:null}),function(e,u,t){var n=h(e,u);n?n.value=t:e.next={key:u,next:e.next,value:t}}(t,n,d))}};return n}},499:function(e,u,t){"use strict";var n="undefined"!=typeof Symbol&&Symbol,d=t(500);e.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&d())))}},500:function(e,u,t){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},u=Symbol("test"),t=Object(u);if("string"==typeof u)return!1;if("[object Symbol]"!==Object.prototype.toString.call(u))return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;for(u in e[u]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==u)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,u))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var d=Object.getOwnPropertyDescriptor(e,u);if(42!==d.value||!0!==d.enumerable)return!1}return!0}},501:function(e,u,t){"use strict";var n="Function.prototype.bind called on incompatible ",d=Array.prototype.slice,r=Object.prototype.toString;e.exports=function(e){var u=this;if("function"!=typeof u||"[object Function]"!==r.call(u))throw new TypeError(n+u);for(var t,a=d.call(arguments,1),c=function(){if(this instanceof t){var n=u.apply(this,a.concat(d.call(arguments)));return Object(n)===n?n:this}return u.apply(e,a.concat(d.call(arguments)))},o=Math.max(0,u.length-a.length),i=[],f=0;f-1?d(t):t}},504:function(e,u,t){"use strict";var n=t(462),d=t(461),r=d("%Function.prototype.apply%"),a=d("%Function.prototype.call%"),c=d("%Reflect.apply%",!0)||n.call(a,r),o=d("%Object.getOwnPropertyDescriptor%",!0),i=d("%Object.defineProperty%",!0),f=d("%Math.max%");if(i)try{i({},"a",{value:1})}catch(s){i=null}e.exports=function(e){var u=c(n,a,arguments);if(o&&i){var t=o(u,"length");t.configurable&&i(u,"length",{value:1+f(0,e.length-(arguments.length-1))})}return u};var l=function(){return c(n,r,arguments)};i?i(e.exports,"apply",{value:l}):e.exports.apply=l},505:function(e,u,t){var n="function"==typeof Map&&Map.prototype,d=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,r=n&&d&&"function"==typeof d.get?d.get:null,a=n&&Map.prototype.forEach,c="function"==typeof Set&&Set.prototype,o=Object.getOwnPropertyDescriptor&&c?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,i=c&&o&&"function"==typeof o.get?o.get:null,f=c&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,s="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,m=Boolean.prototype.valueOf,h=Object.prototype.toString,v=Function.prototype.toString,b=String.prototype.match,y=String.prototype.slice,g=String.prototype.replace,_=String.prototype.toUpperCase,x=String.prototype.toLowerCase,w=RegExp.prototype.test,E=Array.prototype.concat,I=Array.prototype.join,S=Array.prototype.slice,A=Math.floor,k="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,N="function"==typeof Symbol&&"object"==typeof Symbol.iterator,C="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===N||"symbol")?Symbol.toStringTag:null,P=Object.prototype.propertyIsEnumerable,T=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function M(e,u){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||w.call(/e/,u))return u;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var n=e<0?-A(-e):A(e);if(n!==e){var d=String(n),r=y.call(u,d.length+1);return g.call(d,t,"$&_")+"."+g.call(g.call(r,/([0-9]{3})/g,"$&_"),/_$/,"")}}return g.call(u,t,"$&_")}var R=t(506),L=R.custom,F=W(L)?L:null;function B(e,u,t){var n="double"===(t.quoteStyle||u)?'"':"'";return n+e+n}function U(e){return g.call(String(e),/"/g,""")}function D(e){return!("[object Array]"!==q(e)||C&&"object"==typeof e&&C in e)}function z(e){return!("[object RegExp]"!==q(e)||C&&"object"==typeof e&&C in e)}function W(e){if(N)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!j)return!1;try{return j.call(e),!0}catch(u){}return!1}e.exports=function e(u,t,n,d){var c=t||{};if(G(c,"quoteStyle")&&"single"!==c.quoteStyle&&"double"!==c.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(G(c,"maxStringLength")&&("number"==typeof c.maxStringLength?c.maxStringLength<0&&c.maxStringLength!==1/0:null!==c.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var o=!G(c,"customInspect")||c.customInspect;if("boolean"!=typeof o&&"symbol"!==o)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(G(c,"indent")&&null!==c.indent&&"\t"!==c.indent&&!(parseInt(c.indent,10)===c.indent&&c.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(G(c,"numericSeparator")&&"boolean"!=typeof c.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=c.numericSeparator;if(void 0===u)return"undefined";if(null===u)return"null";if("boolean"==typeof u)return u?"true":"false";if("string"==typeof u)return function e(u,t){if(u.length>t.maxStringLength){var n=u.length-t.maxStringLength,d="... "+n+" more character"+(n>1?"s":"");return e(y.call(u,0,t.maxStringLength),t)+d}return B(g.call(g.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}(u,c);if("number"==typeof u){if(0===u)return 1/0/u>0?"0":"-0";var _=String(u);return h?M(u,_):_}if("bigint"==typeof u){var w=String(u)+"n";return h?M(u,w):w}var A=void 0===c.depth?5:c.depth;if(void 0===n&&(n=0),n>=A&&A>0&&"object"==typeof u)return D(u)?"[Array]":"[Object]";var O=function(e,u){var t;if("\t"===e.indent)t="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;t=I.call(Array(e.indent+1)," ")}return{base:t,prev:I.call(Array(u+1),t)}}(c,n);if(void 0===d)d=[];else if(H(d,u)>=0)return"[Circular]";function L(u,t,r){if(t&&(d=S.call(d)).push(t),r){var a={depth:c.depth};return G(c,"quoteStyle")&&(a.quoteStyle=c.quoteStyle),e(u,a,n+1,d)}return e(u,c,n+1,d)}if("function"==typeof u&&!z(u)){var $=function(e){if(e.name)return e.name;var u=b.call(v.call(e),/^function\s*([\w$]+)/);if(u)return u[1];return null}(u),X=Y(u,L);return"[Function"+($?": "+$:" (anonymous)")+"]"+(X.length>0?" { "+I.call(X,", ")+" }":"")}if(W(u)){var ee=N?g.call(String(u),/^(Symbol\(.*\))_[^)]*$/,"$1"):j.call(u);return"object"!=typeof u||N?ee:V(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(u)){for(var ue="<"+x.call(String(u.nodeName)),te=u.attributes||[],ne=0;ne"}if(D(u)){if(0===u.length)return"[]";var de=Y(u,L);return O&&!function(e){for(var u=0;u=0)return!1;return!0}(de)?"["+Q(de,O)+"]":"[ "+I.call(de,", ")+" ]"}if(function(e){return!("[object Error]"!==q(e)||C&&"object"==typeof e&&C in e)}(u)){var re=Y(u,L);return"cause"in Error.prototype||!("cause"in u)||P.call(u,"cause")?0===re.length?"["+String(u)+"]":"{ ["+String(u)+"] "+I.call(re,", ")+" }":"{ ["+String(u)+"] "+I.call(E.call("[cause]: "+L(u.cause),re),", ")+" }"}if("object"==typeof u&&o){if(F&&"function"==typeof u[F]&&R)return R(u,{depth:A-n});if("symbol"!==o&&"function"==typeof u.inspect)return u.inspect()}if(function(e){if(!r||!e||"object"!=typeof e)return!1;try{r.call(e);try{i.call(e)}catch(ue){return!0}return e instanceof Map}catch(u){}return!1}(u)){var ae=[];return a.call(u,(function(e,t){ae.push(L(t,u,!0)+" => "+L(e,u))})),Z("Map",r.call(u),ae,O)}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{r.call(e)}catch(u){return!0}return e instanceof Set}catch(t){}return!1}(u)){var ce=[];return f.call(u,(function(e){ce.push(L(e,u))})),Z("Set",i.call(u),ce,O)}if(function(e){if(!l||!e||"object"!=typeof e)return!1;try{l.call(e,l);try{s.call(e,s)}catch(ue){return!0}return e instanceof WeakMap}catch(u){}return!1}(u))return J("WeakMap");if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e,s);try{l.call(e,l)}catch(ue){return!0}return e instanceof WeakSet}catch(u){}return!1}(u))return J("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(u){}return!1}(u))return J("WeakRef");if(function(e){return!("[object Number]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(L(Number(u)));if(function(e){if(!e||"object"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(u){}return!1}(u))return V(L(k.call(u)));if(function(e){return!("[object Boolean]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(m.call(u));if(function(e){return!("[object String]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(L(String(u)));if(!function(e){return!("[object Date]"!==q(e)||C&&"object"==typeof e&&C in e)}(u)&&!z(u)){var oe=Y(u,L),ie=T?T(u)===Object.prototype:u instanceof Object||u.constructor===Object,fe=u instanceof Object?"":"null prototype",le=!ie&&C&&Object(u)===u&&C in u?y.call(q(u),8,-1):fe?"Object":"",se=(ie||"function"!=typeof u.constructor?"":u.constructor.name?u.constructor.name+" ":"")+(le||fe?"["+I.call(E.call([],le||[],fe||[]),": ")+"] ":"");return 0===oe.length?se+"{}":O?se+"{"+Q(oe,O)+"}":se+"{ "+I.call(oe,", ")+" }"}return String(u)};var $=Object.prototype.hasOwnProperty||function(e){return e in this};function G(e,u){return $.call(e,u)}function q(e){return h.call(e)}function H(e,u){if(e.indexOf)return e.indexOf(u);for(var t=0,n=e.length;t-1?e.split(","):e},i=function(e,u,t,n){if(e){var r=t.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,c=t.depth>0&&/(\[[^[\]]*])/.exec(r),i=c?r.slice(0,c.index):r,f=[];if(i){if(!t.plainObjects&&d.call(Object.prototype,i)&&!t.allowPrototypes)return;f.push(i)}for(var l=0;t.depth>0&&null!==(c=a.exec(r))&&l=0;--r){var a,c=e[r];if("[]"===c&&t.parseArrays)a=[].concat(d);else{a=t.plainObjects?Object.create(null):{};var i="["===c.charAt(0)&&"]"===c.charAt(c.length-1)?c.slice(1,-1):c,f=parseInt(i,10);t.parseArrays||""!==i?!isNaN(f)&&c!==i&&String(f)===i&&f>=0&&t.parseArrays&&f<=t.arrayLimit?(a=[])[f]=d:"__proto__"!==i&&(a[i]=d):a={0:d}}d=a}return d}(f,u,t,n)}};e.exports=function(e,u){var t=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var u=void 0===e.charset?a.charset:e.charset;return{allowDots:void 0===e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:u,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||n.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(u);if(""===e||null==e)return t.plainObjects?Object.create(null):{};for(var f="string"==typeof e?function(e,u){var t,i={},f=u.ignoreQueryPrefix?e.replace(/^\?/,""):e,l=u.parameterLimit===1/0?void 0:u.parameterLimit,s=f.split(u.delimiter,l),p=-1,m=u.charset;if(u.charsetSentinel)for(t=0;t-1&&(v=r(v)?[v]:v),d.call(i,h)?i[h]=n.combine(i[h],v):i[h]=v}return i}(e,t):e,l=t.plainObjects?Object.create(null):{},s=Object.keys(f),p=0;p1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(n(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!v(m(this,u),e)}}),s&&n(f.prototype,"size",{get:function(){return m(this,u)[h]}}),f},def:function(e,u,t){var n,d,r=v(e,u);return r?r.v=t:(e._l=r={i:d=p(u,!0),k:u,v:t,p:n=e._l,n:void 0,r:!1},e._f||(e._f=r),n&&(n.n=r),e[h]++,"F"!==d&&(e._i[d]=r)),e},getEntry:v,setStrong:function(e,u,t){i(e,u,(function(e,t){this._t=m(e,u),this._k=t,this._l=void 0}),(function(){for(var e=this._k,u=this._l;u&&u.r;)u=u.p;return this._t&&(this._l=u=u?u.n:this._t._f)?f(0,"keys"==e?u.k:"values"==e?u.v:[u.k,u.v]):(this._t=void 0,f(1))}),t?"entries":"values",!t,!0),l(u)}}},539:function(e,u,t){"use strict";var n=t(5),d=t(12),r=t(16),a=t(82),c=t(483),o=t(81),i=t(80),f=t(13),l=t(14),s=t(83),p=t(41),m=t(540);e.exports=function(e,u,t,h,v,b){var y=n[e],g=y,_=v?"set":"add",x=g&&g.prototype,w={},E=function(e){var u=x[e];r(x,e,"delete"==e||"has"==e?function(e){return!(b&&!f(e))&&u.call(this,0===e?0:e)}:"get"==e?function(e){return b&&!f(e)?void 0:u.call(this,0===e?0:e)}:"add"==e?function(e){return u.call(this,0===e?0:e),this}:function(e,t){return u.call(this,0===e?0:e,t),this})};if("function"==typeof g&&(b||x.forEach&&!l((function(){(new g).entries().next()})))){var I=new g,S=I[_](b?{}:-0,1)!=I,A=l((function(){I.has(1)})),k=s((function(e){new g(e)})),O=!b&&l((function(){for(var e=new g,u=5;u--;)e[_](u,u);return!e.has(-0)}));k||((g=u((function(u,t){i(u,g,e);var n=m(new y,u,g);return null!=t&&o(t,v,n[_],n),n}))).prototype=x,x.constructor=g),(A||O)&&(E("delete"),E("has"),v&&E("get")),(O||S)&&E(_),b&&x.clear&&delete x.clear}else g=h.getConstructor(u,e,v,_),a(g.prototype,t),c.NEED=!0;return p(g,e),w[e]=g,d(d.G+d.W+d.F*(g!=y),w),b||h.setStrong(g,e,v),g}},540:function(e,u,t){var n=t(13),d=t(541).set;e.exports=function(e,u,t){var r,a=u.constructor;return a!==t&&"function"==typeof a&&(r=a.prototype)!==t.prototype&&n(r)&&d&&d(e,r),e}},541:function(e,u,t){var n=t(13),d=t(8),r=function(e,u){if(d(e),!n(u)&&null!==u)throw TypeError(u+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,u,n){try{(n=t(30)(Function.call,t(542).f(Object.prototype,"__proto__").set,2))(e,[]),u=!(e instanceof Array)}catch(d){u=!0}return function(e,t){return r(e,t),u?e.__proto__=t:n(e,t),e}}({},!1):void 0),check:r}},542:function(e,u,t){var n=t(62),d=t(57),r=t(33),a=t(87),c=t(31),o=t(86),i=Object.getOwnPropertyDescriptor;u.f=t(10)?i:function(e,u){if(e=r(e),u=a(u,!0),o)try{return i(e,u)}catch(t){}if(c(e,u))return d(!n.f.call(e,u),e[u])}},543:function(e,u,t){"use strict";var n=t(12),d=t(32),r=t(27),a=t(14),c=[].sort,o=[1,2,3];n(n.P+n.F*(a((function(){o.sort(void 0)}))||!a((function(){o.sort(null)}))||!t(544)(c)),"Array",{sort:function(e){return void 0===e?c.call(r(this)):c.call(r(this),d(e))}})},544:function(e,u,t){"use strict";var n=t(14);e.exports=function(e,u){return!!e&&n((function(){u?e.call(null,(function(){}),1):e.call(null)}))}},553:function(e,u,t){"use strict";t(481),t(79),t(482),t(543),t(29),t(22),t(21),t(85),t(434);var n=t(1),d=(t(438),t(439),t(77),t(420),t(0)),r=t.n(d),a=t(473),c=t.n(a);t(150);var o=function(e){var u=e.humanize,t=e.icon,n=e.values,d=e.currentState,a=e.setState;if(0==n.size)return null;var o=Array.from(n);return r.a.createElement(r.a.Fragment,null,o.map((function(e,n){var o="string"==typeof e&&u?c()(e):e;return r.a.createElement("label",{key:n},r.a.createElement("input",{type:"checkbox",onChange:function(u){var t=new Set(d);u.currentTarget.checked?t.add(e):t.delete(e),a(t)},checked:d.has(e)}),o&&r.a.createElement(r.a.Fragment,null,t?r.a.createElement("i",{className:"feather icon-"+t}):""," ",o))})))},i=t(495),f=t(424),l=t(422),s=(t(432),t(443)),p=t.n(s),m=t(415),h=t.n(m),v=t(496),b=t.n(v),y=t(428);t(151);function g(e){var u=e.delivery_guarantee,t=e.description,n=e.event_types,d=e.function_category,a=(e.logo_path,e.name),c=e.pathTemplate,o=e.status,i=e.title,f=e.type,s=c;s||("source"==f&&(s="/docs/reference/sources//"),"transform"==f&&(s="/docs/reference/transforms//"),"sink"==f&&(s="/docs/reference/sinks//"));var p=s.replace("",a);return r.a.createElement(l.a,{to:p,className:"qovery-component",title:t},r.a.createElement("div",{className:"qovery-component--header"},r.a.createElement("div",{className:"qovery-component--name"},i)),r.a.createElement("div",{className:"qovery-component--badges"},"beta"==o?r.a.createElement("span",{className:"badge badge--warning",title:"This component is in beta and is not recommended for production environments"},r.a.createElement("i",{className:"feather icon-alert-triangle"})):r.a.createElement("span",{className:"badge badge--primary",title:"This component has passed reliability standards that make it production ready"},r.a.createElement("i",{className:"feather icon-award"})),"best_effort"==u?r.a.createElement("span",{className:"badge badge--warning",title:"This component makes a best-effort delivery guarantee, and in rare cases can lose data"},r.a.createElement("i",{className:"feather icon-shield-off"})):r.a.createElement("span",{className:"badge badge--primary",title:"This component offers an at-least-once delivery guarantee"},r.a.createElement("i",{className:"feather icon-shield"})),n.includes("log")?r.a.createElement("span",{className:"badge badge--primary",title:"This component works with log event types"},"log"):"",n.includes("metric")?r.a.createElement("span",{className:"badge badge--primary",title:"This component works with metric event types"},"metric"):"",r.a.createElement("span",{className:"badge badge--primary"},d)))}function _(e){var u=e.components,t=e.headingLevel,d=e.pathTemplate,a=e.titles,c=u.filter((function(e){return"source"==e.type})),o=u.filter((function(e){return"transform"==e.type})),l=u.filter((function(e){return"sink"==e.type})),s="h"+(t||3);return u.length>0?r.a.createElement(r.a.Fragment,null,c.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,c.length," Sources"),r.a.createElement("div",{className:"qovery-components--grid"},c.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",o.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,o.length," Transforms"),r.a.createElement("div",{className:"qovery-components--grid"},o.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",l.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,l.length," Sinks"),r.a.createElement("div",{className:"qovery-components--grid"},l.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",r.a.createElement("hr",null),r.a.createElement(f.a,{to:"https://github.com/qovery/documentation/issues/new?labels=type%3A+new+feature",target:"_blank",rightIcon:"plus-circle"},"Request a new component")):r.a.createElement(i.a,{text:"no components found"})}u.a=function(e){var u=Object(y.a)().siteConfig.customFields.metadata,t=u.sources,n=u.transforms,a=u.sinks,c=e.titles||null==e.titles,i=1==e.filterColumn,f=e.pathTemplate,s=e.location?b.a.parse(e.location.search,{ignoreQueryPrefix:!0}):{},m=[];(e.sources||null==e.sources)&&(m=m.concat(Object.values(t))),(e.transforms||null==e.transforms)&&(m=m.concat(Object.values(n))),(e.sinks||null==e.sinks)&&(m=m.concat(Object.values(a))),m=m.sort((function(e,u){return e.name>u.name?1:-1}));var v=Object(d.useState)("true"==s["at-least-once"]),g=v[0],x=v[1],w=Object(d.useState)(new Set(s["event-types"]||e.eventTypes)),E=w[0],I=w[1],S=Object(d.useState)(new Set(s.functions)),A=S[0],k=S[1],O=Object(d.useState)(new Set(s["operating-systems"])),j=O[0],N=O[1],C=Object(d.useState)("true"==s["prod-ready"]),P=C[0],T=C[1],M=Object(d.useState)(new Set(s.providers)),R=M[0],L=M[1],F=Object(d.useState)(s.search),B=F[0],U=F[1];B&&(m=m.filter((function(e){return(e.name.toLowerCase()+" "+e.type.toLowerCase()).includes(B.toLowerCase())}))),g&&(m=m.filter((function(e){return"at_least_once"==e.delivery_guarantee}))),E.size>0&&(m=m.filter((function(e){return Array.from(E).some((function(u){return e.event_types.includes(u)}))}))),A.size>0&&(m=m.filter((function(e){return A.has(e.function_category)}))),j.size>0&&(m=m.filter((function(e){return Array.from(j).every((function(u){return e.operating_systems.includes(u)}))}))),P&&(m=m.filter((function(e){return"prod-ready"==e.status}))),R.size>0&&(m=m.filter((function(e){return Array.from(R).every((function(u){return e.service_providers&&e.service_providers.includes(u)}))}))),e.exceptNames&&e.exceptNames.length>0&&(m=m.filter((function(u){return!e.exceptNames.includes(u.name)}))),e.exceptFunctions&&e.exceptFunctions.length>0&&(m=m.filter((function(u){return!e.exceptFunctions.includes(u.function_category)})));var D=E.size>0?E:new Set(p()(m).map((function(e){return e.event_types})).flatten().uniq().compact().sort().value()),z=new Set(p()(m).map((function(e){return e.operating_systems})).flatten().uniq().compact().sort().value()),W=new Set(p()(m).map((function(e){return e.service_providers})).flatten().uniq().compact().sort().value()),$=new Set(p()(m).filter((function(e){return"source"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),G=new Set(p()(m).filter((function(e){return"transform"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),q=new Set(p()(m).filter((function(e){return"sink"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value());return r.a.createElement("div",{className:h()("qovery-components",{"qovery-components--cols":i})},r.a.createElement("div",{className:"filters"},r.a.createElement("div",{className:"search"},r.a.createElement("input",{className:"input--text input--lg",type:"text",onChange:function(e){return U(e.currentTarget.value)},placeholder:"\ud83d\udd0d Search..."})),r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/getting-started/data-model/",title:"Learn more about Qovery's event types"},"Event types ",r.a.createElement("i",{className:"feather icon-info"}))),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Event Types",icon:"database",values:D,humanize:!0,currentState:E,setState:I}))),r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/getting-started/whats-next/",title:"Learn more about Qovery's guarantees"},"Guarantees ",r.a.createElement("i",{className:"feather icon-info"}))),r.a.createElement("div",{className:"filter--choices"},r.a.createElement("label",{title:"Show only components that offer an at-least-once delivery guarantee."},r.a.createElement("input",{type:"checkbox",onChange:function(e){return x(e.currentTarget.checked)},checked:g}),r.a.createElement("i",{className:"feather icon-shield"})," At-least-once"),r.a.createElement("label",{title:"Show only production ready components."},r.a.createElement("input",{type:"checkbox",onChange:function(e){return T(e.currentTarget.checked)},checked:P}),r.a.createElement("i",{className:"feather icon-award"})," Prod-ready"))),$.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Source Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:$,humanize:!0,currentState:A,setState:k}))),G.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Transform Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:G,humanize:!0,currentState:A,setState:k}))),q.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Sink Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:q,humanize:!0,currentState:A,setState:k}))),W.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Providers"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Providers",icon:"cloud",values:W,currentState:R,setState:L}))),z.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/setup/installation/operating-systems/",title:"Learn more about Qovery's operating systems"},"Operating Systems")),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Operating Systems",icon:"cpu",values:z,currentState:j,setState:N})))),r.a.createElement("div",{className:"qovery-components--results"},r.a.createElement(_,{components:m,headingLevel:e.headingLevel,pathTemplate:f,titles:c})))}}}]); \ No newline at end of file diff --git a/54e7632e.9eb95085.js b/54e7632e.9eb95085.js new file mode 100644 index 0000000000..1ed5172afd --- /dev/null +++ b/54e7632e.9eb95085.js @@ -0,0 +1,2 @@ +/*! For license information please see 54e7632e.9eb95085.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{411:function(e,u,t){"use strict";t.r(u);var n={};t.r(n),t.d(n,"now",(function(){return g})),t.d(n,"timer",(function(){return w})),t.d(n,"timerFlush",(function(){return E})),t.d(n,"timeout",(function(){return k})),t.d(n,"interval",(function(){return j}));var d,r,a=t(0),c=t.n(a),o=t(553),i=t(437),f=t(422),l=(t(418),t(84),0),s=0,p=0,m=0,h=0,v=0,b="object"==typeof performance&&performance.now?performance:Date,y="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function g(){return h||(y(_),h=b.now()+v)}function _(){h=0}function x(){this._call=this._time=this._next=null}function w(e,u,t){var n=new x;return n.restart(e,u,t),n}function E(){g(),++l;for(var e,u=d;u;)(e=h-u._time)>=0&&u._call.call(null,e),u=u._next;--l}function I(){h=(m=b.now())+v,l=s=0;try{E()}finally{l=0,function(){var e,u,t=d,n=1/0;for(;t;)t._call?(n>t._time&&(n=t._time),e=t,t=t._next):(u=t._next,t._next=null,t=e?e._next=u:d=u);r=e,A(n)}(),h=0}}function S(){var e=b.now(),u=e-m;u>1e3&&(v-=u,m=e)}function A(e){l||(s&&(s=clearTimeout(s)),e-h>24?(e<1/0&&(s=setTimeout(I,e-b.now()-v)),p&&(p=clearInterval(p))):(p||(m=b.now(),p=setInterval(S,1e3)),l=1,y(I)))}x.prototype=w.prototype={constructor:x,restart:function(e,u,t){if("function"!=typeof e)throw new TypeError("callback is not a function");t=(null==t?g():+t)+(null==u?0:+u),this._next||r===this||(r?r._next=this:d=this,r=this),this._call=e,this._time=t,A()},stop:function(){this._call&&(this._call=null,this._time=1/0,A())}};var k=function(e,u,t){var n=new x;return u=null==u?0:+u,n.restart((function(t){n.stop(),e(t+u)}),u,t),n},j=function(e,u,t){var n=new x,d=u;return null==u?(n.restart(e,u,t),n):(u=+u,t=null==t?g():+t,n.restart((function r(a){a+=d,n.restart(r,d+=u,t),e(a)}),u,t),n)},O=Object.assign({},n);t(428);u.default=function(e){return Object(a.useEffect)((function(){if("undefined"!=typeof document){var e=function(e){for(var u=e.getContext("2d"),t=e.width,n=e.height,d=2*Math.PI,r=200,a=new Array(r),c=0;ct+45&&(o.x-=t+90),o.y+=o.vy,o.y<-45?o.y+=n+90:o.y>n+45&&(o.y-=n+90),o.vx+=.2*(Math.random()-.5)-.01*o.vx,o.vy+=.2*(Math.random()-.5)-.01*o.vy,u.beginPath(),u.arc(o.x,o.y,3,0,d),u.fillStyle="rgba(40,217,242,0.4)",u.fill()}for(c=0;c3600?(2025-m)/-1575:1,u.beginPath(),u.moveTo(f.x,f.y),u.lineTo(l.x,l.y),u.strokeStyle="rgba(40,217,242,0.3)",u.stroke())}u.restore()}))}(document.querySelector("canvas"));return function(){e.stop()}}}),[]),c.a.createElement(i.a,{title:"Components - Sources, Transforms, & Sinks",description:"Browse and search all of Qovery's components: sources, transforms, and sinks. Filter by event type, guarantee, function, operating system, and provider."},c.a.createElement("header",{className:"hero hero--animated-graph"},c.a.createElement("div",{className:"container container--fluid container--flush"},c.a.createElement("canvas",{width:"2000",height:"200"}),c.a.createElement("div",{className:"overlay"},c.a.createElement("h1",null,"Qovery Components"),c.a.createElement("div",{className:"hero--subtitle"},"Components allow you to collect, transform, and route data with ease. ",c.a.createElement(f.a,{to:"/docs/getting-started/concepts/"},"Learn more"),".")))),c.a.createElement("main",{className:"container"},c.a.createElement(o.a,{filterColumn:!0,headingLevel:2,location:e.location})))}},415:function(e,u,t){var n;!function(){"use strict";var t={}.hasOwnProperty;function d(){for(var e=[],u=0;u1?arguments[1]:void 0,t),o=a>2?arguments[2]:void 0,i=void 0===o?t:d(o,t);i>c;)u[c++]=e;return u}},420:function(e,u,t){var n=t(28).f,d=Function.prototype,r=/^\s*function ([^ (]*)/;"name"in d||t(10)&&n(d,"name",{configurable:!0,get:function(){try{return(""+this).match(r)[1]}catch(e){return""}}})},424:function(e,u,t){"use strict";var n=t(0),d=t.n(n),r=t(422),a=t(415),c=t.n(a);t(133);u.a=function(e){var u=e.children,t=e.className,n=e.badge,a=e.leftIcon,o=e.rightIcon,i=e.size,f=e.target,l=e.to,s=c()("jump-to","jump-to--"+i,t),p=d.a.createElement("div",{className:"jump-to--inner"},d.a.createElement("div",{className:"jump-to--inner-2"},a&&d.a.createElement("div",{className:"jump-to--left"},d.a.createElement("i",{className:"feather icon-"+a})),d.a.createElement("div",{className:"jump-to--main"},n?d.a.createElement("span",{className:"badge badge--primary badge--right"},n):"",u),d.a.createElement("div",{className:"jump-to--right"},d.a.createElement("i",{className:"feather icon-"+(o||"chevron-right")+" arrow"}))));return f?d.a.createElement("a",{href:l,target:f,className:s},p):d.a.createElement(r.a,{to:l,className:s},p)}},434:function(e,u,t){"use strict";var n=t(8),d=t(478),r=t(55);t(56)("search",1,(function(e,u,t,a){return[function(t){var n=e(this),d=null==t?void 0:t[u];return void 0!==d?d.call(t,n):new RegExp(t)[u](String(n))},function(e){var u=a(t,e,this);if(u.done)return u.value;var c=n(e),o=String(this),i=c.lastIndex;d(i,0)||(c.lastIndex=0);var f=r(c,o);return d(c.lastIndex,i)||(c.lastIndex=i),null===f?-1:f.index}]}))},437:function(e,u,t){"use strict";t(449);var n=t(0),d=t.n(n),r=t(450),a=t(435),c=t(1),o=(t(438),t(439),t(451),t(422)),i=t(452),f=t(432),l=t.n(f),s=t(453),p=t.n(s),m=t(428),h=t(415),v=t.n(h),b=t(135),y=t.n(b),g=function(){return d.a.createElement("span",{className:v()(y.a.toggle,y.a.moon)})},_=function(){return d.a.createElement("span",{className:v()(y.a.toggle,y.a.sun)})},x=function(e){var u=Object(m.a)().isClient;return d.a.createElement(p.a,Object(c.a)({disabled:!u,icons:{checked:d.a.createElement(g,null),unchecked:d.a.createElement(_,null)}},e))};function w(){var e=Object(m.a)().siteConfig,u=(void 0===e?{}:e).customFields.metadata.latest_post,t=Date.parse(u.date),n=new Date,d=Math.abs(n-t),r=Math.ceil(d/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),r<30&&(!a||a0&&d.a.createElement("div",{className:"row footer__links"},d.a.createElement("div",{className:"col col--5 footer__col"},d.a.createElement("div",{className:"margin-bottom--md"},d.a.createElement(l.a,{className:"navbar__logo",src:p,alt:"Qovery",width:"150",height:"auto"})),d.a.createElement("div",{className:"margin-bottom--md"},d.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),d.a.createElement("div",null,d.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},d.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},d.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},d.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",d.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},d.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),o.map((function(e,u){return d.a.createElement("div",{key:u,className:"col footer__col"},null!=e.title?d.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?d.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,u){return e.html?d.a.createElement("li",{key:u,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):d.a.createElement("li",{key:e.href||e.to,className:"footer__item"},d.a.createElement(L,e))}))):null)}))),(f||a)&&d.a.createElement("div",{className:"text--center"},f&&f.src&&d.a.createElement("div",{className:"margin-bottom--sm"},f.href?d.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:R.a.footerLogoLink},d.a.createElement(F,{alt:f.alt,url:s})):d.a.createElement(F,{alt:f.alt,url:s})),d.a.createElement("small",null,a),d.a.createElement("br",null))))},D=t(454),U=t(455),z=t(3);t(138);u.a=function(e){var u=Object(m.a)().siteConfig,t=void 0===u?{}:u,n=t.favicon,c=(t.tagline,t.title),o=t.themeConfig.image,i=t.url,f=e.children,l=e.title,s=e.noFooter,p=e.description,h=e.image,v=e.keywords,b=(e.permalink,e.version),y=l?l+" | "+c:c,g=h||o,_=i+Object(I.a)(g),x=Object(I.a)(n),w=Object(z.h)(),E=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return d.a.createElement(U.a,null,d.a.createElement(D.a,null,d.a.createElement(a.a,null,d.a.createElement("html",{lang:"en"}),d.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),y&&d.a.createElement("title",null,y),y&&d.a.createElement("meta",{property:"og:title",content:y}),n&&d.a.createElement("link",{rel:"shortcut icon",href:x}),p&&d.a.createElement("meta",{name:"description",content:p}),p&&d.a.createElement("meta",{property:"og:description",content:p}),b&&d.a.createElement("meta",{name:"docsearch:version",content:b}),v&&v.length&&d.a.createElement("meta",{name:"keywords",content:v.join(",")}),g&&d.a.createElement("meta",{property:"og:image",content:_}),g&&d.a.createElement("meta",{property:"twitter:image",content:_}),g&&d.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+y}),E&&d.a.createElement("meta",{property:"og:url",content:E}),d.a.createElement("meta",{name:"twitter:card",content:"summary"}),E&&d.a.createElement("link",{rel:"canonical",href:E})),d.a.createElement(r.a,null),d.a.createElement(P,null),d.a.createElement("div",{className:"main-wrapper"},f),!s&&d.a.createElement(B,null)))}},443:function(e,u,t){(function(e,n){var d;(function(){var r="Expected a function",a="__lodash_placeholder__",c=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],o="[object Arguments]",i="[object Array]",f="[object Boolean]",l="[object Date]",s="[object Error]",p="[object Function]",m="[object GeneratorFunction]",h="[object Map]",v="[object Number]",b="[object Object]",y="[object RegExp]",g="[object Set]",_="[object String]",x="[object Symbol]",w="[object WeakMap]",E="[object ArrayBuffer]",I="[object DataView]",S="[object Float32Array]",A="[object Float64Array]",k="[object Int8Array]",j="[object Int16Array]",O="[object Int32Array]",N="[object Uint8Array]",C="[object Uint16Array]",P="[object Uint32Array]",T=/\b__p \+= '';/g,M=/\b(__p \+=) '' \+/g,R=/(__e\(.*?\)|\b__t\)) \+\n'';/g,L=/&(?:amp|lt|gt|quot|#39);/g,F=/[&<>"']/g,B=RegExp(L.source),D=RegExp(F.source),U=/<%-([\s\S]+?)%>/g,z=/<%([\s\S]+?)%>/g,W=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,G=/^\w*$/,q=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,K=RegExp(H.source),V=/^\s+|\s+$/g,J=/^\s+/,Z=/\s+$/,Q=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,ee=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ue=/\\(\\)?/g,te=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ne=/\w*$/,de=/^[-+]0x[0-9a-f]+$/i,re=/^0b[01]+$/i,ae=/^\[object .+?Constructor\]$/,ce=/^0o[0-7]+$/i,oe=/^(?:0|[1-9]\d*)$/,ie=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,fe=/($^)/,le=/['\n\r\u2028\u2029\\]/g,se="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",pe="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",me="[\\ud800-\\udfff]",he="["+pe+"]",ve="["+se+"]",be="\\d+",ye="[\\u2700-\\u27bf]",ge="[a-z\\xdf-\\xf6\\xf8-\\xff]",_e="[^\\ud800-\\udfff"+pe+be+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",xe="\\ud83c[\\udffb-\\udfff]",we="[^\\ud800-\\udfff]",Ee="(?:\\ud83c[\\udde6-\\uddff]){2}",Ie="[\\ud800-\\udbff][\\udc00-\\udfff]",Se="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Ae="(?:"+ge+"|"+_e+")",ke="(?:"+Se+"|"+_e+")",je="(?:"+ve+"|"+xe+")"+"?",Oe="[\\ufe0e\\ufe0f]?"+je+("(?:\\u200d(?:"+[we,Ee,Ie].join("|")+")[\\ufe0e\\ufe0f]?"+je+")*"),Ne="(?:"+[ye,Ee,Ie].join("|")+")"+Oe,Ce="(?:"+[we+ve+"?",ve,Ee,Ie,me].join("|")+")",Pe=RegExp("['\u2019]","g"),Te=RegExp(ve,"g"),Me=RegExp(xe+"(?="+xe+")|"+Ce+Oe,"g"),Re=RegExp([Se+"?"+ge+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[he,Se,"$"].join("|")+")",ke+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[he,Se+Ae,"$"].join("|")+")",Se+"?"+Ae+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",Se+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",be,Ne].join("|"),"g"),Le=RegExp("[\\u200d\\ud800-\\udfff"+se+"\\ufe0e\\ufe0f]"),Fe=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Be=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],De=-1,Ue={};Ue[S]=Ue[A]=Ue[k]=Ue[j]=Ue[O]=Ue[N]=Ue["[object Uint8ClampedArray]"]=Ue[C]=Ue[P]=!0,Ue[o]=Ue[i]=Ue[E]=Ue[f]=Ue[I]=Ue[l]=Ue[s]=Ue[p]=Ue[h]=Ue[v]=Ue[b]=Ue[y]=Ue[g]=Ue[_]=Ue[w]=!1;var ze={};ze[o]=ze[i]=ze[E]=ze[I]=ze[f]=ze[l]=ze[S]=ze[A]=ze[k]=ze[j]=ze[O]=ze[h]=ze[v]=ze[b]=ze[y]=ze[g]=ze[_]=ze[x]=ze[N]=ze["[object Uint8ClampedArray]"]=ze[C]=ze[P]=!0,ze[s]=ze[p]=ze[w]=!1;var We={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$e=parseFloat,Ge=parseInt,qe="object"==typeof e&&e&&e.Object===Object&&e,He="object"==typeof self&&self&&self.Object===Object&&self,Ke=qe||He||Function("return this")(),Ve=u&&!u.nodeType&&u,Je=Ve&&"object"==typeof n&&n&&!n.nodeType&&n,Ze=Je&&Je.exports===Ve,Qe=Ze&&qe.process,Ye=function(){try{var e=Je&&Je.require&&Je.require("util").types;return e||Qe&&Qe.binding&&Qe.binding("util")}catch(u){}}(),Xe=Ye&&Ye.isArrayBuffer,eu=Ye&&Ye.isDate,uu=Ye&&Ye.isMap,tu=Ye&&Ye.isRegExp,nu=Ye&&Ye.isSet,du=Ye&&Ye.isTypedArray;function ru(e,u,t){switch(t.length){case 0:return e.call(u);case 1:return e.call(u,t[0]);case 2:return e.call(u,t[0],t[1]);case 3:return e.call(u,t[0],t[1],t[2])}return e.apply(u,t)}function au(e,u,t,n){for(var d=-1,r=null==e?0:e.length;++d-1}function su(e,u,t){for(var n=-1,d=null==e?0:e.length;++n-1;);return t}function Mu(e,u){for(var t=e.length;t--&&xu(u,e[t],0)>-1;);return t}function Ru(e,u){for(var t=e.length,n=0;t--;)e[t]===u&&++n;return n}var Lu=Au({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Fu=Au({"&":"&","<":"<",">":">",'"':""","'":"'"});function Bu(e){return"\\"+We[e]}function Du(e){return Le.test(e)}function Uu(e){var u=-1,t=Array(e.size);return e.forEach((function(e,n){t[++u]=[n,e]})),t}function zu(e,u){return function(t){return e(u(t))}}function Wu(e,u){for(var t=-1,n=e.length,d=0,r=[];++t",""":'"',"'":"'"});var Vu=function e(u){var t,n=(u=null==u?Ke:Vu.defaults(Ke.Object(),u,Vu.pick(Ke,Be))).Array,d=u.Date,se=u.Error,pe=u.Function,me=u.Math,he=u.Object,ve=u.RegExp,be=u.String,ye=u.TypeError,ge=n.prototype,_e=pe.prototype,xe=he.prototype,we=u["__core-js_shared__"],Ee=_e.toString,Ie=xe.hasOwnProperty,Se=0,Ae=(t=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"",ke=xe.toString,je=Ee.call(he),Oe=Ke._,Ne=ve("^"+Ee.call(Ie).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ce=Ze?u.Buffer:void 0,Me=u.Symbol,Le=u.Uint8Array,We=Ce?Ce.allocUnsafe:void 0,qe=zu(he.getPrototypeOf,he),He=he.create,Ve=xe.propertyIsEnumerable,Je=ge.splice,Qe=Me?Me.isConcatSpreadable:void 0,Ye=Me?Me.iterator:void 0,yu=Me?Me.toStringTag:void 0,Au=function(){try{var e=Xd(he,"defineProperty");return e({},"",{}),e}catch(u){}}(),Ju=u.clearTimeout!==Ke.clearTimeout&&u.clearTimeout,Zu=d&&d.now!==Ke.Date.now&&d.now,Qu=u.setTimeout!==Ke.setTimeout&&u.setTimeout,Yu=me.ceil,Xu=me.floor,et=he.getOwnPropertySymbols,ut=Ce?Ce.isBuffer:void 0,tt=u.isFinite,nt=ge.join,dt=zu(he.keys,he),rt=me.max,at=me.min,ct=d.now,ot=u.parseInt,it=me.random,ft=ge.reverse,lt=Xd(u,"DataView"),st=Xd(u,"Map"),pt=Xd(u,"Promise"),mt=Xd(u,"Set"),ht=Xd(u,"WeakMap"),vt=Xd(he,"create"),bt=ht&&new ht,yt={},gt=Ar(lt),_t=Ar(st),xt=Ar(pt),wt=Ar(mt),Et=Ar(ht),It=Me?Me.prototype:void 0,St=It?It.valueOf:void 0,At=It?It.toString:void 0;function kt(e){if($a(e)&&!Pa(e)&&!(e instanceof Ct)){if(e instanceof Nt)return e;if(Ie.call(e,"__wrapped__"))return kr(e)}return new Nt(e)}var jt=function(){function e(){}return function(u){if(!Wa(u))return{};if(He)return He(u);e.prototype=u;var t=new e;return e.prototype=void 0,t}}();function Ot(){}function Nt(e,u){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!u,this.__index__=0,this.__values__=void 0}function Ct(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Pt(e){var u=-1,t=null==e?0:e.length;for(this.clear();++u=u?e:u)),e}function Jt(e,u,t,n,d,r){var a,c=1&u,i=2&u,s=4&u;if(t&&(a=d?t(e,n,d,r):t(e)),void 0!==a)return a;if(!Wa(e))return e;var w=Pa(e);if(w){if(a=function(e){var u=e.length,t=new e.constructor(u);u&&"string"==typeof e[0]&&Ie.call(e,"index")&&(t.index=e.index,t.input=e.input);return t}(e),!c)return bd(e,a)}else{var T=tr(e),M=T==p||T==m;if(La(e))return ld(e,c);if(T==b||T==o||M&&!d){if(a=i||M?{}:dr(e),!c)return i?function(e,u){return yd(e,ur(e),u)}(e,function(e,u){return e&&yd(u,_c(u),e)}(a,e)):function(e,u){return yd(e,er(e),u)}(e,qt(a,e))}else{if(!ze[T])return d?e:{};a=function(e,u,t){var n=e.constructor;switch(u){case E:return sd(e);case f:case l:return new n(+e);case I:return function(e,u){var t=u?sd(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.byteLength)}(e,t);case S:case A:case k:case j:case O:case N:case"[object Uint8ClampedArray]":case C:case P:return pd(e,t);case h:return new n;case v:case _:return new n(e);case y:return function(e){var u=new e.constructor(e.source,ne.exec(e));return u.lastIndex=e.lastIndex,u}(e);case g:return new n;case x:return d=e,St?he(St.call(d)):{}}var d}(e,T,c)}}r||(r=new Lt);var R=r.get(e);if(R)return R;r.set(e,a),Va(e)?e.forEach((function(n){a.add(Jt(n,u,t,n,e,r))})):Ga(e)&&e.forEach((function(n,d){a.set(d,Jt(n,u,t,d,e,r))}));var L=w?void 0:(s?i?Hd:qd:i?_c:gc)(e);return cu(L||e,(function(n,d){L&&(n=e[d=n]),Wt(a,d,Jt(n,u,t,d,e,r))})),a}function Zt(e,u,t){var n=t.length;if(null==e)return!n;for(e=he(e);n--;){var d=t[n],r=u[d],a=e[d];if(void 0===a&&!(d in e)||!r(a))return!1}return!0}function Qt(e,u,t){if("function"!=typeof e)throw new ye(r);return gr((function(){e.apply(void 0,t)}),u)}function Yt(e,u,t,n){var d=-1,r=lu,a=!0,c=e.length,o=[],i=u.length;if(!c)return o;t&&(u=pu(u,Nu(t))),n?(r=su,a=!1):u.length>=200&&(r=Pu,a=!1,u=new Rt(u));e:for(;++d-1},Tt.prototype.set=function(e,u){var t=this.__data__,n=$t(t,e);return n<0?(++this.size,t.push([e,u])):t[n][1]=u,this},Mt.prototype.clear=function(){this.size=0,this.__data__={hash:new Pt,map:new(st||Tt),string:new Pt}},Mt.prototype.delete=function(e){var u=Qd(this,e).delete(e);return this.size-=u?1:0,u},Mt.prototype.get=function(e){return Qd(this,e).get(e)},Mt.prototype.has=function(e){return Qd(this,e).has(e)},Mt.prototype.set=function(e,u){var t=Qd(this,e),n=t.size;return t.set(e,u),this.size+=t.size==n?0:1,this},Rt.prototype.add=Rt.prototype.push=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Rt.prototype.has=function(e){return this.__data__.has(e)},Lt.prototype.clear=function(){this.__data__=new Tt,this.size=0},Lt.prototype.delete=function(e){var u=this.__data__,t=u.delete(e);return this.size=u.size,t},Lt.prototype.get=function(e){return this.__data__.get(e)},Lt.prototype.has=function(e){return this.__data__.has(e)},Lt.prototype.set=function(e,u){var t=this.__data__;if(t instanceof Tt){var n=t.__data__;if(!st||n.length<199)return n.push([e,u]),this.size=++t.size,this;t=this.__data__=new Mt(n)}return t.set(e,u),this.size=t.size,this};var Xt=xd(cn),en=xd(on,!0);function un(e,u){var t=!0;return Xt(e,(function(e,n,d){return t=!!u(e,n,d)})),t}function tn(e,u,t){for(var n=-1,d=e.length;++n0&&t(c)?u>1?dn(c,u-1,t,n,d):mu(d,c):n||(d[d.length]=c)}return d}var rn=wd(),an=wd(!0);function cn(e,u){return e&&rn(e,u,gc)}function on(e,u){return e&&an(e,u,gc)}function fn(e,u){return fu(u,(function(u){return Da(e[u])}))}function ln(e,u){for(var t=0,n=(u=cd(u,e)).length;null!=e&&tu}function hn(e,u){return null!=e&&Ie.call(e,u)}function vn(e,u){return null!=e&&u in he(e)}function bn(e,u,t){for(var d=t?su:lu,r=e[0].length,a=e.length,c=a,o=n(a),i=1/0,f=[];c--;){var l=e[c];c&&u&&(l=pu(l,Nu(u))),i=at(l.length,i),o[c]=!t&&(u||r>=120&&l.length>=120)?new Rt(c&&l):void 0}l=e[0];var s=-1,p=o[0];e:for(;++s=c)return o;var i=t[n];return o*("desc"==i?-1:1)}}return e.index-u.index}(e,u,t)}))}function Tn(e,u,t){for(var n=-1,d=u.length,r={};++n-1;)c!==e&&Je.call(c,o,1),Je.call(e,o,1);return e}function Rn(e,u){for(var t=e?u.length:0,n=t-1;t--;){var d=u[t];if(t==n||d!==r){var r=d;ar(d)?Je.call(e,d,1):Xn(e,d)}}return e}function Ln(e,u){return e+Xu(it()*(u-e+1))}function Fn(e,u){var t="";if(!e||u<1||u>9007199254740991)return t;do{u%2&&(t+=e),(u=Xu(u/2))&&(e+=e)}while(u);return t}function Bn(e,u){return _r(mr(e,u,qc),e+"")}function Dn(e){return Bt(jc(e))}function Un(e,u){var t=jc(e);return Er(t,Vt(u,0,t.length))}function zn(e,u,t,n){if(!Wa(e))return e;for(var d=-1,r=(u=cd(u,e)).length,a=r-1,c=e;null!=c&&++dr?0:r+u),(t=t>r?r:t)<0&&(t+=r),r=u>t?0:t-u>>>0,u>>>=0;for(var a=n(r);++d>>1,a=e[r];null!==a&&!Za(a)&&(t?a<=u:a=200){var i=u?null:Fd(e);if(i)return $u(i);a=!1,d=Pu,o=new Rt}else o=u?[]:c;e:for(;++n=n?e:qn(e,u,t)}var fd=Ju||function(e){return Ke.clearTimeout(e)};function ld(e,u){if(u)return e.slice();var t=e.length,n=We?We(t):new e.constructor(t);return e.copy(n),n}function sd(e){var u=new e.constructor(e.byteLength);return new Le(u).set(new Le(e)),u}function pd(e,u){var t=u?sd(e.buffer):e.buffer;return new e.constructor(t,e.byteOffset,e.length)}function md(e,u){if(e!==u){var t=void 0!==e,n=null===e,d=e==e,r=Za(e),a=void 0!==u,c=null===u,o=u==u,i=Za(u);if(!c&&!i&&!r&&e>u||r&&a&&o&&!c&&!i||n&&a&&o||!t&&o||!d)return 1;if(!n&&!r&&!i&&e1?t[d-1]:void 0,a=d>2?t[2]:void 0;for(r=e.length>3&&"function"==typeof r?(d--,r):void 0,a&&cr(t[0],t[1],a)&&(r=d<3?void 0:r,d=1),u=he(u);++n-1?d[r?u[a]:a]:void 0}}function kd(e){return Gd((function(u){var t=u.length,n=t,d=Nt.prototype.thru;for(e&&u.reverse();n--;){var a=u[n];if("function"!=typeof a)throw new ye(r);if(d&&!c&&"wrapper"==Vd(a))var c=new Nt([],!0)}for(n=c?n:t;++n1&&g.reverse(),l&&ic))return!1;var i=r.get(e);if(i&&r.get(u))return i==u;var f=-1,l=!0,s=2&t?new Rt:void 0;for(r.set(e,u),r.set(u,e);++f-1&&e%1==0&&e1?"& ":"")+u[n],u=u.join(t>2?", ":" "),e.replace(Q,"{\n/* [wrapped with "+u+"] */\n")}(n,function(e,u){return cu(c,(function(t){var n="_."+t[0];u&t[1]&&!lu(e,n)&&e.push(n)})),e.sort()}(function(e){var u=e.match(Y);return u?u[1].split(X):[]}(n),t)))}function wr(e){var u=0,t=0;return function(){var n=ct(),d=16-(n-t);if(t=n,d>0){if(++u>=800)return arguments[0]}else u=0;return e.apply(void 0,arguments)}}function Er(e,u){var t=-1,n=e.length,d=n-1;for(u=void 0===u?n:u;++t1?e[u-1]:void 0;return t="function"==typeof t?(e.pop(),t):void 0,Kr(e,t)}));function ea(e){var u=kt(e);return u.__chain__=!0,u}function ua(e,u){return u(e)}var ta=Gd((function(e){var u=e.length,t=u?e[0]:0,n=this.__wrapped__,d=function(u){return Kt(u,e)};return!(u>1||this.__actions__.length)&&n instanceof Ct&&ar(t)?((n=n.slice(t,+t+(u?1:0))).__actions__.push({func:ua,args:[d],thisArg:void 0}),new Nt(n,this.__chain__).thru((function(e){return u&&!e.length&&e.push(void 0),e}))):this.thru(d)}));var na=gd((function(e,u,t){Ie.call(e,t)?++e[t]:Ht(e,t,1)}));var da=Ad(Cr),ra=Ad(Pr);function aa(e,u){return(Pa(e)?cu:Xt)(e,Zd(u,3))}function ca(e,u){return(Pa(e)?ou:en)(e,Zd(u,3))}var oa=gd((function(e,u,t){Ie.call(e,t)?e[t].push(u):Ht(e,t,[u])}));var ia=Bn((function(e,u,t){var d=-1,r="function"==typeof u,a=Ma(e)?n(e.length):[];return Xt(e,(function(e){a[++d]=r?ru(u,e,t):yn(e,u,t)})),a})),fa=gd((function(e,u,t){Ht(e,t,u)}));function la(e,u){return(Pa(e)?pu:kn)(e,Zd(u,3))}var sa=gd((function(e,u,t){e[t?0:1].push(u)}),(function(){return[[],[]]}));var pa=Bn((function(e,u){if(null==e)return[];var t=u.length;return t>1&&cr(e,u[0],u[1])?u=[]:t>2&&cr(u[0],u[1],u[2])&&(u=[u[0]]),Pn(e,dn(u,1),[])})),ma=Zu||function(){return Ke.Date.now()};function ha(e,u,t){return u=t?void 0:u,Dd(e,128,void 0,void 0,void 0,void 0,u=e&&null==u?e.length:u)}function va(e,u){var t;if("function"!=typeof u)throw new ye(r);return e=tc(e),function(){return--e>0&&(t=u.apply(this,arguments)),e<=1&&(u=void 0),t}}var ba=Bn((function(e,u,t){var n=1;if(t.length){var d=Wu(t,Jd(ba));n|=32}return Dd(e,n,u,t,d)})),ya=Bn((function(e,u,t){var n=3;if(t.length){var d=Wu(t,Jd(ya));n|=32}return Dd(u,n,e,t,d)}));function ga(e,u,t){var n,d,a,c,o,i,f=0,l=!1,s=!1,p=!0;if("function"!=typeof e)throw new ye(r);function m(u){var t=n,r=d;return n=d=void 0,f=u,c=e.apply(r,t)}function h(e){return f=e,o=gr(b,u),l?m(e):c}function v(e){var t=e-i;return void 0===i||t>=u||t<0||s&&e-f>=a}function b(){var e=ma();if(v(e))return y(e);o=gr(b,function(e){var t=u-(e-i);return s?at(t,a-(e-f)):t}(e))}function y(e){return o=void 0,p&&n?m(e):(n=d=void 0,c)}function g(){var e=ma(),t=v(e);if(n=arguments,d=this,i=e,t){if(void 0===o)return h(i);if(s)return fd(o),o=gr(b,u),m(i)}return void 0===o&&(o=gr(b,u)),c}return u=dc(u)||0,Wa(t)&&(l=!!t.leading,a=(s="maxWait"in t)?rt(dc(t.maxWait)||0,u):a,p="trailing"in t?!!t.trailing:p),g.cancel=function(){void 0!==o&&fd(o),f=0,n=i=d=o=void 0},g.flush=function(){return void 0===o?c:y(ma())},g}var _a=Bn((function(e,u){return Qt(e,1,u)})),xa=Bn((function(e,u,t){return Qt(e,dc(u)||0,t)}));function wa(e,u){if("function"!=typeof e||null!=u&&"function"!=typeof u)throw new ye(r);var t=function(){var n=arguments,d=u?u.apply(this,n):n[0],r=t.cache;if(r.has(d))return r.get(d);var a=e.apply(this,n);return t.cache=r.set(d,a)||r,a};return t.cache=new(wa.Cache||Mt),t}function Ea(e){if("function"!=typeof e)throw new ye(r);return function(){var u=arguments;switch(u.length){case 0:return!e.call(this);case 1:return!e.call(this,u[0]);case 2:return!e.call(this,u[0],u[1]);case 3:return!e.call(this,u[0],u[1],u[2])}return!e.apply(this,u)}}wa.Cache=Mt;var Ia=od((function(e,u){var t=(u=1==u.length&&Pa(u[0])?pu(u[0],Nu(Zd())):pu(dn(u,1),Nu(Zd()))).length;return Bn((function(n){for(var d=-1,r=at(n.length,t);++d=u})),Ca=gn(function(){return arguments}())?gn:function(e){return $a(e)&&Ie.call(e,"callee")&&!Ve.call(e,"callee")},Pa=n.isArray,Ta=Xe?Nu(Xe):function(e){return $a(e)&&pn(e)==E};function Ma(e){return null!=e&&za(e.length)&&!Da(e)}function Ra(e){return $a(e)&&Ma(e)}var La=ut||ro,Fa=eu?Nu(eu):function(e){return $a(e)&&pn(e)==l};function Ba(e){if(!$a(e))return!1;var u=pn(e);return u==s||"[object DOMException]"==u||"string"==typeof e.message&&"string"==typeof e.name&&!Ha(e)}function Da(e){if(!Wa(e))return!1;var u=pn(e);return u==p||u==m||"[object AsyncFunction]"==u||"[object Proxy]"==u}function Ua(e){return"number"==typeof e&&e==tc(e)}function za(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Wa(e){var u=typeof e;return null!=e&&("object"==u||"function"==u)}function $a(e){return null!=e&&"object"==typeof e}var Ga=uu?Nu(uu):function(e){return $a(e)&&tr(e)==h};function qa(e){return"number"==typeof e||$a(e)&&pn(e)==v}function Ha(e){if(!$a(e)||pn(e)!=b)return!1;var u=qe(e);if(null===u)return!0;var t=Ie.call(u,"constructor")&&u.constructor;return"function"==typeof t&&t instanceof t&&Ee.call(t)==je}var Ka=tu?Nu(tu):function(e){return $a(e)&&pn(e)==y};var Va=nu?Nu(nu):function(e){return $a(e)&&tr(e)==g};function Ja(e){return"string"==typeof e||!Pa(e)&&$a(e)&&pn(e)==_}function Za(e){return"symbol"==typeof e||$a(e)&&pn(e)==x}var Qa=du?Nu(du):function(e){return $a(e)&&za(e.length)&&!!Ue[pn(e)]};var Ya=Md(An),Xa=Md((function(e,u){return e<=u}));function ec(e){if(!e)return[];if(Ma(e))return Ja(e)?Hu(e):bd(e);if(Ye&&e[Ye])return function(e){for(var u,t=[];!(u=e.next()).done;)t.push(u.value);return t}(e[Ye]());var u=tr(e);return(u==h?Uu:u==g?$u:jc)(e)}function uc(e){return e?(e=dc(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}function tc(e){var u=uc(e),t=u%1;return u==u?t?u-t:u:0}function nc(e){return e?Vt(tc(e),0,4294967295):0}function dc(e){if("number"==typeof e)return e;if(Za(e))return NaN;if(Wa(e)){var u="function"==typeof e.valueOf?e.valueOf():e;e=Wa(u)?u+"":u}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(V,"");var t=re.test(e);return t||ce.test(e)?Ge(e.slice(2),t?2:8):de.test(e)?NaN:+e}function rc(e){return yd(e,_c(e))}function ac(e){return null==e?"":Qn(e)}var cc=_d((function(e,u){if(lr(u)||Ma(u))yd(u,gc(u),e);else for(var t in u)Ie.call(u,t)&&Wt(e,t,u[t])})),oc=_d((function(e,u){yd(u,_c(u),e)})),ic=_d((function(e,u,t,n){yd(u,_c(u),e,n)})),fc=_d((function(e,u,t,n){yd(u,gc(u),e,n)})),lc=Gd(Kt);var sc=Bn((function(e,u){e=he(e);var t=-1,n=u.length,d=n>2?u[2]:void 0;for(d&&cr(u[0],u[1],d)&&(n=1);++t1),u})),yd(e,Hd(e),t),n&&(t=Jt(t,7,Wd));for(var d=u.length;d--;)Xn(t,u[d]);return t}));var Ic=Gd((function(e,u){return null==e?{}:function(e,u){return Tn(e,u,(function(u,t){return hc(e,t)}))}(e,u)}));function Sc(e,u){if(null==e)return{};var t=pu(Hd(e),(function(e){return[e]}));return u=Zd(u),Tn(e,t,(function(e,t){return u(e,t[0])}))}var Ac=Bd(gc),kc=Bd(_c);function jc(e){return null==e?[]:Cu(e,gc(e))}var Oc=Id((function(e,u,t){return u=u.toLowerCase(),e+(t?Nc(u):u)}));function Nc(e){return Bc(ac(e).toLowerCase())}function Cc(e){return(e=ac(e))&&e.replace(ie,Lu).replace(Te,"")}var Pc=Id((function(e,u,t){return e+(t?"-":"")+u.toLowerCase()})),Tc=Id((function(e,u,t){return e+(t?" ":"")+u.toLowerCase()})),Mc=Ed("toLowerCase");var Rc=Id((function(e,u,t){return e+(t?"_":"")+u.toLowerCase()}));var Lc=Id((function(e,u,t){return e+(t?" ":"")+Bc(u)}));var Fc=Id((function(e,u,t){return e+(t?" ":"")+u.toUpperCase()})),Bc=Ed("toUpperCase");function Dc(e,u,t){return e=ac(e),void 0===(u=t?void 0:u)?function(e){return Fe.test(e)}(e)?function(e){return e.match(Re)||[]}(e):function(e){return e.match(ee)||[]}(e):e.match(u)||[]}var Uc=Bn((function(e,u){try{return ru(e,void 0,u)}catch(t){return Ba(t)?t:new se(t)}})),zc=Gd((function(e,u){return cu(u,(function(u){u=Sr(u),Ht(e,u,ba(e[u],e))})),e}));function Wc(e){return function(){return e}}var $c=kd(),Gc=kd(!0);function qc(e){return e}function Hc(e){return En("function"==typeof e?e:Jt(e,1))}var Kc=Bn((function(e,u){return function(t){return yn(t,e,u)}})),Vc=Bn((function(e,u){return function(t){return yn(e,t,u)}}));function Jc(e,u,t){var n=gc(u),d=fn(u,n);null!=t||Wa(u)&&(d.length||!n.length)||(t=u,u=e,e=this,d=fn(u,gc(u)));var r=!(Wa(t)&&"chain"in t&&!t.chain),a=Da(e);return cu(d,(function(t){var n=u[t];e[t]=n,a&&(e.prototype[t]=function(){var u=this.__chain__;if(r||u){var t=e(this.__wrapped__),d=t.__actions__=bd(this.__actions__);return d.push({func:n,args:arguments,thisArg:e}),t.__chain__=u,t}return n.apply(e,mu([this.value()],arguments))})})),e}function Zc(){}var Qc=Cd(pu),Yc=Cd(iu),Xc=Cd(bu);function eo(e){return or(e)?Su(Sr(e)):function(e){return function(u){return ln(u,e)}}(e)}var uo=Td(),to=Td(!0);function no(){return[]}function ro(){return!1}var ao=Nd((function(e,u){return e+u}),0),co=Ld("ceil"),oo=Nd((function(e,u){return e/u}),1),io=Ld("floor");var fo,lo=Nd((function(e,u){return e*u}),1),so=Ld("round"),po=Nd((function(e,u){return e-u}),0);return kt.after=function(e,u){if("function"!=typeof u)throw new ye(r);return e=tc(e),function(){if(--e<1)return u.apply(this,arguments)}},kt.ary=ha,kt.assign=cc,kt.assignIn=oc,kt.assignInWith=ic,kt.assignWith=fc,kt.at=lc,kt.before=va,kt.bind=ba,kt.bindAll=zc,kt.bindKey=ya,kt.castArray=function(){if(!arguments.length)return[];var e=arguments[0];return Pa(e)?e:[e]},kt.chain=ea,kt.chunk=function(e,u,t){u=(t?cr(e,u,t):void 0===u)?1:rt(tc(u),0);var d=null==e?0:e.length;if(!d||u<1)return[];for(var r=0,a=0,c=n(Yu(d/u));rd?0:d+t),(n=void 0===n||n>d?d:tc(n))<0&&(n+=d),n=t>n?0:nc(n);t>>0)?(e=ac(e))&&("string"==typeof u||null!=u&&!Ka(u))&&!(u=Qn(u))&&Du(e)?id(Hu(e),0,t):e.split(u,t):[]},kt.spread=function(e,u){if("function"!=typeof e)throw new ye(r);return u=null==u?0:rt(tc(u),0),Bn((function(t){var n=t[u],d=id(t,0,u);return n&&mu(d,n),ru(e,this,d)}))},kt.tail=function(e){var u=null==e?0:e.length;return u?qn(e,1,u):[]},kt.take=function(e,u,t){return e&&e.length?qn(e,0,(u=t||void 0===u?1:tc(u))<0?0:u):[]},kt.takeRight=function(e,u,t){var n=null==e?0:e.length;return n?qn(e,(u=n-(u=t||void 0===u?1:tc(u)))<0?0:u,n):[]},kt.takeRightWhile=function(e,u){return e&&e.length?ud(e,Zd(u,3),!1,!0):[]},kt.takeWhile=function(e,u){return e&&e.length?ud(e,Zd(u,3)):[]},kt.tap=function(e,u){return u(e),e},kt.throttle=function(e,u,t){var n=!0,d=!0;if("function"!=typeof e)throw new ye(r);return Wa(t)&&(n="leading"in t?!!t.leading:n,d="trailing"in t?!!t.trailing:d),ga(e,u,{leading:n,maxWait:u,trailing:d})},kt.thru=ua,kt.toArray=ec,kt.toPairs=Ac,kt.toPairsIn=kc,kt.toPath=function(e){return Pa(e)?pu(e,Sr):Za(e)?[e]:bd(Ir(ac(e)))},kt.toPlainObject=rc,kt.transform=function(e,u,t){var n=Pa(e),d=n||La(e)||Qa(e);if(u=Zd(u,4),null==t){var r=e&&e.constructor;t=d?n?new r:[]:Wa(e)&&Da(r)?jt(qe(e)):{}}return(d?cu:cn)(e,(function(e,n,d){return u(t,e,n,d)})),t},kt.unary=function(e){return ha(e,1)},kt.union=$r,kt.unionBy=Gr,kt.unionWith=qr,kt.uniq=function(e){return e&&e.length?Yn(e):[]},kt.uniqBy=function(e,u){return e&&e.length?Yn(e,Zd(u,2)):[]},kt.uniqWith=function(e,u){return u="function"==typeof u?u:void 0,e&&e.length?Yn(e,void 0,u):[]},kt.unset=function(e,u){return null==e||Xn(e,u)},kt.unzip=Hr,kt.unzipWith=Kr,kt.update=function(e,u,t){return null==e?e:ed(e,u,ad(t))},kt.updateWith=function(e,u,t,n){return n="function"==typeof n?n:void 0,null==e?e:ed(e,u,ad(t),n)},kt.values=jc,kt.valuesIn=function(e){return null==e?[]:Cu(e,_c(e))},kt.without=Vr,kt.words=Dc,kt.wrap=function(e,u){return Sa(ad(u),e)},kt.xor=Jr,kt.xorBy=Zr,kt.xorWith=Qr,kt.zip=Yr,kt.zipObject=function(e,u){return dd(e||[],u||[],Wt)},kt.zipObjectDeep=function(e,u){return dd(e||[],u||[],zn)},kt.zipWith=Xr,kt.entries=Ac,kt.entriesIn=kc,kt.extend=oc,kt.extendWith=ic,Jc(kt,kt),kt.add=ao,kt.attempt=Uc,kt.camelCase=Oc,kt.capitalize=Nc,kt.ceil=co,kt.clamp=function(e,u,t){return void 0===t&&(t=u,u=void 0),void 0!==t&&(t=(t=dc(t))==t?t:0),void 0!==u&&(u=(u=dc(u))==u?u:0),Vt(dc(e),u,t)},kt.clone=function(e){return Jt(e,4)},kt.cloneDeep=function(e){return Jt(e,5)},kt.cloneDeepWith=function(e,u){return Jt(e,5,u="function"==typeof u?u:void 0)},kt.cloneWith=function(e,u){return Jt(e,4,u="function"==typeof u?u:void 0)},kt.conformsTo=function(e,u){return null==u||Zt(e,u,gc(u))},kt.deburr=Cc,kt.defaultTo=function(e,u){return null==e||e!=e?u:e},kt.divide=oo,kt.endsWith=function(e,u,t){e=ac(e),u=Qn(u);var n=e.length,d=t=void 0===t?n:Vt(tc(t),0,n);return(t-=u.length)>=0&&e.slice(t,d)==u},kt.eq=ja,kt.escape=function(e){return(e=ac(e))&&D.test(e)?e.replace(F,Fu):e},kt.escapeRegExp=function(e){return(e=ac(e))&&K.test(e)?e.replace(H,"\\$&"):e},kt.every=function(e,u,t){var n=Pa(e)?iu:un;return t&&cr(e,u,t)&&(u=void 0),n(e,Zd(u,3))},kt.find=da,kt.findIndex=Cr,kt.findKey=function(e,u){return gu(e,Zd(u,3),cn)},kt.findLast=ra,kt.findLastIndex=Pr,kt.findLastKey=function(e,u){return gu(e,Zd(u,3),on)},kt.floor=io,kt.forEach=aa,kt.forEachRight=ca,kt.forIn=function(e,u){return null==e?e:rn(e,Zd(u,3),_c)},kt.forInRight=function(e,u){return null==e?e:an(e,Zd(u,3),_c)},kt.forOwn=function(e,u){return e&&cn(e,Zd(u,3))},kt.forOwnRight=function(e,u){return e&&on(e,Zd(u,3))},kt.get=mc,kt.gt=Oa,kt.gte=Na,kt.has=function(e,u){return null!=e&&nr(e,u,hn)},kt.hasIn=hc,kt.head=Mr,kt.identity=qc,kt.includes=function(e,u,t,n){e=Ma(e)?e:jc(e),t=t&&!n?tc(t):0;var d=e.length;return t<0&&(t=rt(d+t,0)),Ja(e)?t<=d&&e.indexOf(u,t)>-1:!!d&&xu(e,u,t)>-1},kt.indexOf=function(e,u,t){var n=null==e?0:e.length;if(!n)return-1;var d=null==t?0:tc(t);return d<0&&(d=rt(n+d,0)),xu(e,u,d)},kt.inRange=function(e,u,t){return u=uc(u),void 0===t?(t=u,u=0):t=uc(t),function(e,u,t){return e>=at(u,t)&&e=-9007199254740991&&e<=9007199254740991},kt.isSet=Va,kt.isString=Ja,kt.isSymbol=Za,kt.isTypedArray=Qa,kt.isUndefined=function(e){return void 0===e},kt.isWeakMap=function(e){return $a(e)&&tr(e)==w},kt.isWeakSet=function(e){return $a(e)&&"[object WeakSet]"==pn(e)},kt.join=function(e,u){return null==e?"":nt.call(e,u)},kt.kebabCase=Pc,kt.last=Br,kt.lastIndexOf=function(e,u,t){var n=null==e?0:e.length;if(!n)return-1;var d=n;return void 0!==t&&(d=(d=tc(t))<0?rt(n+d,0):at(d,n-1)),u==u?function(e,u,t){for(var n=t+1;n--;)if(e[n]===u)return n;return n}(e,u,d):_u(e,Eu,d,!0)},kt.lowerCase=Tc,kt.lowerFirst=Mc,kt.lt=Ya,kt.lte=Xa,kt.max=function(e){return e&&e.length?tn(e,qc,mn):void 0},kt.maxBy=function(e,u){return e&&e.length?tn(e,Zd(u,2),mn):void 0},kt.mean=function(e){return Iu(e,qc)},kt.meanBy=function(e,u){return Iu(e,Zd(u,2))},kt.min=function(e){return e&&e.length?tn(e,qc,An):void 0},kt.minBy=function(e,u){return e&&e.length?tn(e,Zd(u,2),An):void 0},kt.stubArray=no,kt.stubFalse=ro,kt.stubObject=function(){return{}},kt.stubString=function(){return""},kt.stubTrue=function(){return!0},kt.multiply=lo,kt.nth=function(e,u){return e&&e.length?Cn(e,tc(u)):void 0},kt.noConflict=function(){return Ke._===this&&(Ke._=Oe),this},kt.noop=Zc,kt.now=ma,kt.pad=function(e,u,t){e=ac(e);var n=(u=tc(u))?qu(e):0;if(!u||n>=u)return e;var d=(u-n)/2;return Pd(Xu(d),t)+e+Pd(Yu(d),t)},kt.padEnd=function(e,u,t){e=ac(e);var n=(u=tc(u))?qu(e):0;return u&&nu){var n=e;e=u,u=n}if(t||e%1||u%1){var d=it();return at(e+d*(u-e+$e("1e-"+((d+"").length-1))),u)}return Ln(e,u)},kt.reduce=function(e,u,t){var n=Pa(e)?hu:ku,d=arguments.length<3;return n(e,Zd(u,4),t,d,Xt)},kt.reduceRight=function(e,u,t){var n=Pa(e)?vu:ku,d=arguments.length<3;return n(e,Zd(u,4),t,d,en)},kt.repeat=function(e,u,t){return u=(t?cr(e,u,t):void 0===u)?1:tc(u),Fn(ac(e),u)},kt.replace=function(){var e=arguments,u=ac(e[0]);return e.length<3?u:u.replace(e[1],e[2])},kt.result=function(e,u,t){var n=-1,d=(u=cd(u,e)).length;for(d||(d=1,e=void 0);++n9007199254740991)return[];var t=4294967295,n=at(e,4294967295);e-=4294967295;for(var d=Ou(n,u=Zd(u));++t=r)return e;var c=t-qu(n);if(c<1)return n;var o=a?id(a,0,c).join(""):e.slice(0,c);if(void 0===d)return o+n;if(a&&(c+=o.length-c),Ka(d)){if(e.slice(c).search(d)){var i,f=o;for(d.global||(d=ve(d.source,ac(ne.exec(d))+"g")),d.lastIndex=0;i=d.exec(f);)var l=i.index;o=o.slice(0,void 0===l?c:l)}}else if(e.indexOf(Qn(d),c)!=c){var s=o.lastIndexOf(d);s>-1&&(o=o.slice(0,s))}return o+n},kt.unescape=function(e){return(e=ac(e))&&B.test(e)?e.replace(L,Ku):e},kt.uniqueId=function(e){var u=++Se;return ac(e)+u},kt.upperCase=Fc,kt.upperFirst=Bc,kt.each=aa,kt.eachRight=ca,kt.first=Mr,Jc(kt,(fo={},cn(kt,(function(e,u){Ie.call(kt.prototype,u)||(fo[u]=e)})),fo),{chain:!1}),kt.VERSION="4.17.15",cu(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){kt[e].placeholder=kt})),cu(["drop","take"],(function(e,u){Ct.prototype[e]=function(t){t=void 0===t?1:rt(tc(t),0);var n=this.__filtered__&&!u?new Ct(this):this.clone();return n.__filtered__?n.__takeCount__=at(t,n.__takeCount__):n.__views__.push({size:at(t,4294967295),type:e+(n.__dir__<0?"Right":"")}),n},Ct.prototype[e+"Right"]=function(u){return this.reverse()[e](u).reverse()}})),cu(["filter","map","takeWhile"],(function(e,u){var t=u+1,n=1==t||3==t;Ct.prototype[e]=function(e){var u=this.clone();return u.__iteratees__.push({iteratee:Zd(e,3),type:t}),u.__filtered__=u.__filtered__||n,u}})),cu(["head","last"],(function(e,u){var t="take"+(u?"Right":"");Ct.prototype[e]=function(){return this[t](1).value()[0]}})),cu(["initial","tail"],(function(e,u){var t="drop"+(u?"":"Right");Ct.prototype[e]=function(){return this.__filtered__?new Ct(this):this[t](1)}})),Ct.prototype.compact=function(){return this.filter(qc)},Ct.prototype.find=function(e){return this.filter(e).head()},Ct.prototype.findLast=function(e){return this.reverse().find(e)},Ct.prototype.invokeMap=Bn((function(e,u){return"function"==typeof e?new Ct(this):this.map((function(t){return yn(t,e,u)}))})),Ct.prototype.reject=function(e){return this.filter(Ea(Zd(e)))},Ct.prototype.slice=function(e,u){e=tc(e);var t=this;return t.__filtered__&&(e>0||u<0)?new Ct(t):(e<0?t=t.takeRight(-e):e&&(t=t.drop(e)),void 0!==u&&(t=(u=tc(u))<0?t.dropRight(-u):t.take(u-e)),t)},Ct.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},Ct.prototype.toArray=function(){return this.take(4294967295)},cn(Ct.prototype,(function(e,u){var t=/^(?:filter|find|map|reject)|While$/.test(u),n=/^(?:head|last)$/.test(u),d=kt[n?"take"+("last"==u?"Right":""):u],r=n||/^find/.test(u);d&&(kt.prototype[u]=function(){var u=this.__wrapped__,a=n?[1]:arguments,c=u instanceof Ct,o=a[0],i=c||Pa(u),f=function(e){var u=d.apply(kt,mu([e],a));return n&&l?u[0]:u};i&&t&&"function"==typeof o&&1!=o.length&&(c=i=!1);var l=this.__chain__,s=!!this.__actions__.length,p=r&&!l,m=c&&!s;if(!r&&i){u=m?u:new Ct(this);var h=e.apply(u,a);return h.__actions__.push({func:ua,args:[f],thisArg:void 0}),new Nt(h,l)}return p&&m?e.apply(this,a):(h=this.thru(f),p?n?h.value()[0]:h.value():h)})})),cu(["pop","push","shift","sort","splice","unshift"],(function(e){var u=ge[e],t=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",n=/^(?:pop|shift)$/.test(e);kt.prototype[e]=function(){var e=arguments;if(n&&!this.__chain__){var d=this.value();return u.apply(Pa(d)?d:[],e)}return this[t]((function(t){return u.apply(Pa(t)?t:[],e)}))}})),cn(Ct.prototype,(function(e,u){var t=kt[u];if(t){var n=t.name+"";Ie.call(yt,n)||(yt[n]=[]),yt[n].push({name:u,func:t})}})),yt[jd(void 0,2).name]=[{name:"wrapper",func:void 0}],Ct.prototype.clone=function(){var e=new Ct(this.__wrapped__);return e.__actions__=bd(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=bd(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=bd(this.__views__),e},Ct.prototype.reverse=function(){if(this.__filtered__){var e=new Ct(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},Ct.prototype.value=function(){var e=this.__wrapped__.value(),u=this.__dir__,t=Pa(e),n=u<0,d=t?e.length:0,r=function(e,u,t){var n=-1,d=t.length;for(;++n=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}},kt.prototype.plant=function(e){for(var u,t=this;t instanceof Ot;){var n=kr(t);n.__index__=0,n.__values__=void 0,u?d.__wrapped__=n:u=n;var d=n;t=t.__wrapped__}return d.__wrapped__=e,u},kt.prototype.reverse=function(){var e=this.__wrapped__;if(e instanceof Ct){var u=e;return this.__actions__.length&&(u=new Ct(this)),(u=u.reverse()).__actions__.push({func:ua,args:[Wr],thisArg:void 0}),new Nt(u,this.__chain__)}return this.thru(Wr)},kt.prototype.toJSON=kt.prototype.valueOf=kt.prototype.value=function(){return td(this.__wrapped__,this.__actions__)},kt.prototype.first=kt.prototype.head,Ye&&(kt.prototype[Ye]=function(){return this}),kt}();Ke._=Vu,void 0===(d=function(){return Vu}.call(u,t,u,n))||(n.exports=d)}).call(this)}).call(this,t(76),t(448)(e))},446:function(e,u,t){"use strict";var n=t(0),d=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});u.a=d},448:function(e,u){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},461:function(e,u,t){"use strict";var n=SyntaxError,d=Function,r=TypeError,a=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(u){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(k){c=null}var o=function(){throw new r},i=c?function(){try{return o}catch(e){try{return c(arguments,"callee").get}catch(u){return o}}}():o,f=t(499)(),l=Object.getPrototypeOf||function(e){return e.__proto__},s={},p="undefined"==typeof Uint8Array?void 0:l(Uint8Array),m={"%AggregateError%":"undefined"==typeof AggregateError?void 0:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayIteratorPrototype%":f?l([][Symbol.iterator]()):void 0,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":s,"%AsyncGenerator%":s,"%AsyncGeneratorFunction%":s,"%AsyncIteratorPrototype%":s,"%Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"%BigInt%":"undefined"==typeof BigInt?void 0:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?void 0:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":s,"%Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?l(l([][Symbol.iterator]())):void 0,"%JSON%":"object"==typeof JSON?JSON:void 0,"%Map%":"undefined"==typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?l((new Map)[Symbol.iterator]()):void 0,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?void 0:Promise,"%Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?l((new Set)[Symbol.iterator]()):void 0,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?l(""[Symbol.iterator]()):void 0,"%Symbol%":f?Symbol:void 0,"%SyntaxError%":n,"%ThrowTypeError%":i,"%TypedArray%":p,"%TypeError%":r,"%Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?void 0:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet},h={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},v=t(462),b=t(502),y=v.call(Function.call,Array.prototype.concat),g=v.call(Function.apply,Array.prototype.splice),_=v.call(Function.call,String.prototype.replace),x=v.call(Function.call,String.prototype.slice),w=v.call(Function.call,RegExp.prototype.exec),E=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,I=/\\(\\)?/g,S=function(e){var u=x(e,0,1),t=x(e,-1);if("%"===u&&"%"!==t)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===t&&"%"!==u)throw new n("invalid intrinsic syntax, expected opening `%`");var d=[];return _(e,E,(function(e,u,t,n){d[d.length]=t?_(n,I,"$1"):u||e})),d},A=function(e,u){var t,d=e;if(b(h,d)&&(d="%"+(t=h[d])[0]+"%"),b(m,d)){var c=m[d];if(c===s&&(c=function e(u){var t;if("%AsyncFunction%"===u)t=a("async function () {}");else if("%GeneratorFunction%"===u)t=a("function* () {}");else if("%AsyncGeneratorFunction%"===u)t=a("async function* () {}");else if("%AsyncGenerator%"===u){var n=e("%AsyncGeneratorFunction%");n&&(t=n.prototype)}else if("%AsyncIteratorPrototype%"===u){var d=e("%AsyncGenerator%");d&&(t=l(d.prototype))}return m[u]=t,t}(d)),void 0===c&&!u)throw new r("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:t,name:d,value:c}}throw new n("intrinsic "+e+" does not exist!")};e.exports=function(e,u){if("string"!=typeof e||0===e.length)throw new r("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof u)throw new r('"allowMissing" argument must be a boolean');if(null===w(/^%?[^%]*%?$/,e))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var t=S(e),d=t.length>0?t[0]:"",a=A("%"+d+"%",u),o=a.name,i=a.value,f=!1,l=a.alias;l&&(d=l[0],g(t,y([0,1],l)));for(var s=1,p=!0;s=t.length){var E=c(i,h);i=(p=!!E)&&"get"in E&&!("originalValue"in E.get)?E.get:i[h]}else p=b(i,h),i=i[h];p&&!f&&(m[o]=i)}}return i}},462:function(e,u,t){"use strict";var n=t(501);e.exports=Function.prototype.bind||n},463:function(e,u,t){"use strict";var n=String.prototype.replace,d=/%20/g,r="RFC1738",a="RFC3986";e.exports={default:a,formatters:{RFC1738:function(e){return n.call(e,d,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:a}},470:function(e,u,t){"use strict";var n=t(463),d=Object.prototype.hasOwnProperty,r=Array.isArray,a=function(){for(var e=[],u=0;u<256;++u)e.push("%"+((u<16?"0":"")+u.toString(16)).toUpperCase());return e}(),c=function(e,u){for(var t=u&&u.plainObjects?Object.create(null):{},n=0;n1;){var u=e.pop(),t=u.obj[u.prop];if(r(t)){for(var n=[],d=0;d=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||r===n.RFC1738&&(40===f||41===f)?o+=c.charAt(i):f<128?o+=a[f]:f<2048?o+=a[192|f>>6]+a[128|63&f]:f<55296||f>=57344?o+=a[224|f>>12]+a[128|f>>6&63]+a[128|63&f]:(i+=1,f=65536+((1023&f)<<10|1023&c.charCodeAt(i)),o+=a[240|f>>18]+a[128|f>>12&63]+a[128|f>>6&63]+a[128|63&f])}return o},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,u){if(r(e)){for(var t=[],n=0;n{if("string"!=typeof e)throw new TypeError("Expected a string");return e=(e=(e=n(e)).toLowerCase().replace(/[_-]+/g," ").replace(/\s{2,}/g," ").trim()).charAt(0).toUpperCase()+e.slice(1)};e.exports=d,e.exports.default=d},478:function(e,u){e.exports=Object.is||function(e,u){return e===u?0!==e||1/e==1/u:e!=e&&u!=u}},481:function(e,u,t){"use strict";var n=t(30),d=t(12),r=t(27),a=t(91),c=t(92),o=t(26),i=t(537),f=t(93);d(d.S+d.F*!t(83)((function(e){Array.from(e)})),"Array",{from:function(e){var u,t,d,l,s=r(e),p="function"==typeof this?this:Array,m=arguments.length,h=m>1?arguments[1]:void 0,v=void 0!==h,b=0,y=f(s);if(v&&(h=n(h,m>2?arguments[2]:void 0,2)),null==y||p==Array&&c(y))for(t=new p(u=o(s.length));u>b;b++)i(t,b,v?h(s[b],b):s[b]);else for(l=y.call(s),t=new p;!(d=l.next()).done;b++)i(t,b,v?a(l,h,[d.value,b],!0):d.value);return t.length=b,t}})},482:function(e,u,t){"use strict";var n=t(538),d=t(484);e.exports=t(539)("Set",(function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(e){return n.def(d(this,"Set"),e=0===e?0:e,e)}},n)},483:function(e,u,t){var n=t(40)("meta"),d=t(13),r=t(31),a=t(28).f,c=0,o=Object.isExtensible||function(){return!0},i=!t(14)((function(){return o(Object.preventExtensions({}))})),f=function(e){a(e,n,{value:{i:"O"+ ++c,w:{}}})},l=e.exports={KEY:n,NEED:!1,fastKey:function(e,u){if(!d(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!r(e,n)){if(!o(e))return"F";if(!u)return"E";f(e)}return e[n].i},getWeak:function(e,u){if(!r(e,n)){if(!o(e))return!0;if(!u)return!1;f(e)}return e[n].w},onFreeze:function(e){return i&&l.NEED&&o(e)&&!r(e,n)&&f(e),e}}},484:function(e,u,t){var n=t(13);e.exports=function(e,u){if(!n(e)||e._t!==u)throw TypeError("Incompatible receiver, "+u+" required!");return e}},485:function(e,u,t){"use strict";const n=t(486);e.exports=(e,u)=>{if("string"!=typeof e)throw new TypeError("Expected a string");u=void 0===u?"_":u;const t=n("([\\p{Ll}\\d])(\\p{Lu})","g"),d=n("(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)","g");return e.replace(t,`$1${u}$2`).replace(d,`$1${u}$2`).toLowerCase()}},486:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0});var n=l(t(487)),d=l(t(488)),r=l(t(489)),a=l(t(490)),c=l(t(491)),o=l(t(492)),i=l(t(493)),f=l(t(494));function l(e){return e&&e.__esModule?e:{default:e}}(0,d.default)(n.default),(0,r.default)(n.default),(0,a.default)(n.default),(0,c.default)(n.default),(0,o.default)(n.default),(0,i.default)(n.default),(0,f.default)(n.default),u.default=n.default,e.exports=u.default},487:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0});var n={astral:!1},d={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},a={},c={},o=[],i={default:/\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/,class:/\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/},f=/\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g,l=void 0===d.exec.call(/()??/,"")[1],s=void 0!==/x/.flags,p={}.toString;function m(e){var u=!0;try{new RegExp("",e)}catch(t){u=!1}return u}var h=m("u"),v=m("y"),b={g:!0,i:!0,m:!0,u:h,y:v};function y(e,u,t,n,d){var r=void 0;if(e.xregexp={captureNames:u},d)return e;if(e.__proto__)e.__proto__=C.prototype;else for(r in C.prototype)e[r]=C.prototype[r];return e.xregexp.source=t,e.xregexp.flags=n?n.split("").sort().join(""):n,e}function g(e){return d.replace.call(e,/([\s\S])(?=[\s\S]*\1)/g,"")}function _(e,u){if(!C.isRegExp(e))throw new TypeError("Type RegExp expected");var t=e.xregexp||{},n=function(e){return s?e.flags:d.exec.call(/\/([a-z]*)$/i,RegExp.prototype.toString.call(e))[1]}(e),r="",a="",c=null,o=null;return(u=u||{}).removeG&&(a+="g"),u.removeY&&(a+="y"),a&&(n=d.replace.call(n,new RegExp("["+a+"]+","g"),"")),u.addG&&(r+="g"),u.addY&&(r+="y"),r&&(n=g(n+r)),u.isInternalOnly||(void 0!==t.source&&(c=t.source),null!=t.flags&&(o=r?g(t.flags+r):t.flags)),e=y(new RegExp(u.source||e.source,n),function(e){return!(!e.xregexp||!e.xregexp.captureNames)}(e)?t.captureNames.slice(0):null,c,o,u.isInternalOnly)}function x(e){return parseInt(e,16)}function w(e,u,t){return"("===e.input[e.index-1]||")"===e.input[e.index+e[0].length]||function(e,u,t){return d.test.call(-1!==t.indexOf("x")?/^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/:/^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/,e.slice(u))}(e.input,e.index+e[0].length,t)?"":"(?:)"}function E(e){return parseInt(e,10).toString(16)}function I(e,u){return p.call(e)==="[object "+u+"]"}function S(e){for(;e.length<4;)e="0"+e;return e}function A(e){var u={};return I(e,"String")?(C.forEach(e,/[^\s,]+/,(function(e){u[e]=!0})),u):e}function k(e){if(!/^[\w$]$/.test(e))throw new Error("Flag must be a single character A-Za-z0-9_$");b[e]=!0}function j(e,u,t,n,d){for(var r=o.length,a=e[t],c=null,i=void 0,f=void 0;r--;)if(!((f=o[r]).leadChar&&f.leadChar!==a||f.scope!==n&&"all"!==f.scope||f.flag&&-1===u.indexOf(f.flag))&&(i=C.exec(e,f.regex,t,"sticky"))){c={matchLength:i[0].length,output:f.handler.call(d,i,n,u),reparse:f.reparse};break}return c}function O(e){n.astral=e}function N(e){if(null==e)throw new TypeError("Cannot convert null or undefined to object");return e}function C(e,u){if(C.isRegExp(e)){if(void 0!==u)throw new TypeError("Cannot supply flags when copying a RegExp");return _(e)}if(e=void 0===e?"":String(e),u=void 0===u?"":String(u),C.isInstalled("astral")&&-1===u.indexOf("A")&&(u+="A"),c[e]||(c[e]={}),!c[e][u]){for(var t={hasNamedCapture:!1,captureNames:[]},n="default",r="",a=0,o=void 0,f=function(e,u){var t=void 0;if(g(u)!==u)throw new SyntaxError("Invalid duplicate regex flag "+u);for(e=d.replace.call(e,/^\(\?([\w$]+)\)/,(function(e,t){if(d.test.call(/[gy]/,t))throw new SyntaxError("Cannot use flag g or y in mode modifier "+e);return u=g(u+t),""})),t=0;t"}else if(t)return"\\"+(+t+a);return e}if(!I(e,"Array")||!e.length)throw new TypeError("Must provide a nonempty array of patterns to merge");for(var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,f=[],l=void 0,s=0;s1&&-1!==t.indexOf("")){var n=_(this,{removeG:!0,isInternalOnly:!0});d.replace.call(String(e).slice(t.index),n,(function(){for(var e=arguments.length,u=Array(e),n=0;nt.index&&(this.lastIndex=t.index)}return this.global||(this.lastIndex=u),t},r.test=function(e){return!!r.exec.call(this,e)},r.match=function(e){if(C.isRegExp(e)){if(e.global){var u=d.match.apply(this,arguments);return e.lastIndex=0,u}}else e=new RegExp(e);return r.exec.call(e,N(this))},r.replace=function(e,u){var t=C.isRegExp(e),n=void 0,r=void 0,a=void 0;return t?(e.xregexp&&(r=e.xregexp.captureNames),n=e.lastIndex):e+="",a=I(u,"Function")?d.replace.call(String(this),e,(function(){for(var n=arguments.length,d=Array(n),a=0;at.length-3)throw new SyntaxError("Backreference to undefined group "+e);return t[d]||""}throw new SyntaxError("Invalid token "+e)}})),t&&(e.global?e.lastIndex=0:e.lastIndex=n),a},r.split=function(e,u){if(!C.isRegExp(e))return d.split.apply(this,arguments);var t=String(this),n=[],r=e.lastIndex,a=0,c=void 0;return u=(void 0===u?-1:u)>>>0,C.forEach(t,e,(function(e){e.index+e[0].length>a&&(n.push(t.slice(a,e.index)),e.length>1&&e.indexu?n.slice(0,u):n},C.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/,(function(e,u){if("B"===e[1]&&"default"===u)return e[0];throw new SyntaxError("Invalid escape "+e[0])}),{scope:"all",leadChar:"\\"}),C.addToken(/\\u{([\dA-Fa-f]+)}/,(function(e,u,t){var n=x(e[1]);if(n>1114111)throw new SyntaxError("Invalid Unicode code point "+e[0]);if(n<=65535)return"\\u"+S(E(n));if(h&&-1!==t.indexOf("u"))return e[0];throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u")}),{scope:"all",leadChar:"\\"}),C.addToken(/\[(\^?)\]/,(function(e){return e[1]?"[\\s\\S]":"\\b\\B"}),{leadChar:"["}),C.addToken(/\(\?#[^)]*\)/,w,{leadChar:"("}),C.addToken(/\s+|#[^\n]*\n?/,w,{flag:"x"}),C.addToken(/\./,(function(){return"[\\s\\S]"}),{flag:"s",leadChar:"."}),C.addToken(/\\k<([\w$]+)>/,(function(e){var u=isNaN(e[1])?this.captureNames.indexOf(e[1])+1:+e[1],t=e.index+e[0].length;if(!u||u>this.captureNames.length)throw new SyntaxError("Backreference to undefined group "+e[0]);return"\\"+u+(t===e.input.length||isNaN(e.input[t])?"":"(?:)")}),{leadChar:"\\"}),C.addToken(/\\(\d+)/,(function(e,u){if(!("default"===u&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&"0"!==e[1])throw new SyntaxError("Cannot use octal escape or backreference to undefined group "+e[0]);return e[0]}),{scope:"all",leadChar:"\\"}),C.addToken(/\(\?P?<([\w$]+)>/,(function(e){if(!isNaN(e[1]))throw new SyntaxError("Cannot use integer as capture name "+e[0]);if("length"===e[1]||"__proto__"===e[1])throw new SyntaxError("Cannot use reserved word as capture name "+e[0]);if(-1!==this.captureNames.indexOf(e[1]))throw new SyntaxError("Cannot use same name for multiple groups "+e[0]);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,"("}),{leadChar:"("}),C.addToken(/\((?!\?)/,(function(e,u,t){return-1!==t.indexOf("n")?"(?:":(this.captureNames.push(null),"(")}),{optionalFlags:"n",leadChar:"("}),u.default=C,e.exports=u.default},488:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){var u=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g,t=e.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,u],"g",{conjunction:"or"});function n(e){var u=/^(?:\(\?:\))*\^/,t=/\$(?:\(\?:\))*$/;return u.test(e)&&t.test(e)&&t.test(e.replace(/\\[\s\S]/g,""))?e.replace(u,"").replace(t,""):e}function d(u,t){var n=t?"x":"";return e.isRegExp(u)?u.xregexp&&u.xregexp.captureNames?u:e(u.source,n):e(u,n)}function r(u){return u instanceof RegExp?u:e.escape(u)}function a(e,u,t){return e["subpattern"+t]=u,e}function c(e,u,t){return e+(u1?n-1:0),o=1;o"):o="(?:",h=m,""+o+f[a].pattern.replace(u,(function(e,u,t){if(u){if(c=f[a].names[m-h],++m,c)return"(?<"+c+">"}else if(t)return i=+t-1,f[a].names[i]?"\\k<"+f[a].names[i]+">":"\\"+(+t+h);return e}))+")"}if(d){if(c=y[v],b[++v]=++m,c)return"(?<"+c+">"}else if(r)return y[i=+r-1]?"\\k<"+y[i]+">":"\\"+b[+r];return e}));return e(g,c)}},e.exports=u.default},489:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){function u(e,u,t,n){return{name:e,value:u,start:t,end:n}}e.matchRecursive=function(t,n,d,r,a){a=a||{};var c=-1!==(r=r||"").indexOf("g"),o=-1!==r.indexOf("y"),i=r.replace(/y/g,""),f=a.escapeChar,l=a.valueNames,s=[],p=0,m=0,h=0,v=0,b=void 0,y=void 0,g=void 0,_=void 0,x=void 0;if(n=e(n,i),d=e(d,i),f){if(f.length>1)throw new Error("Cannot use more than one escape character");f=e.escape(f),x=new RegExp("(?:"+f+"[\\S\\s]|(?:(?!"+e.union([n,d],"",{conjunction:"or"}).source+")[^"+f+"])+)+",r.replace(/[^imu]+/g,""))}for(;;){if(f&&(h+=(e.exec(t,x,h,"sticky")||[""])[0].length),g=e.exec(t,n,h),_=e.exec(t,d,h),g&&_&&(g.index<=_.index?_=null:g=null),g||_)h=(m=(g||_).index)+(g||_)[0].length;else if(!p)break;if(o&&!p&&m>v)break;if(g)p||(b=m,y=h),++p;else{if(!_||!p)throw new Error("Unbalanced delimiter found in string");if(!--p&&(l?(l[0]&&b>v&&s.push(u(l[0],t.slice(v,b),v,b)),l[1]&&s.push(u(l[1],t.slice(b,y),b,y)),l[2]&&s.push(u(l[2],t.slice(y,m),y,m)),l[3]&&s.push(u(l[3],t.slice(m,h),m,h))):s.push(t.slice(y,m)),v=h,!c))break}m===h&&++h}return c&&!o&&l&&l[0]&&t.length>v&&s.push(u(l[0],t.slice(v),v,t.length)),s}},e.exports=u.default},490:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){var u={},t=e._dec,n=e._hex,d=e._pad4;function r(e){return e.replace(/[- _]+/g,"").toLowerCase()}function a(e){var u=/^\\[xu](.+)/.exec(e);return u?t(u[1]):e.charCodeAt("\\"===e[0]?1:0)}function c(t){var r,c,o;return u[t]["b!"]||(u[t]["b!"]=(r=u[t].bmp,c="",o=-1,e.forEach(r,/(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/,(function(e){var u=a(e[1]);u>o+1&&(c+="\\u"+d(n(o+1)),u>o+2&&(c+="-\\u"+d(n(u-1)))),o=a(e[2]||e[1])})),o<65535&&(c+="\\u"+d(n(o+1)),o<65534&&(c+="-\\uFFFF")),c))}function o(e,t){var n=t?"a!":"a=";return u[e][n]||(u[e][n]=function(e,t){var n=u[e],d="";return n.bmp&&!n.isBmpLast&&(d="["+n.bmp+"]"+(n.astral?"|":"")),n.astral&&(d+=n.astral),n.isBmpLast&&n.bmp&&(d+=(n.astral?"|":"")+"["+n.bmp+"]"),t?"(?:(?!"+d+")(?:[\ud800-\udbff][\udc00-\udfff]|[\0-\uffff]))":"(?:"+d+")"}(e,t))}e.addToken(/\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/,(function(e,t,n){var d="P"===e[1]||!!e[2],a=-1!==n.indexOf("A"),i=r(e[4]||e[3]),f=u[i];if("P"===e[1]&&e[2])throw new SyntaxError("Invalid double negation "+e[0]);if(!u.hasOwnProperty(i))throw new SyntaxError("Unknown Unicode token "+e[0]);if(f.inverseOf){if(i=r(f.inverseOf),!u.hasOwnProperty(i))throw new ReferenceError("Unicode token missing data "+e[0]+" -> "+f.inverseOf);f=u[i],d=!d}if(!f.bmp&&!a)throw new SyntaxError("Astral mode required for Unicode token "+e[0]);if(a){if("class"===t)throw new SyntaxError("Astral mode does not support Unicode tokens within character classes");return o(i,d)}return"class"===t?d?c(i):f.bmp:(d?"[^":"[")+f.bmp+"]"}),{scope:"all",optionalFlags:"A",leadChar:"\\"}),e.addUnicodeData=function(t){for(var n=void 0,d=0;d\\x5E`\\x7C~\xa2-\xa6\xa8\xa9\xac\xae-\xb1\xb4\xb8\xd7\xf7\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u03f6\u0482\u058d-\u058f\u0606-\u0608\u060b\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09f2\u09f3\u09fa\u09fb\u0af1\u0b70\u0bf3-\u0bfa\u0c7f\u0d4f\u0d79\u0e3f\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u17db\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u2044\u2052\u207a-\u207c\u208a-\u208c\u20a0-\u20be\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u2140-\u2144\u214a-\u214d\u214f\u218a\u218b\u2190-\u2307\u230c-\u2328\u232b-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u2767\u2794-\u27c4\u27c7-\u27e5\u27f0-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u309b\u309c\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua700-\ua716\ua720\ua721\ua789\ua78a\ua828-\ua82b\ua836-\ua839\uaa77-\uaa79\uab5b\ufb29\ufbb2-\ufbc1\ufdfc\ufdfd\ufe62\ufe64-\ufe66\ufe69\uff04\uff0b\uff1c-\uff1e\uff3e\uff40\uff5c\uff5e\uffe0-\uffe6\uffe8-\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83b[\udef0\udef1]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Sc",alias:"Currency_Symbol",bmp:"\\x24\xa2-\xa5\u058f\u060b\u09f2\u09f3\u09fb\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20be\ua838\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6"},{name:"Sk",alias:"Modifier_Symbol",bmp:"\\x5E`\xa8\xaf\xb4\xb8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02eb\u02ed\u02ef-\u02ff\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\ua789\ua78a\uab5b\ufbb2-\ufbc1\uff3e\uff40\uffe3",astral:"\ud83c[\udffb-\udfff]"},{name:"Sm",alias:"Math_Symbol",bmp:"\\x2B<->\\x7C~\xac\xb1\xd7\xf7\u03f6\u0606-\u0608\u2044\u2052\u207a-\u207c\u208a-\u208c\u2118\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\u2b30-\u2b44\u2b47-\u2b4c\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec",astral:"\ud835[\udec1\udedb\udefb\udf15\udf35\udf4f\udf6f\udf89\udfa9\udfc3]|\ud83b[\udef0\udef1]"},{name:"So",alias:"Other_Symbol",bmp:"\xa6\xa9\xae\xb0\u0482\u058d\u058e\u060e\u060f\u06de\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\u0f01-\u0f03\u0f13\u0f15-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce\u0fcf\u0fd5-\u0fd8\u109e\u109f\u1390-\u1399\u1940\u19de-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u214f\u218a\u218b\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23fe\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u2767\u2794-\u27bf\u2800-\u28ff\u2b00-\u2b2f\u2b45\u2b46\u2b4d-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31e3\u3200-\u321e\u322a-\u3247\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ua836\ua837\ua839\uaa77-\uaa79\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd",astral:"\ud800[\udd37-\udd3f\udd79-\udd89\udd8c-\udd8e\udd90-\udd9b\udda0\uddd0-\uddfc]|\ud802[\udc77\udc78\udec8]|\ud805\udf3f|\ud81a[\udf3c-\udf3f\udf45]|\ud82f\udc9c|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd64\udd6a-\udd6c\udd83\udd84\udd8c-\udda9\uddae-\udde8\ude00-\ude41\ude45\udf00-\udf56]|\ud836[\udc00-\uddff\ude37-\ude3a\ude6d-\ude74\ude76-\ude83\ude85\ude86]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udffa]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]"},{name:"Z",alias:"Separator",bmp:" \xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"},{name:"Zl",alias:"Line_Separator",bmp:"\u2028"},{name:"Zp",alias:"Paragraph_Separator",bmp:"\u2029"},{name:"Zs",alias:"Space_Separator",bmp:" \xa0\u1680\u2000-\u200a\u202f\u205f\u3000"}])},e.exports=u.default},493:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");var u=[{name:"ASCII",bmp:"\0-\x7f"},{name:"Alphabetic",bmp:"A-Za-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0345\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05b0-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0657\u0659-\u065f\u066e-\u06d3\u06d5-\u06dc\u06e1-\u06e8\u06ed-\u06ef\u06fa-\u06fc\u06ff\u0710-\u073f\u074d-\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0817\u081a-\u082c\u0840-\u0858\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08df\u08e3-\u08e9\u08f0-\u093b\u093d-\u094c\u094e-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c4\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09f0\u09f1\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a51\u0a59-\u0a5c\u0a5e\u0a70-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac5\u0ac7-\u0ac9\u0acb\u0acc\u0ad0\u0ae0-\u0ae3\u0af9\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d-\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b71\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4c\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccc\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0cf1\u0cf2\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d7a-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e01-\u0e3a\u0e40-\u0e46\u0e4d\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ecd\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f71-\u0f81\u0f88-\u0f97\u0f99-\u0fbc\u1000-\u1036\u1038\u103b-\u103f\u1050-\u1062\u1065-\u1068\u106e-\u1086\u108e\u109c\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135f\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772\u1773\u1780-\u17b3\u17b6-\u17c8\u17d7\u17dc\u1820-\u1877\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u1938\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a1b\u1a20-\u1a5e\u1a61-\u1a74\u1aa7\u1b00-\u1b33\u1b35-\u1b43\u1b45-\u1b4b\u1b80-\u1ba9\u1bac-\u1baf\u1bba-\u1be5\u1be7-\u1bf1\u1c00-\u1c35\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1de7-\u1df4\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua674-\ua67b\ua67f-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua827\ua840-\ua873\ua880-\ua8c3\ua8c5\ua8f2-\ua8f7\ua8fb\ua8fd\ua90a-\ua92a\ua930-\ua952\ua960-\ua97c\ua980-\ua9b2\ua9b4-\ua9bf\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa60-\uaa76\uaa7a\uaa7e-\uaabe\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab65\uab70-\uabea\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf30-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe\uddbf\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2]|\ud804[\udc00-\udc45\udc82-\udcb8\udcd0-\udce8\udd00-\udd32\udd50-\udd72\udd76\udd80-\uddbf\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude34\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udee8\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3d-\udf44\udf47\udf48\udf4b\udf4c\udf50\udf57\udf5d-\udf63]|\ud805[\udc00-\udc41\udc43-\udc45\udc47-\udc4a\udc80-\udcc1\udcc4\udcc5\udcc7\udd80-\uddb5\uddb8-\uddbe\uddd8-\udddd\ude00-\ude3e\ude40\ude44\ude80-\udeb5\udf00-\udf19\udf1d-\udf2a]|\ud806[\udca0-\udcdf\udcff\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc3e\udc40\udc72-\udc8f\udc92-\udca7\udca9-\udcb6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|[\ud80c\ud81c-\ud820\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf36\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\udf00-\udf44\udf50-\udf7e\udf93-\udf9f\udfe0]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]|\ud82c[\udc00\udc01]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9e]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd47]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Any",isBmpLast:!0,bmp:"\0-\uffff",astral:"[\ud800-\udbff][\udc00-\udfff]"},{name:"Default_Ignorable_Code_Point",bmp:"\xad\u034f\u061c\u115f\u1160\u17b4\u17b5\u180b-\u180e\u200b-\u200f\u202a-\u202e\u2060-\u206f\u3164\ufe00-\ufe0f\ufeff\uffa0\ufff0-\ufff8",astral:"\ud82f[\udca0-\udca3]|\ud834[\udd73-\udd7a]|[\udb40-\udb43][\udc00-\udfff]"},{name:"Lowercase",bmp:"a-z\xaa\xb5\xba\xdf-\xf6\xf8-\xff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02b8\u02c0\u02c1\u02e0-\u02e4\u0345\u0371\u0373\u0377\u037a-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0515\u0517\u0519\u051b\u051d\u051f\u0521\u0523\u0525\u0527\u0529\u052b\u052d\u052f\u0561-\u0587\u13f8-\u13fd\u1c80-\u1c88\u1d00-\u1dbf\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9d\u1e9f\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1efb\u1efd\u1eff-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u2090-\u209c\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2170-\u217f\u2184\u24d0-\u24e9\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c71\u2c73\u2c74\u2c76-\u2c7d\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2cec\u2cee\u2cf3\u2d00-\u2d25\u2d27\u2d2d\ua641\ua643\ua645\ua647\ua649\ua64b\ua64d\ua64f\ua651\ua653\ua655\ua657\ua659\ua65b\ua65d\ua65f\ua661\ua663\ua665\ua667\ua669\ua66b\ua66d\ua681\ua683\ua685\ua687\ua689\ua68b\ua68d\ua68f\ua691\ua693\ua695\ua697\ua699\ua69b-\ua69d\ua723\ua725\ua727\ua729\ua72b\ua72d\ua72f-\ua731\ua733\ua735\ua737\ua739\ua73b\ua73d\ua73f\ua741\ua743\ua745\ua747\ua749\ua74b\ua74d\ua74f\ua751\ua753\ua755\ua757\ua759\ua75b\ua75d\ua75f\ua761\ua763\ua765\ua767\ua769\ua76b\ua76d\ua76f-\ua778\ua77a\ua77c\ua77f\ua781\ua783\ua785\ua787\ua78c\ua78e\ua791\ua793-\ua795\ua797\ua799\ua79b\ua79d\ua79f\ua7a1\ua7a3\ua7a5\ua7a7\ua7a9\ua7b5\ua7b7\ua7f8-\ua7fa\uab30-\uab5a\uab5c-\uab65\uab70-\uabbf\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a",astral:"\ud801[\udc28-\udc4f\udcd8-\udcfb]|\ud803[\udcc0-\udcf2]|\ud806[\udcc0-\udcdf]|\ud835[\udc1a-\udc33\udc4e-\udc54\udc56-\udc67\udc82-\udc9b\udcb6-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udccf\udcea-\udd03\udd1e-\udd37\udd52-\udd6b\udd86-\udd9f\uddba-\uddd3\uddee-\ude07\ude22-\ude3b\ude56-\ude6f\ude8a-\udea5\udec2-\udeda\udedc-\udee1\udefc-\udf14\udf16-\udf1b\udf36-\udf4e\udf50-\udf55\udf70-\udf88\udf8a-\udf8f\udfaa-\udfc2\udfc4-\udfc9\udfcb]|\ud83a[\udd22-\udd43]"},{name:"Noncharacter_Code_Point",bmp:"\ufdd0-\ufdef\ufffe\uffff",astral:"[\ud83f\ud87f\ud8bf\ud8ff\ud93f\ud97f\ud9bf\ud9ff\uda3f\uda7f\udabf\udaff\udb3f\udb7f\udbbf\udbff][\udffe\udfff]"},{name:"Uppercase",bmp:"A-Z\xc0-\xd6\xd8-\xde\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0370\u0372\u0376\u037f\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03cf\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0514\u0516\u0518\u051a\u051c\u051e\u0520\u0522\u0524\u0526\u0528\u052a\u052c\u052e\u0531-\u0556\u10a0-\u10c5\u10c7\u10cd\u13a0-\u13f5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1e9e\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1efa\u1efc\u1efe\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2160-\u216f\u2183\u24b6-\u24cf\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c6d-\u2c70\u2c72\u2c75\u2c7e-\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\u2ceb\u2ced\u2cf2\ua640\ua642\ua644\ua646\ua648\ua64a\ua64c\ua64e\ua650\ua652\ua654\ua656\ua658\ua65a\ua65c\ua65e\ua660\ua662\ua664\ua666\ua668\ua66a\ua66c\ua680\ua682\ua684\ua686\ua688\ua68a\ua68c\ua68e\ua690\ua692\ua694\ua696\ua698\ua69a\ua722\ua724\ua726\ua728\ua72a\ua72c\ua72e\ua732\ua734\ua736\ua738\ua73a\ua73c\ua73e\ua740\ua742\ua744\ua746\ua748\ua74a\ua74c\ua74e\ua750\ua752\ua754\ua756\ua758\ua75a\ua75c\ua75e\ua760\ua762\ua764\ua766\ua768\ua76a\ua76c\ua76e\ua779\ua77b\ua77d\ua77e\ua780\ua782\ua784\ua786\ua78b\ua78d\ua790\ua792\ua796\ua798\ua79a\ua79c\ua79e\ua7a0\ua7a2\ua7a4\ua7a6\ua7a8\ua7aa-\ua7ae\ua7b0-\ua7b4\ua7b6\uff21-\uff3a",astral:"\ud801[\udc00-\udc27\udcb0-\udcd3]|\ud803[\udc80-\udcb2]|\ud806[\udca0-\udcbf]|\ud835[\udc00-\udc19\udc34-\udc4d\udc68-\udc81\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb5\udcd0-\udce9\udd04\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd38\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd6c-\udd85\udda0-\uddb9\uddd4-\udded\ude08-\ude21\ude3c-\ude55\ude70-\ude89\udea8-\udec0\udee2-\udefa\udf1c-\udf34\udf56-\udf6e\udf90-\udfa8\udfca]|\ud83a[\udd00-\udd21]|\ud83c[\udd30-\udd49\udd50-\udd69\udd70-\udd89]"},{name:"White_Space",bmp:"\t-\r \x85\xa0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000"}];u.push({name:"Assigned",inverseOf:"Cn"}),e.addUnicodeData(u)},e.exports=u.default},494:function(e,u,t){"use strict";Object.defineProperty(u,"__esModule",{value:!0}),u.default=function(e){if(!e.addUnicodeData)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");e.addUnicodeData([{name:"Adlam",astral:"\ud83a[\udd00-\udd4a\udd50-\udd59\udd5e\udd5f]"},{name:"Ahom",astral:"\ud805[\udf00-\udf19\udf1d-\udf2b\udf30-\udf3f]"},{name:"Anatolian_Hieroglyphs",astral:"\ud811[\udc00-\ude46]"},{name:"Arabic",bmp:"\u0600-\u0604\u0606-\u060b\u060d-\u061a\u061e\u0620-\u063f\u0641-\u064a\u0656-\u066f\u0671-\u06dc\u06de-\u06ff\u0750-\u077f\u08a0-\u08b4\u08b6-\u08bd\u08d4-\u08e1\u08e3-\u08ff\ufb50-\ufbc1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfd\ufe70-\ufe74\ufe76-\ufefc",astral:"\ud803[\ude60-\ude7e]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb\udef0\udef1]"},{name:"Armenian",bmp:"\u0531-\u0556\u0559-\u055f\u0561-\u0587\u058a\u058d-\u058f\ufb13-\ufb17"},{name:"Avestan",astral:"\ud802[\udf00-\udf35\udf39-\udf3f]"},{name:"Balinese",bmp:"\u1b00-\u1b4b\u1b50-\u1b7c"},{name:"Bamum",bmp:"\ua6a0-\ua6f7",astral:"\ud81a[\udc00-\ude38]"},{name:"Bassa_Vah",astral:"\ud81a[\uded0-\udeed\udef0-\udef5]"},{name:"Batak",bmp:"\u1bc0-\u1bf3\u1bfc-\u1bff"},{name:"Bengali",bmp:"\u0980-\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7\u09c8\u09cb-\u09ce\u09d7\u09dc\u09dd\u09df-\u09e3\u09e6-\u09fb"},{name:"Bhaiksuki",astral:"\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc45\udc50-\udc6c]"},{name:"Bopomofo",bmp:"\u02ea\u02eb\u3105-\u312d\u31a0-\u31ba"},{name:"Brahmi",astral:"\ud804[\udc00-\udc4d\udc52-\udc6f\udc7f]"},{name:"Braille",bmp:"\u2800-\u28ff"},{name:"Buginese",bmp:"\u1a00-\u1a1b\u1a1e\u1a1f"},{name:"Buhid",bmp:"\u1740-\u1753"},{name:"Canadian_Aboriginal",bmp:"\u1400-\u167f\u18b0-\u18f5"},{name:"Carian",astral:"\ud800[\udea0-\uded0]"},{name:"Caucasian_Albanian",astral:"\ud801[\udd30-\udd63\udd6f]"},{name:"Chakma",astral:"\ud804[\udd00-\udd34\udd36-\udd43]"},{name:"Cham",bmp:"\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa5c-\uaa5f"},{name:"Cherokee",bmp:"\u13a0-\u13f5\u13f8-\u13fd\uab70-\uabbf"},{name:"Common",bmp:"\0-@\\x5B-`\\x7B-\xa9\xab-\xb9\xbb-\xbf\xd7\xf7\u02b9-\u02df\u02e5-\u02e9\u02ec-\u02ff\u0374\u037e\u0385\u0387\u0589\u0605\u060c\u061b\u061c\u061f\u0640\u06dd\u08e2\u0964\u0965\u0e3f\u0fd5-\u0fd8\u10fb\u16eb-\u16ed\u1735\u1736\u1802\u1803\u1805\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u2000-\u200b\u200e-\u2064\u2066-\u2070\u2074-\u207e\u2080-\u208e\u20a0-\u20be\u2100-\u2125\u2127-\u2129\u212c-\u2131\u2133-\u214d\u214f-\u215f\u2189-\u218b\u2190-\u23fe\u2400-\u2426\u2440-\u244a\u2460-\u27ff\u2900-\u2b73\u2b76-\u2b95\u2b98-\u2bb9\u2bbd-\u2bc8\u2bca-\u2bd1\u2bec-\u2bef\u2e00-\u2e44\u2ff0-\u2ffb\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303c-\u303f\u309b\u309c\u30a0\u30fb\u30fc\u3190-\u319f\u31c0-\u31e3\u3220-\u325f\u327f-\u32cf\u3358-\u33ff\u4dc0-\u4dff\ua700-\ua721\ua788-\ua78a\ua830-\ua839\ua92e\ua9cf\uab5b\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe66\ufe68-\ufe6b\ufeff\uff01-\uff20\uff3b-\uff40\uff5b-\uff65\uff70\uff9e\uff9f\uffe0-\uffe6\uffe8-\uffee\ufff9-\ufffd",astral:"\ud800[\udd00-\udd02\udd07-\udd33\udd37-\udd3f\udd90-\udd9b\uddd0-\uddfc\udee1-\udefb]|\ud82f[\udca0-\udca3]|\ud834[\udc00-\udcf5\udd00-\udd26\udd29-\udd66\udd6a-\udd7a\udd83\udd84\udd8c-\udda9\uddae-\udde8\udf00-\udf56\udf60-\udf71]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e\udc9f\udca2\udca5\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udfcb\udfce-\udfff]|\ud83c[\udc00-\udc2b\udc30-\udc93\udca0-\udcae\udcb1-\udcbf\udcc1-\udccf\udcd1-\udcf5\udd00-\udd0c\udd10-\udd2e\udd30-\udd6b\udd70-\uddac\udde6-\uddff\ude01\ude02\ude10-\ude3b\ude40-\ude48\ude50\ude51\udf00-\udfff]|\ud83d[\udc00-\uded2\udee0-\udeec\udef0-\udef6\udf00-\udf73\udf80-\udfd4]|\ud83e[\udc00-\udc0b\udc10-\udc47\udc50-\udc59\udc60-\udc87\udc90-\udcad\udd10-\udd1e\udd20-\udd27\udd30\udd33-\udd3e\udd40-\udd4b\udd50-\udd5e\udd80-\udd91\uddc0]|\udb40[\udc01\udc20-\udc7f]"},{name:"Coptic",bmp:"\u03e2-\u03ef\u2c80-\u2cf3\u2cf9-\u2cff"},{name:"Cuneiform",astral:"\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc70-\udc74\udc80-\udd43]"},{name:"Cypriot",astral:"\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37\udc38\udc3c\udc3f]"},{name:"Cyrillic",bmp:"\u0400-\u0484\u0487-\u052f\u1c80-\u1c88\u1d2b\u1d78\u2de0-\u2dff\ua640-\ua69f\ufe2e\ufe2f"},{name:"Deseret",astral:"\ud801[\udc00-\udc4f]"},{name:"Devanagari",bmp:"\u0900-\u0950\u0953-\u0963\u0966-\u097f\ua8e0-\ua8fd"},{name:"Duployan",astral:"\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9c-\udc9f]"},{name:"Egyptian_Hieroglyphs",astral:"\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]"},{name:"Elbasan",astral:"\ud801[\udd00-\udd27]"},{name:"Ethiopic",bmp:"\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u137c\u1380-\u1399\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e"},{name:"Georgian",bmp:"\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u10ff\u2d00-\u2d25\u2d27\u2d2d"},{name:"Glagolitic",bmp:"\u2c00-\u2c2e\u2c30-\u2c5e",astral:"\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23\udc24\udc26-\udc2a]"},{name:"Gothic",astral:"\ud800[\udf30-\udf4a]"},{name:"Grantha",astral:"\ud804[\udf00-\udf03\udf05-\udf0c\udf0f\udf10\udf13-\udf28\udf2a-\udf30\udf32\udf33\udf35-\udf39\udf3c-\udf44\udf47\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]"},{name:"Greek",bmp:"\u0370-\u0373\u0375-\u0377\u037a-\u037d\u037f\u0384\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03e1\u03f0-\u03ff\u1d26-\u1d2a\u1d5d-\u1d61\u1d66-\u1d6a\u1dbf\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fc4\u1fc6-\u1fd3\u1fd6-\u1fdb\u1fdd-\u1fef\u1ff2-\u1ff4\u1ff6-\u1ffe\u2126\uab65",astral:"\ud800[\udd40-\udd8e\udda0]|\ud834[\ude00-\ude45]"},{name:"Gujarati",bmp:"\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0af1\u0af9"},{name:"Gurmukhi",bmp:"\u0a01-\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75"},{name:"Han",bmp:"\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u3005\u3007\u3021-\u3029\u3038-\u303b\u3400-\u4db5\u4e00-\u9fd5\uf900-\ufa6d\ufa70-\ufad9",astral:"[\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]"},{name:"Hangul",bmp:"\u1100-\u11ff\u302e\u302f\u3131-\u318e\u3200-\u321e\u3260-\u327e\ua960-\ua97c\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"},{name:"Hanunoo",bmp:"\u1720-\u1734"},{name:"Hatran",astral:"\ud802[\udce0-\udcf2\udcf4\udcf5\udcfb-\udcff]"},{name:"Hebrew",bmp:"\u0591-\u05c7\u05d0-\u05ea\u05f0-\u05f4\ufb1d-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufb4f"},{name:"Hiragana",bmp:"\u3041-\u3096\u309d-\u309f",astral:"\ud82c\udc01|\ud83c\ude00"},{name:"Imperial_Aramaic",astral:"\ud802[\udc40-\udc55\udc57-\udc5f]"},{name:"Inherited",bmp:"\u0300-\u036f\u0485\u0486\u064b-\u0655\u0670\u0951\u0952\u1ab0-\u1abe\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8\u1cf9\u1dc0-\u1df5\u1dfb-\u1dff\u200c\u200d\u20d0-\u20f0\u302a-\u302d\u3099\u309a\ufe00-\ufe0f\ufe20-\ufe2d",astral:"\ud800[\uddfd\udee0]|\ud834[\udd67-\udd69\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad]|\udb40[\udd00-\uddef]"},{name:"Inscriptional_Pahlavi",astral:"\ud802[\udf60-\udf72\udf78-\udf7f]"},{name:"Inscriptional_Parthian",astral:"\ud802[\udf40-\udf55\udf58-\udf5f]"},{name:"Javanese",bmp:"\ua980-\ua9cd\ua9d0-\ua9d9\ua9de\ua9df"},{name:"Kaithi",astral:"\ud804[\udc80-\udcc1]"},{name:"Kannada",bmp:"\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1\u0cf2"},{name:"Katakana",bmp:"\u30a1-\u30fa\u30fd-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff6f\uff71-\uff9d",astral:"\ud82c\udc00"},{name:"Kayah_Li",bmp:"\ua900-\ua92d\ua92f"},{name:"Kharoshthi",astral:"\ud802[\ude00-\ude03\ude05\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude33\ude38-\ude3a\ude3f-\ude47\ude50-\ude58]"},{name:"Khmer",bmp:"\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9\u19e0-\u19ff"},{name:"Khojki",astral:"\ud804[\ude00-\ude11\ude13-\ude3e]"},{name:"Khudawadi",astral:"\ud804[\udeb0-\udeea\udef0-\udef9]"},{name:"Lao",bmp:"\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb9\u0ebb-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf"},{name:"Latin",bmp:"A-Za-z\xaa\xba\xc0-\xd6\xd8-\xf6\xf8-\u02b8\u02e0-\u02e4\u1d00-\u1d25\u1d2c-\u1d5c\u1d62-\u1d65\u1d6b-\u1d77\u1d79-\u1dbe\u1e00-\u1eff\u2071\u207f\u2090-\u209c\u212a\u212b\u2132\u214e\u2160-\u2188\u2c60-\u2c7f\ua722-\ua787\ua78b-\ua7ae\ua7b0-\ua7b7\ua7f7-\ua7ff\uab30-\uab5a\uab5c-\uab64\ufb00-\ufb06\uff21-\uff3a\uff41-\uff5a"},{name:"Lepcha",bmp:"\u1c00-\u1c37\u1c3b-\u1c49\u1c4d-\u1c4f"},{name:"Limbu",bmp:"\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1940\u1944-\u194f"},{name:"Linear_A",astral:"\ud801[\ude00-\udf36\udf40-\udf55\udf60-\udf67]"},{name:"Linear_B",astral:"\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa]"},{name:"Lisu",bmp:"\ua4d0-\ua4ff"},{name:"Lycian",astral:"\ud800[\ude80-\ude9c]"},{name:"Lydian",astral:"\ud802[\udd20-\udd39\udd3f]"},{name:"Mahajani",astral:"\ud804[\udd50-\udd76]"},{name:"Malayalam",bmp:"\u0d01-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d44\u0d46-\u0d48\u0d4a-\u0d4f\u0d54-\u0d63\u0d66-\u0d7f"},{name:"Mandaic",bmp:"\u0840-\u085b\u085e"},{name:"Manichaean",astral:"\ud802[\udec0-\udee6\udeeb-\udef6]"},{name:"Marchen",astral:"\ud807[\udc70-\udc8f\udc92-\udca7\udca9-\udcb6]"},{name:"Meetei_Mayek",bmp:"\uaae0-\uaaf6\uabc0-\uabed\uabf0-\uabf9"},{name:"Mende_Kikakui",astral:"\ud83a[\udc00-\udcc4\udcc7-\udcd6]"},{name:"Meroitic_Cursive",astral:"\ud802[\udda0-\uddb7\uddbc-\uddcf\uddd2-\uddff]"},{name:"Meroitic_Hieroglyphs",astral:"\ud802[\udd80-\udd9f]"},{name:"Miao",astral:"\ud81b[\udf00-\udf44\udf50-\udf7e\udf8f-\udf9f]"},{name:"Modi",astral:"\ud805[\ude00-\ude44\ude50-\ude59]"},{name:"Mongolian",bmp:"\u1800\u1801\u1804\u1806-\u180e\u1810-\u1819\u1820-\u1877\u1880-\u18aa",astral:"\ud805[\ude60-\ude6c]"},{name:"Mro",astral:"\ud81a[\ude40-\ude5e\ude60-\ude69\ude6e\ude6f]"},{name:"Multani",astral:"\ud804[\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea9]"},{name:"Myanmar",bmp:"\u1000-\u109f\ua9e0-\ua9fe\uaa60-\uaa7f"},{name:"Nabataean",astral:"\ud802[\udc80-\udc9e\udca7-\udcaf]"},{name:"New_Tai_Lue",bmp:"\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u19de\u19df"},{name:"Newa",astral:"\ud805[\udc00-\udc59\udc5b\udc5d]"},{name:"Nko",bmp:"\u07c0-\u07fa"},{name:"Ogham",bmp:"\u1680-\u169c"},{name:"Ol_Chiki",bmp:"\u1c50-\u1c7f"},{name:"Old_Hungarian",astral:"\ud803[\udc80-\udcb2\udcc0-\udcf2\udcfa-\udcff]"},{name:"Old_Italic",astral:"\ud800[\udf00-\udf23]"},{name:"Old_North_Arabian",astral:"\ud802[\ude80-\ude9f]"},{name:"Old_Permic",astral:"\ud800[\udf50-\udf7a]"},{name:"Old_Persian",astral:"\ud800[\udfa0-\udfc3\udfc8-\udfd5]"},{name:"Old_South_Arabian",astral:"\ud802[\ude60-\ude7f]"},{name:"Old_Turkic",astral:"\ud803[\udc00-\udc48]"},{name:"Oriya",bmp:"\u0b01-\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5c\u0b5d\u0b5f-\u0b63\u0b66-\u0b77"},{name:"Osage",astral:"\ud801[\udcb0-\udcd3\udcd8-\udcfb]"},{name:"Osmanya",astral:"\ud801[\udc80-\udc9d\udca0-\udca9]"},{name:"Pahawh_Hmong",astral:"\ud81a[\udf00-\udf45\udf50-\udf59\udf5b-\udf61\udf63-\udf77\udf7d-\udf8f]"},{name:"Palmyrene",astral:"\ud802[\udc60-\udc7f]"},{name:"Pau_Cin_Hau",astral:"\ud806[\udec0-\udef8]"},{name:"Phags_Pa",bmp:"\ua840-\ua877"},{name:"Phoenician",astral:"\ud802[\udd00-\udd1b\udd1f]"},{name:"Psalter_Pahlavi",astral:"\ud802[\udf80-\udf91\udf99-\udf9c\udfa9-\udfaf]"},{name:"Rejang",bmp:"\ua930-\ua953\ua95f"},{name:"Runic",bmp:"\u16a0-\u16ea\u16ee-\u16f8"},{name:"Samaritan",bmp:"\u0800-\u082d\u0830-\u083e"},{name:"Saurashtra",bmp:"\ua880-\ua8c5\ua8ce-\ua8d9"},{name:"Sharada",astral:"\ud804[\udd80-\uddcd\uddd0-\udddf]"},{name:"Shavian",astral:"\ud801[\udc50-\udc7f]"},{name:"Siddham",astral:"\ud805[\udd80-\uddb5\uddb8-\udddd]"},{name:"SignWriting",astral:"\ud836[\udc00-\ude8b\ude9b-\ude9f\udea1-\udeaf]"},{name:"Sinhala",bmp:"\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4",astral:"\ud804[\udde1-\uddf4]"},{name:"Sora_Sompeng",astral:"\ud804[\udcd0-\udce8\udcf0-\udcf9]"},{name:"Sundanese",bmp:"\u1b80-\u1bbf\u1cc0-\u1cc7"},{name:"Syloti_Nagri",bmp:"\ua800-\ua82b"},{name:"Syriac",bmp:"\u0700-\u070d\u070f-\u074a\u074d-\u074f"},{name:"Tagalog",bmp:"\u1700-\u170c\u170e-\u1714"},{name:"Tagbanwa",bmp:"\u1760-\u176c\u176e-\u1770\u1772\u1773"},{name:"Tai_Le",bmp:"\u1950-\u196d\u1970-\u1974"},{name:"Tai_Tham",bmp:"\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa0-\u1aad"},{name:"Tai_Viet",bmp:"\uaa80-\uaac2\uaadb-\uaadf"},{name:"Takri",astral:"\ud805[\ude80-\udeb7\udec0-\udec9]"},{name:"Tamil",bmp:"\u0b82\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bfa"},{name:"Tangut",astral:"\ud81b\udfe0|[\ud81c-\ud820][\udc00-\udfff]|\ud821[\udc00-\udfec]|\ud822[\udc00-\udef2]"},{name:"Telugu",bmp:"\u0c00-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c78-\u0c7f"},{name:"Thaana",bmp:"\u0780-\u07b1"},{name:"Thai",bmp:"\u0e01-\u0e3a\u0e40-\u0e5b"},{name:"Tibetan",bmp:"\u0f00-\u0f47\u0f49-\u0f6c\u0f71-\u0f97\u0f99-\u0fbc\u0fbe-\u0fcc\u0fce-\u0fd4\u0fd9\u0fda"},{name:"Tifinagh",bmp:"\u2d30-\u2d67\u2d6f\u2d70\u2d7f"},{name:"Tirhuta",astral:"\ud805[\udc80-\udcc7\udcd0-\udcd9]"},{name:"Ugaritic",astral:"\ud800[\udf80-\udf9d\udf9f]"},{name:"Vai",bmp:"\ua500-\ua62b"},{name:"Warang_Citi",astral:"\ud806[\udca0-\udcf2\udcff]"},{name:"Yi",bmp:"\ua000-\ua48c\ua490-\ua4c6"}])},e.exports=u.default},495:function(e,u,t){"use strict";var n=t(0),d=t.n(n);u.a=function(e){var u=e.text;return d.a.createElement("section",{className:"empty"},d.a.createElement("div",{className:"icon"},d.a.createElement("img",{src:"/img/logo-square.svg",alt:"The Qovery Logo"})),d.a.createElement("div",{className:"text"},u))}},496:function(e,u,t){"use strict";var n=t(497),d=t(507),r=t(463);e.exports={formats:r,parse:d,stringify:n}},497:function(e,u,t){"use strict";var n=t(498),d=t(470),r=t(463),a=Object.prototype.hasOwnProperty,c={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,u){return e+"["+u+"]"},repeat:function(e){return e}},o=Array.isArray,i=String.prototype.split,f=Array.prototype.push,l=function(e,u){f.apply(e,o(u)?u:[u])},s=Date.prototype.toISOString,p=r.default,m={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:d.encode,encodeValuesOnly:!1,format:p,formatter:r.formatters[p],indices:!1,serializeDate:function(e){return s.call(e)},skipNulls:!1,strictNullHandling:!1},h={},v=function e(u,t,r,a,c,f,s,p,v,b,y,g,_,x,w,E){for(var I,S=u,A=E,k=0,j=!1;void 0!==(A=A.get(h))&&!j;){var O=A.get(u);if(k+=1,void 0!==O){if(O===k)throw new RangeError("Cyclic object value");j=!0}void 0===A.get(h)&&(k=0)}if("function"==typeof p?S=p(t,S):S instanceof Date?S=y(S):"comma"===r&&o(S)&&(S=d.maybeMap(S,(function(e){return e instanceof Date?y(e):e}))),null===S){if(c)return s&&!x?s(t,m.encoder,w,"key",g):t;S=""}if("string"==typeof(I=S)||"number"==typeof I||"boolean"==typeof I||"symbol"==typeof I||"bigint"==typeof I||d.isBuffer(S)){if(s){var N=x?t:s(t,m.encoder,w,"key",g);if("comma"===r&&x){for(var C=i.call(String(S),","),P="",T=0;T0?S.join(",")||null:void 0}];else if(o(p))M=p;else{var L=Object.keys(S);M=v?L.sort(v):L}for(var F=a&&o(S)&&1===S.length?t+"[]":t,B=0;B0?x+_:""}},498:function(e,u,t){"use strict";var n=t(461),d=t(503),r=t(505),a=n("%TypeError%"),c=n("%WeakMap%",!0),o=n("%Map%",!0),i=d("WeakMap.prototype.get",!0),f=d("WeakMap.prototype.set",!0),l=d("WeakMap.prototype.has",!0),s=d("Map.prototype.get",!0),p=d("Map.prototype.set",!0),m=d("Map.prototype.has",!0),h=function(e,u){for(var t,n=e;null!==(t=n.next);n=t)if(t.key===u)return n.next=t.next,t.next=e.next,e.next=t,t};e.exports=function(){var e,u,t,n={assert:function(e){if(!n.has(e))throw new a("Side channel does not contain "+r(e))},get:function(n){if(c&&n&&("object"==typeof n||"function"==typeof n)){if(e)return i(e,n)}else if(o){if(u)return s(u,n)}else if(t)return function(e,u){var t=h(e,u);return t&&t.value}(t,n)},has:function(n){if(c&&n&&("object"==typeof n||"function"==typeof n)){if(e)return l(e,n)}else if(o){if(u)return m(u,n)}else if(t)return function(e,u){return!!h(e,u)}(t,n);return!1},set:function(n,d){c&&n&&("object"==typeof n||"function"==typeof n)?(e||(e=new c),f(e,n,d)):o?(u||(u=new o),p(u,n,d)):(t||(t={key:{},next:null}),function(e,u,t){var n=h(e,u);n?n.value=t:e.next={key:u,next:e.next,value:t}}(t,n,d))}};return n}},499:function(e,u,t){"use strict";var n="undefined"!=typeof Symbol&&Symbol,d=t(500);e.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&d())))}},500:function(e,u,t){"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},u=Symbol("test"),t=Object(u);if("string"==typeof u)return!1;if("[object Symbol]"!==Object.prototype.toString.call(u))return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;for(u in e[u]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==u)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,u))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var d=Object.getOwnPropertyDescriptor(e,u);if(42!==d.value||!0!==d.enumerable)return!1}return!0}},501:function(e,u,t){"use strict";var n="Function.prototype.bind called on incompatible ",d=Array.prototype.slice,r=Object.prototype.toString;e.exports=function(e){var u=this;if("function"!=typeof u||"[object Function]"!==r.call(u))throw new TypeError(n+u);for(var t,a=d.call(arguments,1),c=function(){if(this instanceof t){var n=u.apply(this,a.concat(d.call(arguments)));return Object(n)===n?n:this}return u.apply(e,a.concat(d.call(arguments)))},o=Math.max(0,u.length-a.length),i=[],f=0;f-1?d(t):t}},504:function(e,u,t){"use strict";var n=t(462),d=t(461),r=d("%Function.prototype.apply%"),a=d("%Function.prototype.call%"),c=d("%Reflect.apply%",!0)||n.call(a,r),o=d("%Object.getOwnPropertyDescriptor%",!0),i=d("%Object.defineProperty%",!0),f=d("%Math.max%");if(i)try{i({},"a",{value:1})}catch(s){i=null}e.exports=function(e){var u=c(n,a,arguments);if(o&&i){var t=o(u,"length");t.configurable&&i(u,"length",{value:1+f(0,e.length-(arguments.length-1))})}return u};var l=function(){return c(n,r,arguments)};i?i(e.exports,"apply",{value:l}):e.exports.apply=l},505:function(e,u,t){var n="function"==typeof Map&&Map.prototype,d=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,r=n&&d&&"function"==typeof d.get?d.get:null,a=n&&Map.prototype.forEach,c="function"==typeof Set&&Set.prototype,o=Object.getOwnPropertyDescriptor&&c?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,i=c&&o&&"function"==typeof o.get?o.get:null,f=c&&Set.prototype.forEach,l="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,s="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,m=Boolean.prototype.valueOf,h=Object.prototype.toString,v=Function.prototype.toString,b=String.prototype.match,y=String.prototype.slice,g=String.prototype.replace,_=String.prototype.toUpperCase,x=String.prototype.toLowerCase,w=RegExp.prototype.test,E=Array.prototype.concat,I=Array.prototype.join,S=Array.prototype.slice,A=Math.floor,k="function"==typeof BigInt?BigInt.prototype.valueOf:null,j=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,N="function"==typeof Symbol&&"object"==typeof Symbol.iterator,C="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===N||"symbol")?Symbol.toStringTag:null,P=Object.prototype.propertyIsEnumerable,T=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function M(e,u){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||w.call(/e/,u))return u;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var n=e<0?-A(-e):A(e);if(n!==e){var d=String(n),r=y.call(u,d.length+1);return g.call(d,t,"$&_")+"."+g.call(g.call(r,/([0-9]{3})/g,"$&_"),/_$/,"")}}return g.call(u,t,"$&_")}var R=t(506),L=R.custom,F=W(L)?L:null;function B(e,u,t){var n="double"===(t.quoteStyle||u)?'"':"'";return n+e+n}function D(e){return g.call(String(e),/"/g,""")}function U(e){return!("[object Array]"!==q(e)||C&&"object"==typeof e&&C in e)}function z(e){return!("[object RegExp]"!==q(e)||C&&"object"==typeof e&&C in e)}function W(e){if(N)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!O)return!1;try{return O.call(e),!0}catch(u){}return!1}e.exports=function e(u,t,n,d){var c=t||{};if(G(c,"quoteStyle")&&"single"!==c.quoteStyle&&"double"!==c.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(G(c,"maxStringLength")&&("number"==typeof c.maxStringLength?c.maxStringLength<0&&c.maxStringLength!==1/0:null!==c.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var o=!G(c,"customInspect")||c.customInspect;if("boolean"!=typeof o&&"symbol"!==o)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(G(c,"indent")&&null!==c.indent&&"\t"!==c.indent&&!(parseInt(c.indent,10)===c.indent&&c.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(G(c,"numericSeparator")&&"boolean"!=typeof c.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=c.numericSeparator;if(void 0===u)return"undefined";if(null===u)return"null";if("boolean"==typeof u)return u?"true":"false";if("string"==typeof u)return function e(u,t){if(u.length>t.maxStringLength){var n=u.length-t.maxStringLength,d="... "+n+" more character"+(n>1?"s":"");return e(y.call(u,0,t.maxStringLength),t)+d}return B(g.call(g.call(u,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}(u,c);if("number"==typeof u){if(0===u)return 1/0/u>0?"0":"-0";var _=String(u);return h?M(u,_):_}if("bigint"==typeof u){var w=String(u)+"n";return h?M(u,w):w}var A=void 0===c.depth?5:c.depth;if(void 0===n&&(n=0),n>=A&&A>0&&"object"==typeof u)return U(u)?"[Array]":"[Object]";var j=function(e,u){var t;if("\t"===e.indent)t="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;t=I.call(Array(e.indent+1)," ")}return{base:t,prev:I.call(Array(u+1),t)}}(c,n);if(void 0===d)d=[];else if(H(d,u)>=0)return"[Circular]";function L(u,t,r){if(t&&(d=S.call(d)).push(t),r){var a={depth:c.depth};return G(c,"quoteStyle")&&(a.quoteStyle=c.quoteStyle),e(u,a,n+1,d)}return e(u,c,n+1,d)}if("function"==typeof u&&!z(u)){var $=function(e){if(e.name)return e.name;var u=b.call(v.call(e),/^function\s*([\w$]+)/);if(u)return u[1];return null}(u),X=Y(u,L);return"[Function"+($?": "+$:" (anonymous)")+"]"+(X.length>0?" { "+I.call(X,", ")+" }":"")}if(W(u)){var ee=N?g.call(String(u),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(u);return"object"!=typeof u||N?ee:V(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(u)){for(var ue="<"+x.call(String(u.nodeName)),te=u.attributes||[],ne=0;ne"}if(U(u)){if(0===u.length)return"[]";var de=Y(u,L);return j&&!function(e){for(var u=0;u=0)return!1;return!0}(de)?"["+Q(de,j)+"]":"[ "+I.call(de,", ")+" ]"}if(function(e){return!("[object Error]"!==q(e)||C&&"object"==typeof e&&C in e)}(u)){var re=Y(u,L);return"cause"in Error.prototype||!("cause"in u)||P.call(u,"cause")?0===re.length?"["+String(u)+"]":"{ ["+String(u)+"] "+I.call(re,", ")+" }":"{ ["+String(u)+"] "+I.call(E.call("[cause]: "+L(u.cause),re),", ")+" }"}if("object"==typeof u&&o){if(F&&"function"==typeof u[F]&&R)return R(u,{depth:A-n});if("symbol"!==o&&"function"==typeof u.inspect)return u.inspect()}if(function(e){if(!r||!e||"object"!=typeof e)return!1;try{r.call(e);try{i.call(e)}catch(ue){return!0}return e instanceof Map}catch(u){}return!1}(u)){var ae=[];return a.call(u,(function(e,t){ae.push(L(t,u,!0)+" => "+L(e,u))})),Z("Map",r.call(u),ae,j)}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{r.call(e)}catch(u){return!0}return e instanceof Set}catch(t){}return!1}(u)){var ce=[];return f.call(u,(function(e){ce.push(L(e,u))})),Z("Set",i.call(u),ce,j)}if(function(e){if(!l||!e||"object"!=typeof e)return!1;try{l.call(e,l);try{s.call(e,s)}catch(ue){return!0}return e instanceof WeakMap}catch(u){}return!1}(u))return J("WeakMap");if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e,s);try{l.call(e,l)}catch(ue){return!0}return e instanceof WeakSet}catch(u){}return!1}(u))return J("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(u){}return!1}(u))return J("WeakRef");if(function(e){return!("[object Number]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(L(Number(u)));if(function(e){if(!e||"object"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(u){}return!1}(u))return V(L(k.call(u)));if(function(e){return!("[object Boolean]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(m.call(u));if(function(e){return!("[object String]"!==q(e)||C&&"object"==typeof e&&C in e)}(u))return V(L(String(u)));if(!function(e){return!("[object Date]"!==q(e)||C&&"object"==typeof e&&C in e)}(u)&&!z(u)){var oe=Y(u,L),ie=T?T(u)===Object.prototype:u instanceof Object||u.constructor===Object,fe=u instanceof Object?"":"null prototype",le=!ie&&C&&Object(u)===u&&C in u?y.call(q(u),8,-1):fe?"Object":"",se=(ie||"function"!=typeof u.constructor?"":u.constructor.name?u.constructor.name+" ":"")+(le||fe?"["+I.call(E.call([],le||[],fe||[]),": ")+"] ":"");return 0===oe.length?se+"{}":j?se+"{"+Q(oe,j)+"}":se+"{ "+I.call(oe,", ")+" }"}return String(u)};var $=Object.prototype.hasOwnProperty||function(e){return e in this};function G(e,u){return $.call(e,u)}function q(e){return h.call(e)}function H(e,u){if(e.indexOf)return e.indexOf(u);for(var t=0,n=e.length;t-1?e.split(","):e},i=function(e,u,t,n){if(e){var r=t.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,c=t.depth>0&&/(\[[^[\]]*])/.exec(r),i=c?r.slice(0,c.index):r,f=[];if(i){if(!t.plainObjects&&d.call(Object.prototype,i)&&!t.allowPrototypes)return;f.push(i)}for(var l=0;t.depth>0&&null!==(c=a.exec(r))&&l=0;--r){var a,c=e[r];if("[]"===c&&t.parseArrays)a=[].concat(d);else{a=t.plainObjects?Object.create(null):{};var i="["===c.charAt(0)&&"]"===c.charAt(c.length-1)?c.slice(1,-1):c,f=parseInt(i,10);t.parseArrays||""!==i?!isNaN(f)&&c!==i&&String(f)===i&&f>=0&&t.parseArrays&&f<=t.arrayLimit?(a=[])[f]=d:"__proto__"!==i&&(a[i]=d):a={0:d}}d=a}return d}(f,u,t,n)}};e.exports=function(e,u){var t=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var u=void 0===e.charset?a.charset:e.charset;return{allowDots:void 0===e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:u,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||n.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(u);if(""===e||null==e)return t.plainObjects?Object.create(null):{};for(var f="string"==typeof e?function(e,u){var t,i={},f=u.ignoreQueryPrefix?e.replace(/^\?/,""):e,l=u.parameterLimit===1/0?void 0:u.parameterLimit,s=f.split(u.delimiter,l),p=-1,m=u.charset;if(u.charsetSentinel)for(t=0;t-1&&(v=r(v)?[v]:v),d.call(i,h)?i[h]=n.combine(i[h],v):i[h]=v}return i}(e,t):e,l=t.plainObjects?Object.create(null):{},s=Object.keys(f),p=0;p1?arguments[1]:void 0,3);t=t?t.n:this._f;)for(n(t.v,t.k,this);t&&t.r;)t=t.p},has:function(e){return!!v(m(this,u),e)}}),s&&n(f.prototype,"size",{get:function(){return m(this,u)[h]}}),f},def:function(e,u,t){var n,d,r=v(e,u);return r?r.v=t:(e._l=r={i:d=p(u,!0),k:u,v:t,p:n=e._l,n:void 0,r:!1},e._f||(e._f=r),n&&(n.n=r),e[h]++,"F"!==d&&(e._i[d]=r)),e},getEntry:v,setStrong:function(e,u,t){i(e,u,(function(e,t){this._t=m(e,u),this._k=t,this._l=void 0}),(function(){for(var e=this._k,u=this._l;u&&u.r;)u=u.p;return this._t&&(this._l=u=u?u.n:this._t._f)?f(0,"keys"==e?u.k:"values"==e?u.v:[u.k,u.v]):(this._t=void 0,f(1))}),t?"entries":"values",!t,!0),l(u)}}},539:function(e,u,t){"use strict";var n=t(5),d=t(12),r=t(16),a=t(82),c=t(483),o=t(81),i=t(80),f=t(13),l=t(14),s=t(83),p=t(41),m=t(540);e.exports=function(e,u,t,h,v,b){var y=n[e],g=y,_=v?"set":"add",x=g&&g.prototype,w={},E=function(e){var u=x[e];r(x,e,"delete"==e||"has"==e?function(e){return!(b&&!f(e))&&u.call(this,0===e?0:e)}:"get"==e?function(e){return b&&!f(e)?void 0:u.call(this,0===e?0:e)}:"add"==e?function(e){return u.call(this,0===e?0:e),this}:function(e,t){return u.call(this,0===e?0:e,t),this})};if("function"==typeof g&&(b||x.forEach&&!l((function(){(new g).entries().next()})))){var I=new g,S=I[_](b?{}:-0,1)!=I,A=l((function(){I.has(1)})),k=s((function(e){new g(e)})),j=!b&&l((function(){for(var e=new g,u=5;u--;)e[_](u,u);return!e.has(-0)}));k||((g=u((function(u,t){i(u,g,e);var n=m(new y,u,g);return null!=t&&o(t,v,n[_],n),n}))).prototype=x,x.constructor=g),(A||j)&&(E("delete"),E("has"),v&&E("get")),(j||S)&&E(_),b&&x.clear&&delete x.clear}else g=h.getConstructor(u,e,v,_),a(g.prototype,t),c.NEED=!0;return p(g,e),w[e]=g,d(d.G+d.W+d.F*(g!=y),w),b||h.setStrong(g,e,v),g}},540:function(e,u,t){var n=t(13),d=t(541).set;e.exports=function(e,u,t){var r,a=u.constructor;return a!==t&&"function"==typeof a&&(r=a.prototype)!==t.prototype&&n(r)&&d&&d(e,r),e}},541:function(e,u,t){var n=t(13),d=t(8),r=function(e,u){if(d(e),!n(u)&&null!==u)throw TypeError(u+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,u,n){try{(n=t(30)(Function.call,t(542).f(Object.prototype,"__proto__").set,2))(e,[]),u=!(e instanceof Array)}catch(d){u=!0}return function(e,t){return r(e,t),u?e.__proto__=t:n(e,t),e}}({},!1):void 0),check:r}},542:function(e,u,t){var n=t(62),d=t(57),r=t(33),a=t(87),c=t(31),o=t(86),i=Object.getOwnPropertyDescriptor;u.f=t(10)?i:function(e,u){if(e=r(e),u=a(u,!0),o)try{return i(e,u)}catch(t){}if(c(e,u))return d(!n.f.call(e,u),e[u])}},543:function(e,u,t){"use strict";var n=t(12),d=t(32),r=t(27),a=t(14),c=[].sort,o=[1,2,3];n(n.P+n.F*(a((function(){o.sort(void 0)}))||!a((function(){o.sort(null)}))||!t(544)(c)),"Array",{sort:function(e){return void 0===e?c.call(r(this)):c.call(r(this),d(e))}})},544:function(e,u,t){"use strict";var n=t(14);e.exports=function(e,u){return!!e&&n((function(){u?e.call(null,(function(){}),1):e.call(null)}))}},553:function(e,u,t){"use strict";t(481),t(79),t(482),t(543),t(29),t(22),t(21),t(85),t(434);var n=t(1),d=(t(438),t(439),t(77),t(420),t(0)),r=t.n(d),a=t(473),c=t.n(a);t(150);var o=function(e){var u=e.humanize,t=e.icon,n=e.values,d=e.currentState,a=e.setState;if(0==n.size)return null;var o=Array.from(n);return r.a.createElement(r.a.Fragment,null,o.map((function(e,n){var o="string"==typeof e&&u?c()(e):e;return r.a.createElement("label",{key:n},r.a.createElement("input",{type:"checkbox",onChange:function(u){var t=new Set(d);u.currentTarget.checked?t.add(e):t.delete(e),a(t)},checked:d.has(e)}),o&&r.a.createElement(r.a.Fragment,null,t?r.a.createElement("i",{className:"feather icon-"+t}):""," ",o))})))},i=t(495),f=t(424),l=t(422),s=(t(432),t(443)),p=t.n(s),m=t(415),h=t.n(m),v=t(496),b=t.n(v),y=t(428);t(151);function g(e){var u=e.delivery_guarantee,t=e.description,n=e.event_types,d=e.function_category,a=(e.logo_path,e.name),c=e.pathTemplate,o=e.status,i=e.title,f=e.type,s=c;s||("source"==f&&(s="/docs/reference/sources//"),"transform"==f&&(s="/docs/reference/transforms//"),"sink"==f&&(s="/docs/reference/sinks//"));var p=s.replace("",a);return r.a.createElement(l.a,{to:p,className:"qovery-component",title:t},r.a.createElement("div",{className:"qovery-component--header"},r.a.createElement("div",{className:"qovery-component--name"},i)),r.a.createElement("div",{className:"qovery-component--badges"},"beta"==o?r.a.createElement("span",{className:"badge badge--warning",title:"This component is in beta and is not recommended for production environments"},r.a.createElement("i",{className:"feather icon-alert-triangle"})):r.a.createElement("span",{className:"badge badge--primary",title:"This component has passed reliability standards that make it production ready"},r.a.createElement("i",{className:"feather icon-award"})),"best_effort"==u?r.a.createElement("span",{className:"badge badge--warning",title:"This component makes a best-effort delivery guarantee, and in rare cases can lose data"},r.a.createElement("i",{className:"feather icon-shield-off"})):r.a.createElement("span",{className:"badge badge--primary",title:"This component offers an at-least-once delivery guarantee"},r.a.createElement("i",{className:"feather icon-shield"})),n.includes("log")?r.a.createElement("span",{className:"badge badge--primary",title:"This component works with log event types"},"log"):"",n.includes("metric")?r.a.createElement("span",{className:"badge badge--primary",title:"This component works with metric event types"},"metric"):"",r.a.createElement("span",{className:"badge badge--primary"},d)))}function _(e){var u=e.components,t=e.headingLevel,d=e.pathTemplate,a=e.titles,c=u.filter((function(e){return"source"==e.type})),o=u.filter((function(e){return"transform"==e.type})),l=u.filter((function(e){return"sink"==e.type})),s="h"+(t||3);return u.length>0?r.a.createElement(r.a.Fragment,null,c.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,c.length," Sources"),r.a.createElement("div",{className:"qovery-components--grid"},c.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",o.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,o.length," Transforms"),r.a.createElement("div",{className:"qovery-components--grid"},o.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",l.length>0?r.a.createElement(r.a.Fragment,null,a&&r.a.createElement(s,null,l.length," Sinks"),r.a.createElement("div",{className:"qovery-components--grid"},l.map((function(e,u){return r.a.createElement(g,Object(n.a)({key:u,pathTemplate:d},e))})))):"",r.a.createElement("hr",null),r.a.createElement(f.a,{to:"https://github.com/qovery/documentation/issues/new?labels=type%3A+new+feature",target:"_blank",rightIcon:"plus-circle"},"Request a new component")):r.a.createElement(i.a,{text:"no components found"})}u.a=function(e){var u=Object(y.a)().siteConfig.customFields.metadata,t=u.sources,n=u.transforms,a=u.sinks,c=e.titles||null==e.titles,i=1==e.filterColumn,f=e.pathTemplate,s=e.location?b.a.parse(e.location.search,{ignoreQueryPrefix:!0}):{},m=[];(e.sources||null==e.sources)&&(m=m.concat(Object.values(t))),(e.transforms||null==e.transforms)&&(m=m.concat(Object.values(n))),(e.sinks||null==e.sinks)&&(m=m.concat(Object.values(a))),m=m.sort((function(e,u){return e.name>u.name?1:-1}));var v=Object(d.useState)("true"==s["at-least-once"]),g=v[0],x=v[1],w=Object(d.useState)(new Set(s["event-types"]||e.eventTypes)),E=w[0],I=w[1],S=Object(d.useState)(new Set(s.functions)),A=S[0],k=S[1],j=Object(d.useState)(new Set(s["operating-systems"])),O=j[0],N=j[1],C=Object(d.useState)("true"==s["prod-ready"]),P=C[0],T=C[1],M=Object(d.useState)(new Set(s.providers)),R=M[0],L=M[1],F=Object(d.useState)(s.search),B=F[0],D=F[1];B&&(m=m.filter((function(e){return(e.name.toLowerCase()+" "+e.type.toLowerCase()).includes(B.toLowerCase())}))),g&&(m=m.filter((function(e){return"at_least_once"==e.delivery_guarantee}))),E.size>0&&(m=m.filter((function(e){return Array.from(E).some((function(u){return e.event_types.includes(u)}))}))),A.size>0&&(m=m.filter((function(e){return A.has(e.function_category)}))),O.size>0&&(m=m.filter((function(e){return Array.from(O).every((function(u){return e.operating_systems.includes(u)}))}))),P&&(m=m.filter((function(e){return"prod-ready"==e.status}))),R.size>0&&(m=m.filter((function(e){return Array.from(R).every((function(u){return e.service_providers&&e.service_providers.includes(u)}))}))),e.exceptNames&&e.exceptNames.length>0&&(m=m.filter((function(u){return!e.exceptNames.includes(u.name)}))),e.exceptFunctions&&e.exceptFunctions.length>0&&(m=m.filter((function(u){return!e.exceptFunctions.includes(u.function_category)})));var U=E.size>0?E:new Set(p()(m).map((function(e){return e.event_types})).flatten().uniq().compact().sort().value()),z=new Set(p()(m).map((function(e){return e.operating_systems})).flatten().uniq().compact().sort().value()),W=new Set(p()(m).map((function(e){return e.service_providers})).flatten().uniq().compact().sort().value()),$=new Set(p()(m).filter((function(e){return"source"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),G=new Set(p()(m).filter((function(e){return"transform"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value()),q=new Set(p()(m).filter((function(e){return"sink"==e.type})).map((function(e){return e.function_category})).uniq().compact().sort().value());return r.a.createElement("div",{className:h()("qovery-components",{"qovery-components--cols":i})},r.a.createElement("div",{className:"filters"},r.a.createElement("div",{className:"search"},r.a.createElement("input",{className:"input--text input--lg",type:"text",onChange:function(e){return D(e.currentTarget.value)},placeholder:"\ud83d\udd0d Search..."})),r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/getting-started/data-model/",title:"Learn more about Qovery's event types"},"Event types ",r.a.createElement("i",{className:"feather icon-info"}))),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Event Types",icon:"database",values:U,humanize:!0,currentState:E,setState:I}))),r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/getting-started/whats-next/",title:"Learn more about Qovery's guarantees"},"Guarantees ",r.a.createElement("i",{className:"feather icon-info"}))),r.a.createElement("div",{className:"filter--choices"},r.a.createElement("label",{title:"Show only components that offer an at-least-once delivery guarantee."},r.a.createElement("input",{type:"checkbox",onChange:function(e){return x(e.currentTarget.checked)},checked:g}),r.a.createElement("i",{className:"feather icon-shield"})," At-least-once"),r.a.createElement("label",{title:"Show only production ready components."},r.a.createElement("input",{type:"checkbox",onChange:function(e){return T(e.currentTarget.checked)},checked:P}),r.a.createElement("i",{className:"feather icon-award"})," Prod-ready"))),$.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Source Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:$,humanize:!0,currentState:A,setState:k}))),G.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Transform Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:G,humanize:!0,currentState:A,setState:k}))),q.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Sink Functions"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Functions",icon:"settings",values:q,humanize:!0,currentState:A,setState:k}))),W.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},"Providers"),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Providers",icon:"cloud",values:W,currentState:R,setState:L}))),z.size>0&&r.a.createElement("div",{className:"filter"},r.a.createElement("div",{className:"filter--label"},r.a.createElement(l.a,{to:"/docs/setup/installation/operating-systems/",title:"Learn more about Qovery's operating systems"},"Operating Systems")),r.a.createElement("div",{className:"filter--choices"},r.a.createElement(o,{label:"Operating Systems",icon:"cpu",values:z,currentState:O,setState:N})))),r.a.createElement("div",{className:"qovery-components--results"},r.a.createElement(_,{components:m,headingLevel:e.headingLevel,pathTemplate:f,titles:c})))}}}]); \ No newline at end of file diff --git a/54e7632e.8e8ddea7.js.LICENSE.txt b/54e7632e.9eb95085.js.LICENSE.txt similarity index 100% rename from 54e7632e.8e8ddea7.js.LICENSE.txt rename to 54e7632e.9eb95085.js.LICENSE.txt diff --git a/672ba3d6.032df364.js b/672ba3d6.032df364.js new file mode 100644 index 0000000000..008c35d958 --- /dev/null +++ b/672ba3d6.032df364.js @@ -0,0 +1,2 @@ +/*! For license information please see 672ba3d6.032df364.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{264:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),o=a(442),c=a(437),i=a(554),l=a(428),s=Object(o.a)("h2");t.default=function(){var e=Object(l.a)().siteConfig;return(void 0===e?{}:e).customFields.metadata.team,r.a.createElement(c.a,{title:"Community",description:"Join the Qovery community. Connect with the core Qovery team and other Qovery users."},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Qovery Community"),r.a.createElement(i.a,{buttonClass:"highlight",center:!0,size:"lg"}))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement(s,{id:"connect"},"Connect"),r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Discord"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discord"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://community.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-globe"})),r.a.createElement("div",{className:"panel--title"},"Forum"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discourse"))))),r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://twitter.com/Qovery_",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-twitter",title:"Twitter"})),r.a.createElement("div",{className:"panel--title"},"@Qovery"),r.a.createElement("div",{className:"panel--description"},"Follow us in real-time"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-github"})),r.a.createElement("div",{className:"panel--title"},"Github qovery"),r.a.createElement("div",{className:"panel--description"},"Issues, code, and development"))))))))}},415:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:f,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),l.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(q,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:M.a.footerLogoLink},r.a.createElement(z,{alt:m.alt,url:d})):r.a.createElement(z,{alt:m.alt,url:d})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},F=a(454),J=a(455),P=a(3);a(138);t.a=function(e){var t=Object(h.a)().siteConfig,a=void 0===t?{}:t,n=a.favicon,i=(a.tagline,a.title),l=a.themeConfig.image,s=a.url,m=e.children,u=e.title,d=e.noFooter,f=e.description,p=e.image,g=e.keywords,v=(e.permalink,e.version),b=u?u+" | "+i:i,E=p||l,y=s+Object(_.a)(E),w=Object(_.a)(n),N=Object(P.h)(),k=N?"https://docs.qovery.com"+(N.pathname.endsWith("/")?N.pathname:N.pathname+"/"):null;return r.a.createElement(J.a,null,r.a.createElement(F.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),b&&r.a.createElement("title",null,b),b&&r.a.createElement("meta",{property:"og:title",content:b}),n&&r.a.createElement("link",{rel:"shortcut icon",href:w}),f&&r.a.createElement("meta",{name:"description",content:f}),f&&r.a.createElement("meta",{property:"og:description",content:f}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),E&&r.a.createElement("meta",{property:"og:image",content:y}),E&&r.a.createElement("meta",{property:"twitter:image",content:y}),E&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+b}),k&&r.a.createElement("meta",{property:"og:url",content:k}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),k&&r.a.createElement("link",{rel:"canonical",href:k})),r.a.createElement(o.a,null),r.a.createElement(D,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(Q,null)))}},442:function(e,t,a){"use strict";var n=a(9),r=a(0),o=a.n(r),c=a(415),i=a.n(c),l=a(428),s=(a(139),a(140)),m=a.n(s);t.a=function(e){return function(t){var a,r=t.id,c=Object(n.a)(t,["id"]),s=Object(l.a)().siteConfig,u=(s=void 0===s?{}:s).themeConfig,d=(u=void 0===u?{}:u).navbar,f=(d=void 0===d?{}:d).hideOnScroll,h=void 0!==f&&f;return r?o.a.createElement(e,c,o.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:i()("anchor",(a={},a[m.a.enhancedAnchor]=!h,a)),id:r}),o.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),c.children):o.a.createElement(e,c)}}},446:function(e,t,a){"use strict";var n=a(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},471:function(e,t){var a,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function i(e){if(a===setTimeout)return setTimeout(e,0);if((a===o||!a)&&setTimeout)return a=setTimeout,setTimeout(e,0);try{return a(e,0)}catch(t){try{return a.call(null,e,0)}catch(t){return a.call(this,e,0)}}}!function(){try{a="function"==typeof setTimeout?setTimeout:o}catch(e){a=o}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var l,s=[],m=!1,u=-1;function d(){m&&l&&(m=!1,l.length?s=l.concat(s):u=-1,s.length&&f())}function f(){if(!m){var e=i(d);m=!0;for(var t=s.length;t;){for(l=s,s=[];++u1)for(var a=1;a=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())}).call(this,a(471))},548:function(e,t,a){var n;function r(e){function a(){if(a.enabled){var e=a,r=+new Date,o=r-(n||r);e.diff=o,e.prev=n,e.curr=r,n=r;for(var c=new Array(arguments.length),i=0;i0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var c=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*c;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(e);if("number"===l&&!1===isNaN(e))return t.long?c(i=e,o,"day")||c(i,r,"hour")||c(i,n,"minute")||c(i,a,"second")||i+" ms":function(e){if(e>=o)return Math.round(e/o)+"d";if(e>=r)return Math.round(e/r)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=a)return Math.round(e/a)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},550:function(e,t,a){"use strict";var n=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!n.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some((function(e){return e.length>63}))}},554:function(e,t,a){"use strict";a(438),a(439);var n=a(0),r=a.n(n),o=a(415),c=a.n(o),i=(a(58),a(21),a(546)),l=a.n(i),s=a(550),m=function(e){return new Promise((function(t,a){return l()(e,{param:"c",timeout:3500},(function(e,n){e&&a(e),n&&t(n)}))}))},u=function(e){var t="";for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var n="group["===a.substring(0,6)?a:a.toUpperCase();t=t.concat("&"+n+"="+e[a])}return t},d=function(e,t,a){var n=Object(s.validate)(e),r=encodeURIComponent(e);if(!n)return Promise.resolve({result:"error",msg:"The email you entered is not valid."});var o="https://qovery.us4.list-manage.com/subscribe/post-json?u=3c76e7a2087d5bc4020348c46&id=63bd993879";arguments.length<3&&"string"==typeof t?o=t:"string"==typeof a&&(o=a);var c="&EMAIL="+r+u(t),i=""+o+c;return m(i)};a(152),t.a=function(e){var t,a=e.block,o=e.buttonClass,i=e.center,l=e.description,s=e.subscriptionEnabled,m=e.size,u=e.width,f=Object(n.useState)(""),h=f[0],p=f[1],g=Object(n.useState)(!1),v=g[0],b=g[1],E=Object(n.useState)(!1),y=E[0],w=E[1],N=Object(n.useState)("Could not subscribe :("),k=N[0],_=N[1];return r.a.createElement("div",{className:c()("mailing-list",(t={"mailing-list--block":a,"mailing-list--center":i},t["mailing-list--"+m]=m,t))},!1!==l&&r.a.createElement("div",{className:"mailing-list--description"},l),s&&!v&&r.a.createElement("form",{onSubmit:function(e){return function(e){e.preventDefault(),d(h).then((function(e){"success"===e.result?(b(!0),y&&w(!1)):(w(!0),e.msg.includes(h+" is already subscribed")?_("This email is already subscribed to the newsletter"):_("Could not subscribe :("))})).catch((function(e){w(!0)}))}(e)},className:c()("mailing-list--form")},r.a.createElement("input",{onChange:function(e){return p(e.target.value)},className:c()("input","input--"+m),name:"email",placeholder:"you@email.com",type:"email",style:{width:u}}),r.a.createElement("button",{className:c()("button","button--"+(o||"primary"),"button--"+m),type:"submit"},"Subscribe")),y&&r.a.createElement("span",{className:"badge badge--secondary"},k),r.a.createElement("div",{style:{textAlign:"center"}},s&&v&&r.a.createElement("span",{className:"badge badge--primary"},"Subscribed!")))}}}]); \ No newline at end of file diff --git a/672ba3d6.2a355337.js.LICENSE.txt b/672ba3d6.032df364.js.LICENSE.txt similarity index 100% rename from 672ba3d6.2a355337.js.LICENSE.txt rename to 672ba3d6.032df364.js.LICENSE.txt diff --git a/672ba3d6.2a355337.js b/672ba3d6.2a355337.js deleted file mode 100644 index 663627033a..0000000000 --- a/672ba3d6.2a355337.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 672ba3d6.2a355337.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{264:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),o=a(442),c=a(437),i=a(554),l=a(428),s=Object(o.a)("h2");t.default=function(){var e=Object(l.a)().siteConfig;return(void 0===e?{}:e).customFields.metadata.team,r.a.createElement(c.a,{title:"Community",description:"Join the Qovery community. Connect with the core Qovery team and other Qovery users."},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Qovery Community"),r.a.createElement(i.a,{buttonClass:"highlight",center:!0,size:"lg"}))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement(s,{id:"connect"},"Connect"),r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Discord"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discord"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://community.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-globe"})),r.a.createElement("div",{className:"panel--title"},"Forum"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discourse"))))),r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://twitter.com/Qovery_",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-twitter",title:"Twitter"})),r.a.createElement("div",{className:"panel--title"},"@Qovery"),r.a.createElement("div",{className:"panel--description"},"Follow us in real-time"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-github"})),r.a.createElement("div",{className:"panel--title"},"Github qovery"),r.a.createElement("div",{className:"panel--description"},"Issues, code, and development"))))))))}},415:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:f,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),l.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(q,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:M.a.footerLogoLink},r.a.createElement(z,{alt:m.alt,url:d})):r.a.createElement(z,{alt:m.alt,url:d})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},F=a(454),J=a(455),Z=a(3);a(138);t.a=function(e){var t=Object(h.a)().siteConfig,a=void 0===t?{}:t,n=a.favicon,i=(a.tagline,a.title),l=a.themeConfig.image,s=a.url,m=e.children,u=e.title,d=e.noFooter,f=e.description,p=e.image,g=e.keywords,v=(e.permalink,e.version),b=u?u+" | "+i:i,E=p||l,y=s+Object(_.a)(E),w=Object(_.a)(n),N=Object(Z.h)(),k=N?"https://docs.qovery.com"+(N.pathname.endsWith("/")?N.pathname:N.pathname+"/"):null;return r.a.createElement(J.a,null,r.a.createElement(F.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),b&&r.a.createElement("title",null,b),b&&r.a.createElement("meta",{property:"og:title",content:b}),n&&r.a.createElement("link",{rel:"shortcut icon",href:w}),f&&r.a.createElement("meta",{name:"description",content:f}),f&&r.a.createElement("meta",{property:"og:description",content:f}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),E&&r.a.createElement("meta",{property:"og:image",content:y}),E&&r.a.createElement("meta",{property:"twitter:image",content:y}),E&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+b}),k&&r.a.createElement("meta",{property:"og:url",content:k}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),k&&r.a.createElement("link",{rel:"canonical",href:k})),r.a.createElement(o.a,null),r.a.createElement(D,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(Q,null)))}},442:function(e,t,a){"use strict";var n=a(9),r=a(0),o=a.n(r),c=a(415),i=a.n(c),l=a(428),s=(a(139),a(140)),m=a.n(s);t.a=function(e){return function(t){var a,r=t.id,c=Object(n.a)(t,["id"]),s=Object(l.a)().siteConfig,u=(s=void 0===s?{}:s).themeConfig,d=(u=void 0===u?{}:u).navbar,f=(d=void 0===d?{}:d).hideOnScroll,h=void 0!==f&&f;return r?o.a.createElement(e,c,o.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:i()("anchor",(a={},a[m.a.enhancedAnchor]=!h,a)),id:r}),o.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),c.children):o.a.createElement(e,c)}}},446:function(e,t,a){"use strict";var n=a(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},471:function(e,t){var a,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function i(e){if(a===setTimeout)return setTimeout(e,0);if((a===o||!a)&&setTimeout)return a=setTimeout,setTimeout(e,0);try{return a(e,0)}catch(t){try{return a.call(null,e,0)}catch(t){return a.call(this,e,0)}}}!function(){try{a="function"==typeof setTimeout?setTimeout:o}catch(e){a=o}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var l,s=[],m=!1,u=-1;function d(){m&&l&&(m=!1,l.length?s=l.concat(s):u=-1,s.length&&f())}function f(){if(!m){var e=i(d);m=!0;for(var t=s.length;t;){for(l=s,s=[];++u1)for(var a=1;a=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())}).call(this,a(471))},548:function(e,t,a){var n;function r(e){function a(){if(a.enabled){var e=a,r=+new Date,o=r-(n||r);e.diff=o,e.prev=n,e.curr=r,n=r;for(var c=new Array(arguments.length),i=0;i0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var c=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*c;case"days":case"day":case"d":return c*o;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(e);if("number"===l&&!1===isNaN(e))return t.long?c(i=e,o,"day")||c(i,r,"hour")||c(i,n,"minute")||c(i,a,"second")||i+" ms":function(e){if(e>=o)return Math.round(e/o)+"d";if(e>=r)return Math.round(e/r)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=a)return Math.round(e/a)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},550:function(e,t,a){"use strict";var n=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!n.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some((function(e){return e.length>63}))}},554:function(e,t,a){"use strict";a(438),a(439);var n=a(0),r=a.n(n),o=a(415),c=a.n(o),i=(a(58),a(21),a(546)),l=a.n(i),s=a(550),m=function(e){return new Promise((function(t,a){return l()(e,{param:"c",timeout:3500},(function(e,n){e&&a(e),n&&t(n)}))}))},u=function(e){var t="";for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var n="group["===a.substring(0,6)?a:a.toUpperCase();t=t.concat("&"+n+"="+e[a])}return t},d=function(e,t,a){var n=Object(s.validate)(e),r=encodeURIComponent(e);if(!n)return Promise.resolve({result:"error",msg:"The email you entered is not valid."});var o="https://qovery.us4.list-manage.com/subscribe/post-json?u=3c76e7a2087d5bc4020348c46&id=63bd993879";arguments.length<3&&"string"==typeof t?o=t:"string"==typeof a&&(o=a);var c="&EMAIL="+r+u(t),i=""+o+c;return m(i)};a(152),t.a=function(e){var t,a=e.block,o=e.buttonClass,i=e.center,l=e.description,s=e.subscriptionEnabled,m=e.size,u=e.width,f=Object(n.useState)(""),h=f[0],p=f[1],g=Object(n.useState)(!1),v=g[0],b=g[1],E=Object(n.useState)(!1),y=E[0],w=E[1],N=Object(n.useState)("Could not subscribe :("),k=N[0],_=N[1];return r.a.createElement("div",{className:c()("mailing-list",(t={"mailing-list--block":a,"mailing-list--center":i},t["mailing-list--"+m]=m,t))},!1!==l&&r.a.createElement("div",{className:"mailing-list--description"},l),s&&!v&&r.a.createElement("form",{onSubmit:function(e){return function(e){e.preventDefault(),d(h).then((function(e){"success"===e.result?(b(!0),y&&w(!1)):(w(!0),e.msg.includes(h+" is already subscribed")?_("This email is already subscribed to the newsletter"):_("Could not subscribe :("))})).catch((function(e){w(!0)}))}(e)},className:c()("mailing-list--form")},r.a.createElement("input",{onChange:function(e){return p(e.target.value)},className:c()("input","input--"+m),name:"email",placeholder:"you@email.com",type:"email",style:{width:u}}),r.a.createElement("button",{className:c()("button","button--"+(o||"primary"),"button--"+m),type:"submit"},"Subscribe")),y&&r.a.createElement("span",{className:"badge badge--secondary"},k),r.a.createElement("div",{style:{textAlign:"center"}},s&&v&&r.a.createElement("span",{className:"badge badge--primary"},"Subscribed!")))}}}]); \ No newline at end of file diff --git a/68b95634.be29edd4.js b/68b95634.be29edd4.js new file mode 100644 index 0000000000..2d03aa6b90 --- /dev/null +++ b/68b95634.be29edd4.js @@ -0,0 +1,2 @@ +/*! For license information please see 68b95634.be29edd4.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{265:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return i})),r.d(t,"metadata",(function(){return c})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return u}));var n=r(1),a=r(9),o=(r(0),r(417)),i=(r(432),r(426),r(421),r(416),r(545),{last_modified_on:"2023-11-24",title:"What is Qovery?",description:"High-level description of the Qovery goals and mission."}),c={id:"getting-started/what-is-qovery",title:"What is Qovery?",description:"High-level description of the Qovery goals and mission.",source:"@site/docs/getting-started/what-is-qovery.md",permalink:"/docs/getting-started/what-is-qovery",sidebar:"docs",previous:{title:"Getting started",permalink:"/docs/getting-started"},next:{title:"How Qovery Works",permalink:"/docs/getting-started/how-qovery-works"}},l=[{value:"Qovery For Platform Engineers",id:"qovery-for-platform-engineers",children:[{value:"How Qovery Works",id:"how-qovery-works",children:[]},{value:"Notable features for Platform Engineers",id:"notable-features-for-platform-engineers",children:[]}]},{value:"Qovery For Developers / Engineering Teams",id:"qovery-for-developers--engineering-teams",children:[{value:"Notable features for Developers",id:"notable-features-for-developers",children:[]}]},{value:"Integrates Qovery in your technical stack",id:"integrates-qovery-in-your-technical-stack",children:[]}],s={rightToc:l};function u(e){var t=e.components,r=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(n.a)({},s,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"Qovery is the ",Object(o.b)("strong",{parentName:"p"},"Internal Developer Platform (IDP)")," that cuts noise for developers with paved paths to production. Testing, ephemeral environments, and drive action to improve software."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/developers-and-platform-engineer-with-qovery.jpg",alt:"Developers and a Platform Engineer using Qovery as an IDP"})),Object(o.b)("h2",{id:"qovery-for-platform-engineers"},"Qovery For Platform Engineers"),Object(o.b)("p",null,"By using Qovery, Platform Engineering teams can provide an outstanding platform to their developers in less than a hour. Then Platform Engineering teams can tailor the experience of Qovery and even build on top of it to fit their own golden path. They keep the control and can audit what developers do."),Object(o.b)("h3",{id:"how-qovery-works"},"How Qovery Works"),Object(o.b)("p",null,"Qovery runs on top of Kubernetes and provide a convenient layer with a set of features to build a platform that your developers love."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/how-qovery-works-2.jpg",alt:"Qovery - How it Works"})),Object(o.b)("h3",{id:"notable-features-for-platform-engineers"},"Notable features for Platform Engineers"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Templates"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/members-rbac/"}),"RBAC")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/audit-logs/"}),"Audit Logs")),Object(o.b)("li",{parentName:"ul"},"Cost Management"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/integration/continuous-integration/"}),"Integrates in your CI/CD")),Object(o.b)("li",{parentName:"ul"},"Bring Your Own Kubernetes"),Object(o.b)("li",{parentName:"ul"},"GitOps Support"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/interface/"}),"Open-Source Interfaces")," (perfect to build on top)",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/interface/web-interface/"}),"Web Console")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/interface/cli/"}),"CLI")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/interface/terraform-interface/"}),"Terraform Provider")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(n.a)({parentName:"li"},{href:"/docs/using-qovery/interface/rest-api/"}),"Public API"))))),Object(o.b)("h2",{id:"qovery-for-developers--engineering-teams"},"Qovery For Developers / Engineering Teams"),Object(o.b)("p",null,"By using Qovery, developers are autonomous in deploying their applications, debugging, and scaling. They don't need any infrastructure knowledge. They can connect their git repository, pushing and deploying their apps."),Object(o.b)("p",null,"Qovery focus on providing an outstanding Developer Experience and never assume that developers know how underlying infrastructure work."),Object(o.b)("h3",{id:"notable-features-for-developers"},"Notable features for Developers"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Self-Service Platform"),Object(o.b)("li",{parentName:"ul"},"Git Push And Deploy"),Object(o.b)("li",{parentName:"ul"},"Live Application Logs"),Object(o.b)("li",{parentName:"ul"},"Easy Variables Management"),Object(o.b)("li",{parentName:"ul"},"Easy Domain Management"),Object(o.b)("li",{parentName:"ul"},"No Infra Knowledge Needed"),Object(o.b)("li",{parentName:"ul"},"Ephemeral Environments")),Object(o.b)("h2",{id:"integrates-qovery-in-your-technical-stack"},"Integrates Qovery in your technical stack"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"Qovery is battery included! Get a State-of-the-Art Internal Developer Platform in 30 minutes."),Object(o.b)("li",{parentName:"ol"},"Qovery integrates perfectly well into an existing ecosystem.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/qovery-internal-developer-platform.jpg",alt:"Qovery - Internal Developer Platform landscape"})))}u.isMDXComponent=!0},415:function(e,t,r){var n;!function(){"use strict";var r={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=a.a.createContext({}),u=function(e){var t=a.a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c({},t,{},e)),r},p=function(e){var t=u(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},b=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),p=u(r),b=n,d=p["".concat(i,".").concat(b)]||p[b]||f[b]||o;return r?a.a.createElement(d,c({ref:t},s,{components:r})):a.a.createElement(d,c({ref:t},s))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=b;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:n,i[1]=c;for(var s=2;s1?arguments[1]:void 0,r),l=i>2?arguments[2]:void 0,s=void 0===l?r:a(l,r);s>c;)t[c++]=e;return t}},420:function(e,t,r){var n=r(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||r(10)&&n(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},421:function(e,t,r){"use strict";r(420);var n=r(0),a=r.n(n),o=r(416);t.a=function(e){var t=e.children,r=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",r||"page"," assumes the following:"),t)}},423:function(e,t,r){"use strict";var n=r(427),a=r(51);function o(e,t){return t.encode?t.strict?n(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var r=function(e){var t;switch(e.arrayFormat){case"index":return function(e,r,n){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===n[e]&&(n[e]={}),n[e][t[1]]=r):n[e]=r};case"bracket":return function(e,r,n){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==n[e]?n[e]=[].concat(n[e],r):n[e]=[r]:n[e]=r};default:return function(e,t,r){void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=t}}}(t=a({arrayFormat:"none"},t)),n=Object.create(null);return"string"!=typeof e?n:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),r(decodeURIComponent(a),o,n)})),Object.keys(n).sort().reduce((function(e,t){var r=n[t];return Boolean(r)&&"object"==typeof r&&!Array.isArray(r)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(r):e[t]=r,e}),Object.create(null))):n},t.stringify=function(e,t){var r=function(e){switch(e.arrayFormat){case"index":return function(t,r,n){return null===r?[o(t,e),"[",n,"]"].join(""):[o(t,e),"[",o(n,e),"]=",o(r,e)].join("")};case"bracket":return function(t,r){return null===r?o(t,e):[o(t,e),"[]=",o(r,e)].join("")};default:return function(t,r){return null===r?o(t,e):[o(t,e),"=",o(r,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(n){var a=e[n];if(void 0===a)return"";if(null===a)return o(n,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(r(n,e,i.length))})),i.join("&")}return o(n,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},426:function(e,t,r){"use strict";var n=r(0),a=r.n(n),o=(r(415),r(423)),i=r.n(o);r(134);t.a=function(e){var t=e.children,r=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),u=Object(n.useState)(null),p=u[0],f=u[1];return a.a.createElement("div",{className:"steps steps--h"+r},t,!o&&!p&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return f("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},427:function(e,t,r){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}},545:function(e,t,r){"use strict";r(0)}}]); \ No newline at end of file diff --git a/68b95634.daae4631.js.LICENSE.txt b/68b95634.be29edd4.js.LICENSE.txt similarity index 100% rename from 68b95634.daae4631.js.LICENSE.txt rename to 68b95634.be29edd4.js.LICENSE.txt diff --git a/68b95634.daae4631.js b/68b95634.daae4631.js deleted file mode 100644 index bec09deff7..0000000000 --- a/68b95634.daae4631.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 68b95634.daae4631.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{265:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return i})),r.d(t,"metadata",(function(){return s})),r.d(t,"rightToc",(function(){return c})),r.d(t,"default",(function(){return l}));var n=r(1),o=r(9),a=(r(0),r(417)),i=(r(432),r(426),r(421),r(416),r(545),{last_modified_on:"2023-08-30",title:"What is Qovery?",description:"High-level description of the Qovery goals and mission."}),s={id:"getting-started/what-is-qovery",title:"What is Qovery?",description:"High-level description of the Qovery goals and mission.",source:"@site/docs/getting-started/what-is-qovery.md",permalink:"/docs/getting-started/what-is-qovery",sidebar:"docs",previous:{title:"Getting started",permalink:"/docs/getting-started"},next:{title:"How Qovery Works",permalink:"/docs/getting-started/how-qovery-works"}},c=[{value:"Qovery For DevOps",id:"qovery-for-devops",children:[]},{value:"Qovery For Developers",id:"qovery-for-developers",children:[]}],u={rightToc:c};function l(e){var t=e.components,r=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(n.a)({},u,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Qovery is a modern infrastructure automation platform")," that simplifies the process of managing cloud infrastructure for DevOps, Platform and Engineering teams. It provides a set of tools and features that automate the provisioning, configuration, and management of infrastructure resources."),Object(a.b)("h2",{id:"qovery-for-devops"},"Qovery For DevOps"),Object(a.b)("p",null,"Qovery is helpful for DevOps teams as it allows them to automate the provisioning, configuration, and management of infrastructure resources. This can help to streamline the process of creating and destroying environments on demand and reduce the time and effort required to set up and manage environments. Additionally, Qovery provides features such as resource consumption optimization, which can help to reduce cloud costs and optimize infrastructure costs. This can help to free up resources and focus on delivering value to the business. Qovery also helps DevOps teams to maintain a high level of control, security and governance by providing a way to define, manage and monitor their infrastructure as code, thus reducing human error and ensuring compliance with best practices and security standards."),Object(a.b)("h2",{id:"qovery-for-developers"},"Qovery For Developers"),Object(a.b)("p",null,"For developers, Qovery is helpful as it allows them to easily spin up services with minimal effort. This allows developers to focus on writing code and delivering features, rather than worrying about infrastructure management. Additionally, Qovery provides a way to manage multiple environments and configurations, which can help to ensure that the development, staging, and production environments are consistent and up-to-date. This can help to reduce the risk of errors and inconsistencies and ensure that the application is always ready for deployment. Developers can also be assured that their environments are secure and compliant with best practices and security standards, thanks to the control and governance features provided by Qovery."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/how-qovery-works.svg",alt:"How Qovery Works"})))}l.isMDXComponent=!0},415:function(e,t,r){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=o.a.createContext({}),l=function(e){var t=o.a.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):s({},t,{},e)),r},f=function(e){var t=l(e.components);return o.a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,i=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),f=l(r),d=n,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return r?o.a.createElement(m,s({ref:t},u,{components:r})):o.a.createElement(m,s({ref:t},u))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:n,i[1]=s;for(var u=2;u1?arguments[1]:void 0,r),c=i>2?arguments[2]:void 0,u=void 0===c?r:o(c,r);u>s;)t[s++]=e;return t}},420:function(e,t,r){var n=r(28).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||r(10)&&n(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},421:function(e,t,r){"use strict";r(420);var n=r(0),o=r.n(n),a=r(416);t.a=function(e){var t=e.children,r=e.name;return o.a.createElement(a.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",r||"page"," assumes the following:"),t)}},423:function(e,t,r){"use strict";var n=r(427),o=r(51);function a(e,t){return t.encode?t.strict?n(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var r=function(e){var t;switch(e.arrayFormat){case"index":return function(e,r,n){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===n[e]&&(n[e]={}),n[e][t[1]]=r):n[e]=r};case"bracket":return function(e,r,n){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==n[e]?n[e]=[].concat(n[e],r):n[e]=[r]:n[e]=r};default:return function(e,t,r){void 0!==r[e]?r[e]=[].concat(r[e],t):r[e]=t}}}(t=o({arrayFormat:"none"},t)),n=Object.create(null);return"string"!=typeof e?n:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),o=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),r(decodeURIComponent(o),a,n)})),Object.keys(n).sort().reduce((function(e,t){var r=n[t];return Boolean(r)&&"object"==typeof r&&!Array.isArray(r)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(r):e[t]=r,e}),Object.create(null))):n},t.stringify=function(e,t){var r=function(e){switch(e.arrayFormat){case"index":return function(t,r,n){return null===r?[a(t,e),"[",n,"]"].join(""):[a(t,e),"[",a(n,e),"]=",a(r,e)].join("")};case"bracket":return function(t,r){return null===r?a(t,e):[a(t,e),"[]=",a(r,e)].join("")};default:return function(t,r){return null===r?a(t,e):[a(t,e),"=",a(r,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(n){var o=e[n];if(void 0===o)return"";if(null===o)return a(n,t);if(Array.isArray(o)){var i=[];return o.slice().forEach((function(e){void 0!==e&&i.push(r(n,e,i.length))})),i.join("&")}return a(n,t)+"="+a(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},426:function(e,t,r){"use strict";var n=r(0),o=r.n(n),a=(r(415),r(423)),i=r.n(a);r(134);t.a=function(e){var t=e.children,r=e.headingDepth,a=e.hideFeedbackQuestion,s="undefined"!=typeof window?window.location:null,c={title:"Tutorial on "+s+" failed",body:"The tutorial on:\n\n"+s+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},u="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(c),l=Object(n.useState)(null),f=l[0],p=l[1];return o.a.createElement("div",{className:"steps steps--h"+r},t,!a&&!f&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==f&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},427:function(e,t,r){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}},545:function(e,t,r){"use strict";r(0)}}]); \ No newline at end of file diff --git a/83e9e333.3eebf622.js b/83e9e333.240cd8fc.js similarity index 59% rename from 83e9e333.3eebf622.js rename to 83e9e333.240cd8fc.js index 15ef6d3ccf..e112558ae3 100644 --- a/83e9e333.3eebf622.js +++ b/83e9e333.240cd8fc.js @@ -1,2 +1,2 @@ -/*! For license information please see 83e9e333.3eebf622.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{279:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(437),c=(t(280),t(428));a.default=function(){var e=Object(c.a)().siteConfig;return(void 0===e?{}:e).customFields.metadata.team,r.a.createElement(l.a,{title:"Contact",description:"Contact the Qovery and Timber.io team"},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Contact"),r.a.createElement("div",{className:"hero--subtitle"},"Qovery is a ",r.a.createElement("a",{href:"https://timber.io"},"Timber.io")," open-source product. You can contact the Qovery & Timber team using any of the options below."))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"mailto:hi@timber.io",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-mail"})),r.a.createElement("div",{className:"panel--title"},"hi@timber.io"),r.a.createElement("div",{className:"panel--description"},"Shoot us an email"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://twitter.com/qoverydotdev",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-twitter"})),r.a.createElement("div",{className:"panel--title"},"@qoverydotdev"),r.a.createElement("div",{className:"panel--description"},"Tweet at us"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Chat"),r.a.createElement("div",{className:"panel--description"},"Join our chat"))))))))}},415:function(e,a,t){var n;!function(){"use strict";var t={}.hasOwnProperty;function r(){for(var e=[],a=0;a0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(d.a,{className:"navbar__logo",src:b,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),o.map((function(e,a){return r.a.createElement("div",{key:a,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,a){return e.html?r.a.createElement("li",{key:a,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(Q,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:q.a.footerLogoLink},r.a.createElement(A,{alt:m.alt,url:u})):r.a.createElement(A,{alt:m.alt,url:u})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},H=t(454),V=t(455),B=t(3);t(138);a.a=function(e){var a=Object(h.a)().siteConfig,t=void 0===a?{}:a,n=t.favicon,i=(t.tagline,t.title),o=t.themeConfig.image,s=t.url,m=e.children,d=e.title,u=e.noFooter,b=e.description,v=e.image,g=e.keywords,E=(e.permalink,e.version),f=d?d+" | "+i:i,p=v||o,N=s+Object(y.a)(p),_=Object(y.a)(n),k=Object(B.h)(),w=k?"https://docs.qovery.com"+(k.pathname.endsWith("/")?k.pathname:k.pathname+"/"):null;return r.a.createElement(V.a,null,r.a.createElement(H.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),f&&r.a.createElement("title",null,f),f&&r.a.createElement("meta",{property:"og:title",content:f}),n&&r.a.createElement("link",{rel:"shortcut icon",href:_}),b&&r.a.createElement("meta",{name:"description",content:b}),b&&r.a.createElement("meta",{property:"og:description",content:b}),E&&r.a.createElement("meta",{name:"docsearch:version",content:E}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),p&&r.a.createElement("meta",{property:"og:image",content:N}),p&&r.a.createElement("meta",{property:"twitter:image",content:N}),p&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+f}),w&&r.a.createElement("meta",{property:"og:url",content:w}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&r.a.createElement("link",{rel:"canonical",href:w})),r.a.createElement(l.a,null),r.a.createElement(I,null),r.a.createElement("div",{className:"main-wrapper"},m),!u&&r.a.createElement(F,null)))}},446:function(e,a,t){"use strict";var n=t(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});a.a=r}}]); \ No newline at end of file +/*! For license information please see 83e9e333.240cd8fc.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{279:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(437),c=(t(280),t(428));a.default=function(){var e=Object(c.a)().siteConfig;return(void 0===e?{}:e).customFields.metadata.team,r.a.createElement(l.a,{title:"Contact",description:"Contact the Qovery and Timber.io team"},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Contact"),r.a.createElement("div",{className:"hero--subtitle"},"Qovery is a ",r.a.createElement("a",{href:"https://timber.io"},"Timber.io")," open-source product. You can contact the Qovery & Timber team using any of the options below."))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"mailto:hi@timber.io",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-mail"})),r.a.createElement("div",{className:"panel--title"},"hi@timber.io"),r.a.createElement("div",{className:"panel--description"},"Shoot us an email"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://twitter.com/qoverydotdev",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-twitter"})),r.a.createElement("div",{className:"panel--title"},"@qoverydotdev"),r.a.createElement("div",{className:"panel--description"},"Tweet at us"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Chat"),r.a.createElement("div",{className:"panel--description"},"Join our chat"))))))))}},415:function(e,a,t){var n;!function(){"use strict";var t={}.hasOwnProperty;function r(){for(var e=[],a=0;a0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(d.a,{className:"navbar__logo",src:b,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),o.map((function(e,a){return r.a.createElement("div",{key:a,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,a){return e.html?r.a.createElement("li",{key:a,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(Q,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:q.a.footerLogoLink},r.a.createElement(A,{alt:m.alt,url:u})):r.a.createElement(A,{alt:m.alt,url:u})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},H=t(454),P=t(455),V=t(3);t(138);a.a=function(e){var a=Object(v.a)().siteConfig,t=void 0===a?{}:a,n=t.favicon,i=(t.tagline,t.title),o=t.themeConfig.image,s=t.url,m=e.children,d=e.title,u=e.noFooter,b=e.description,h=e.image,g=e.keywords,E=(e.permalink,e.version),f=d?d+" | "+i:i,p=h||o,N=s+Object(y.a)(p),_=Object(y.a)(n),k=Object(V.h)(),w=k?"https://docs.qovery.com"+(k.pathname.endsWith("/")?k.pathname:k.pathname+"/"):null;return r.a.createElement(P.a,null,r.a.createElement(H.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),f&&r.a.createElement("title",null,f),f&&r.a.createElement("meta",{property:"og:title",content:f}),n&&r.a.createElement("link",{rel:"shortcut icon",href:_}),b&&r.a.createElement("meta",{name:"description",content:b}),b&&r.a.createElement("meta",{property:"og:description",content:b}),E&&r.a.createElement("meta",{name:"docsearch:version",content:E}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),p&&r.a.createElement("meta",{property:"og:image",content:N}),p&&r.a.createElement("meta",{property:"twitter:image",content:N}),p&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+f}),w&&r.a.createElement("meta",{property:"og:url",content:w}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&r.a.createElement("link",{rel:"canonical",href:w})),r.a.createElement(l.a,null),r.a.createElement(I,null),r.a.createElement("div",{className:"main-wrapper"},m),!u&&r.a.createElement(F,null)))}},446:function(e,a,t){"use strict";var n=t(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});a.a=r}}]); \ No newline at end of file diff --git a/83e9e333.3eebf622.js.LICENSE.txt b/83e9e333.240cd8fc.js.LICENSE.txt similarity index 100% rename from 83e9e333.3eebf622.js.LICENSE.txt rename to 83e9e333.240cd8fc.js.LICENSE.txt diff --git a/b2880863.3014c91d.js b/b2880863.74c3d2c5.js similarity index 99% rename from b2880863.3014c91d.js rename to b2880863.74c3d2c5.js index 59d37d7e88..9c5474fbc2 100644 --- a/b2880863.3014c91d.js +++ b/b2880863.74c3d2c5.js @@ -1,2 +1,2 @@ -/*! For license information please see b2880863.3014c91d.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{320:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return b})),n.d(t,"rightToc",(function(){return o})),n.d(t,"default",(function(){return u}));var a=n(1),r=n(9),l=(n(0),n(417)),c=n(416),i=(n(424),n(421),{last_modified_on:"2023-11-03",title:"Members and RBAC",description:"Learn how to manage the RBAC via Qovery"}),b={id:"using-qovery/configuration/organization/members-rbac",title:"Members and RBAC",description:"Learn how to manage the RBAC via Qovery",source:"@site/docs/using-qovery/configuration/organization/members-rbac.md",permalink:"/docs/using-qovery/configuration/organization/members-rbac",sidebar:"docs",previous:{title:"Organization",permalink:"/docs/using-qovery/configuration/organization"},next:{title:"Git Repository access",permalink:"/docs/using-qovery/configuration/organization/git-repository-access"}},o=[{value:"Organization members",id:"organization-members",children:[]},{value:"Roles-Based access control (RBAC)",id:"roles-based-access-control-rbac",children:[{value:"Custom roles",id:"custom-roles",children:[]}]},{value:"Cluster Level Permissions",id:"cluster-level-permissions",children:[{value:"Examples",id:"examples",children:[]},{value:"Example 2, advanced setup",id:"example-2-advanced-setup",children:[]}]}],s={rightToc:o};function u(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(l.b)("wrapper",Object(a.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(l.b)("p",null,"You can manage from the organization settings the members capable to access your organization and as well their permission via an RBAC system."),Object(l.b)("p",null,"You can access the organization settings using the ",Object(l.b)("inlineCode",{parentName:"p"},"Wheel")," button on the left nav bar"),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/access_settings.png",alt:"How to access your organization settings"})),Object(l.b)("h2",{id:"organization-members"},"Organization members"),Object(l.b)("p",null,"This section allows you to manage the members of your organization (add / remove) and as well assign a role to each of them."),Object(l.b)("p",null,"You can invite someone to join your organization by email. Then he will get access to your projects and will be able to contribute."),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/members.png",alt:"Qovery - List all members within an organization"})),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Changing the role of a member requires the user to logout/login to make the changes effective or wait a few minutes (max 1 hour)")),Object(l.b)("h2",{id:"roles-based-access-control-rbac"},"Roles-Based access control (RBAC)"),Object(l.b)("p",null,"Qovery allows you to control the access to your cluster and environment resources by defining and assigning roles to your users."),Object(l.b)("p",null,"By default, five roles are created within your organization (Basic Roles):"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"Owner: the user has full access on the organization"),Object(l.b)("li",{parentName:"ul"},"Admin: same as the owner, the has full access to the organization but he cannot delete it"),Object(l.b)("li",{parentName:"ul"},"DevOps: the user can manage the organization infrastructure (clusters/registry/webhook setup) and manage the deployments of any environment within the organization."),Object(l.b)("li",{parentName:"ul"},"Billing Manager: the user can only manage the billing of the organization"),Object(l.b)("li",{parentName:"ul"},"Viewer: the user has read-only access to any section of the organization")),Object(l.b)("p",null,"More in detail, you can find the associated permissions below:"),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Owner"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Admin"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"DevOps"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Billing Manager"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Viewer"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Delete organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage billing"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage members & roles"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage cluster & container registry"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage organization setup (webhooks, Git and API tokens etc..)"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read ANY project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit/Delete ANY project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read ANY environment"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit/Delete ANY environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Add/Edit/Delete environment variables and secrets"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Deploy/Stop ANY environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Connect via shell to ANY application"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")))),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Only one user can be Owner of an organization. You can transfer the ownership to another member via the menu available on the target member")),Object(l.b)("h3",{id:"custom-roles"},"Custom roles"),Object(l.b)("p",null,"If the basic roles are not enough given your internal organization, Qovery allows you to customize the accesses to your clusters, projets and environments by defining ",Object(l.b)("inlineCode",{parentName:"p"},"Custom Roles"),"."),Object(l.b)("p",null,"A ",Object(l.b)("inlineCode",{parentName:"p"},"Custom role")," allows you to customize:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions: you can specify the access to the existing computing resources (manage cluster X, create environments on cluster Y, read-only access on cluster K)"),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions: you can specify the access to the projects and their environments by environment type (deploy type X, create type K etc..)")),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Users with a custom role cannot create clusters or manage any of the organization settings (members, webhook, API token etc..)")),Object(l.b)("p",null,'To create a custom role, go in the Roles & Permissions section press "Add new Role"'),Object(l.b)("p",null,"For the new role, you will be able to specify:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"The name of the role"),Object(l.b)("li",{parentName:"ul"},"A description"),Object(l.b)("li",{parentName:"ul"},"Cluster Level permissions"),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions")),Object(l.b)("h2",{id:"cluster-level-permissions"},"Cluster Level Permissions"),Object(l.b)("p",null,"This section allows you to fine tune the access to the computing resources. For each cluster of your organization, you will be able to specify an access permission (ordered by permission level):"),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Name"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Permission Type"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read-Only"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user can access the cluster information (name, region etc..). Minimum permission level.")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create Environment"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),'The user can create environments on this cluster. Only users with this role could allocate resources for their environments on this cluster. Further environment level permissions (like deployment rights) are managed via the "Project Permissions", see below')),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Full Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user can create create environments on this cluster and as well manage the cluster's settings (start/stop, change number and type of nodes etc..). This permission allows a group of users to manage by themselves a specific cluster")))),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},'Project Level Permissions\nThis section allows you to fine tune the access to the projects and their environments. The environment access is managed by "Environment Type" to simplify the configuration (Production, Staging, Development, Preview). For each project of your organization and by environment type, you will be able to specify an access permission (ordered by permission level):')),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Name"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Permission Type"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"No Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),'The user has no access to this environment type. If the user has "No Access" on all the environment types, he will not have access to the project')),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read-Only"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Access in read-only to this environment type. Useful to restrict access on sensitive environments")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Deploy"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage the deployments of this environment type, access the logs, connect via SSH to the application and manage its environment variables")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage the deployments and the settings of this environment type (including adding or removing services)")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Full Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user is admin of the project and can do everything he wants on it (no matter the environment type)")))),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/custom_role_creation.png",alt:"Qovery - custom role"})),Object(l.b)("p",null,'Once the role is created, you can assign it to a member of your organization within the "Members" section. You can also update the permissions by editing the role from the Roles&Permissions screen'),Object(l.b)("h3",{id:"examples"},"Examples"),Object(l.b)("p",null,"Within this section, we will try to provide you some example of roles & permission setup"),Object(l.b)("h4",{id:"example-1-simple-setup"},"Example 1, simple setup"),Object(l.b)("p",null,'An organization has 3 clusters ("prod cluster", \u201cstaging cluster\u201d, \u201cdev cluster\u201d) and 1 project P1. The organization has a CTO, a devops and some developers.\nThe roles & permissions could be configured in this way:'),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"CTO = Owner"),Object(l.b)("li",{parentName:"ul"},"Devops = Devops or Admin"),Object(l.b)("li",{parentName:"ul"},"Developers: we want these users capable of accessing the project, having read access to the prod clusters/env, managing deployments on the staging cluster (but not creating new environments on it) and doing whatever they want for the development environments on the dev cluster. So the configuration will look like:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cdeveloper\u201d with the following permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster \u2192 Create Environment (they can create environments on this cluster)"))),Object(l.b)("li",{parentName:"ul"},'Project Level Permissions for the project "P1":',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = Read-Only"),Object(l.b)("li",{parentName:"ul"},"staging = deploye (i.e. they can deploy env of type \u201cstaging\u201d)"),Object(l.b)("li",{parentName:"ul"},"development = Full Access (i.e. they can manage and create env of type \u201cdev\u201d)")))))))))),Object(l.b)("h3",{id:"example-2-advanced-setup"},"Example 2, advanced setup"),Object(l.b)("p",null,'An organization with 4 dev clusters (\u201cprod cluster\u201d, \u201cstaging clyster\u201d, 2 Dev clusters called \u201cdev cluster team 1\u201d and "dev cluster team 2\u201d) and 2 projects P1 and P2. The organization has a CTO, a devops, 2 dev teams with an \u201cacting dev-ops\u201d in it who manages the dev cluster on behalf of the devops.\nThe roles & permissions could be configured in this way:'),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"CTO = Owner"),Object(l.b)("li",{parentName:"ul"},"Devops = Devops or Admin"),Object(l.b)("li",{parentName:"ul"},'Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cDev Team 1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 1 \u2192 Create Environment (they can create envs only on their dev cluster)"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 2 \u2192 Read-Only"))),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = deploy"),Object(l.b)("li",{parentName:"ul"},"dev = Full Access (i.e. they can do whatever they want on env of type \u201cdev\u201d)"))))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d (i.e. they can't access P2)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = no-access"),Object(l.b)("li",{parentName:"ul"},"dev = no-access"))))))))))),Object(l.b)("li",{parentName:"ul"},'Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cDev Team 2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 1 \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 2 \u2192 Create Environment (they can create envs only on their dev cluster)"))),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d (i.e. they can't access P1)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = no-access"),Object(l.b)("li",{parentName:"ul"},"dev = no-access"))))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = deploy"),Object(l.b)("li",{parentName:"ul"},"dev = Full Access (i.e. they can do whatever they want on env of type \u201cdev\u201d)"))))))))))),Object(l.b)("li",{parentName:"ul"},"Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Group \u201cActing DevOps\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Create Environment"),Object(l.b)("li",{parentName:"ul"},"Dev1 cluster \u2192 Full Access"),Object(l.b)("li",{parentName:"ul"},"Dev2 cluster \u2192 Full Access"))),Object(l.b)("li",{parentName:"ul"},"Project permissions settings",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Admin (i.e.: full access to the project)"))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Admin (i.e.: full access to the project)")))))))))))}u.isMDXComponent=!0},415:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=r.a.createContext({}),s=function(e){var t=r.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},u=function(e){var t=s(e.components);return r.a.createElement(o.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,c=e.parentName,o=b(e,["components","mdxType","originalType","parentName"]),u=s(n),p=a,O=u["".concat(c,".").concat(p)]||u[p]||m[p]||l;return n?r.a.createElement(O,i({ref:t},o,{components:n})):r.a.createElement(O,i({ref:t},o))}));function O(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,c=new Array(l);c[0]=p;var i={};for(var b in t)hasOwnProperty.call(t,b)&&(i[b]=t[b]);i.originalType=e,i.mdxType="string"==typeof e?e:a,c[1]=i;for(var o=2;o1?arguments[1]:void 0,n),b=c>2?arguments[2]:void 0,o=void 0===b?n:r(b,n);o>i;)t[i++]=e;return t}},420:function(e,t,n){var a=n(28).f,r=Function.prototype,l=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(l)[1]}catch(e){return""}}})},421:function(e,t,n){"use strict";n(420);var a=n(0),r=n.n(a),l=n(416);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(l.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},422:function(e,t,n){"use strict";var a=n(1),r=n(0),l=n.n(r),c=n(39),i=n(425),b=n(20),o=n.n(b);t.a=function(e){var t,n=e.to,b=e.href,s=n||b,u=Object(i.a)(s),m=Object(r.useRef)(!1),p=o.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&u&&window.docusaurus.prefetch(s),function(){p&&t&&t.disconnect()}}),[s,p,u]),s&&u?l.a.createElement(c.b,Object(a.a)({},e,{onMouseEnter:function(){m.current||(window.docusaurus.preload(s),m.current=!0)},innerRef:function(e){var n,a;p&&e&&u&&(n=e,a=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:s})):l.a.createElement("a",Object(a.a)({},e,{href:s}))}},424:function(e,t,n){"use strict";var a=n(0),r=n.n(a),l=n(422),c=n(415),i=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,c=e.leftIcon,b=e.rightIcon,o=e.size,s=e.target,u=e.to,m=i()("jump-to","jump-to--"+o,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},c&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+c})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(b||"chevron-right")+" arrow"}))));return s?r.a.createElement("a",{href:u,target:s,className:m},p):r.a.createElement(l.a,{to:u,className:m},p)}},425:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))}}]); \ No newline at end of file +/*! For license information please see b2880863.74c3d2c5.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{320:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return b})),n.d(t,"rightToc",(function(){return o})),n.d(t,"default",(function(){return u}));var a=n(1),r=n(9),l=(n(0),n(417)),c=n(416),i=(n(424),n(421),{last_modified_on:"2023-11-24",title:"Members and RBAC",description:"Learn how to manage the RBAC via Qovery"}),b={id:"using-qovery/configuration/organization/members-rbac",title:"Members and RBAC",description:"Learn how to manage the RBAC via Qovery",source:"@site/docs/using-qovery/configuration/organization/members-rbac.md",permalink:"/docs/using-qovery/configuration/organization/members-rbac",sidebar:"docs",previous:{title:"Organization",permalink:"/docs/using-qovery/configuration/organization"},next:{title:"Git Repository access",permalink:"/docs/using-qovery/configuration/organization/git-repository-access"}},o=[{value:"Organization members",id:"organization-members",children:[]},{value:"Roles-Based access control (RBAC)",id:"roles-based-access-control-rbac",children:[{value:"Custom roles",id:"custom-roles",children:[]}]},{value:"Cluster Level Permissions",id:"cluster-level-permissions",children:[{value:"Examples",id:"examples",children:[]},{value:"Example 2, advanced setup",id:"example-2-advanced-setup",children:[]}]}],s={rightToc:o};function u(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(l.b)("wrapper",Object(a.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(l.b)("p",null,"You can manage from the organization settings the members capable to access your organization and as well their permission via an RBAC system."),Object(l.b)("p",null,"You can access the organization settings using the ",Object(l.b)("inlineCode",{parentName:"p"},"Wheel")," button on the left nav bar"),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/access_settings.png",alt:"How to access your organization settings"})),Object(l.b)("h2",{id:"organization-members"},"Organization members"),Object(l.b)("p",null,"This section allows you to manage the members of your organization (add / remove) and as well assign a role to each of them."),Object(l.b)("p",null,"You can invite someone to join your organization by email. Then he will get access to your projects and will be able to contribute."),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/members.png",alt:"Qovery - List all members within an organization"})),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Changing the role of a member requires the user to logout/login to make the changes effective or wait a few minutes (max 1 hour)")),Object(l.b)("h2",{id:"roles-based-access-control-rbac"},"Roles-Based access control (RBAC)"),Object(l.b)("p",null,"Qovery allows you to control the access to your cluster and environment resources by defining and assigning roles to your users."),Object(l.b)("p",null,"By default, five roles are created within your organization (Basic Roles):"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"Owner: the user has full access on the organization"),Object(l.b)("li",{parentName:"ul"},"Admin: same as the owner, the has full access to the organization but he cannot delete it"),Object(l.b)("li",{parentName:"ul"},"DevOps: the user can manage the organization infrastructure (clusters/registry/webhook setup) and manage the deployments of any environment within the organization."),Object(l.b)("li",{parentName:"ul"},"Billing Manager: the user can only manage the billing of the organization"),Object(l.b)("li",{parentName:"ul"},"Viewer: the user has read-only access to any section of the organization")),Object(l.b)("p",null,"More in detail, you can find the associated permissions below:"),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Owner"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Admin"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"DevOps"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Billing Manager"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Viewer"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Delete organization"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage billing"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage members & roles"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage cluster & container registry"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage organization setup (webhooks, Git and API tokens etc..)"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read ANY project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit/Delete ANY project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create project"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read ANY environment"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Edit/Delete ANY environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Add/Edit/Delete environment variables and secrets"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Deploy/Stop ANY environment or service"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Connect via shell to ANY application"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no")))),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Only one user can be Owner of an organization. You can transfer the ownership to another member via the menu available on the target member")),Object(l.b)("h3",{id:"custom-roles"},"Custom roles"),Object(l.b)("p",null,"If the basic roles are not enough given your internal organization, Qovery allows you to customize the accesses to your clusters, projets and environments by defining ",Object(l.b)("inlineCode",{parentName:"p"},"Custom Roles"),"."),Object(l.b)("p",null,"A ",Object(l.b)("inlineCode",{parentName:"p"},"Custom role")," allows you to customize:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions: you can specify the access to the existing computing resources (manage cluster X, create environments on cluster Y, read-only access on cluster K)"),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions: you can specify the access to the projects and their environments by environment type (deploy type X, create type K etc..)")),Object(l.b)(c.a,{type:"info",mdxType:"Alert"},Object(l.b)("p",null,"Users with a custom role cannot create clusters or manage any of the organization settings (members, webhook, API token etc..)")),Object(l.b)("p",null,'To create a custom role, go in the Roles & Permissions section press "Add new Role"'),Object(l.b)("p",null,"For the new role, you will be able to specify:"),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"The name of the role"),Object(l.b)("li",{parentName:"ul"},"A description"),Object(l.b)("li",{parentName:"ul"},"Cluster Level permissions"),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions")),Object(l.b)("h2",{id:"cluster-level-permissions"},"Cluster Level Permissions"),Object(l.b)("p",null,"This section allows you to fine tune the access to the computing resources. For each cluster of your organization, you will be able to specify an access permission (ordered by permission level):"),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Name"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Permission Type"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read-Only"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user can access the cluster information (name, region etc..). Minimum permission level.")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Create Environment"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),'The user can create environments on this cluster. Only users with this role could allocate resources for their environments on this cluster. Further environment level permissions (like deployment rights) are managed via the "Project Permissions", see below')),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Full Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user can create create environments on this cluster and as well manage the cluster's settings (start/stop, change number and type of nodes etc..). This permission allows a group of users to manage by themselves a specific cluster")))),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},'Project Level Permissions\nThis section allows you to fine tune the access to the projects and their environments. The environment access is managed by "Environment Type" to simplify the configuration (Production, Staging, Development, Preview). For each project of your organization and by environment type, you will be able to specify an access permission (ordered by permission level):')),Object(l.b)("table",null,Object(l.b)("thead",{parentName:"table"},Object(l.b)("tr",{parentName:"thead"},Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Name"),Object(l.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Permission Type"))),Object(l.b)("tbody",{parentName:"table"},Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"No Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),'The user has no access to this environment type. If the user has "No Access" on all the environment types, he will not have access to the project')),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Read-Only"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Access in read-only to this environment type. Useful to restrict access on sensitive environments")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Deploy"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage the deployments of this environment type, access the logs, connect via SSH to the application and manage its environment variables")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Manage the deployments and the settings of this environment type (including adding or removing services)")),Object(l.b)("tr",{parentName:"tbody"},Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Full Access"),Object(l.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"The user is admin of the project and can do everything he wants on it (no matter the environment type)")))),Object(l.b)("p",{align:"center"},Object(l.b)("img",{src:"/img/configuration/organization/custom_role_creation.png",alt:"Qovery - custom role"})),Object(l.b)("p",null,'Once the role is created, you can assign it to a member of your organization within the "Members" section. You can also update the permissions by editing the role from the Roles&Permissions screen'),Object(l.b)("h3",{id:"examples"},"Examples"),Object(l.b)("p",null,"Within this section, we will try to provide you some example of roles & permission setup"),Object(l.b)("h4",{id:"example-1-simple-setup"},"Example 1, simple setup"),Object(l.b)("p",null,'An organization has 3 clusters ("prod cluster", \u201cstaging cluster\u201d, \u201cdev cluster\u201d) and 1 project P1. The organization has a CTO, a devops and some developers.\nThe roles & permissions could be configured in this way:'),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"CTO = Owner"),Object(l.b)("li",{parentName:"ul"},"Devops = Devops or Admin"),Object(l.b)("li",{parentName:"ul"},"Developers: we want these users capable of accessing the project, having read access to the prod clusters/env, managing deployments on the staging cluster (but not creating new environments on it) and doing whatever they want for the development environments on the dev cluster. So the configuration will look like:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cdeveloper\u201d with the following permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster \u2192 Create Environment (they can create environments on this cluster)"))),Object(l.b)("li",{parentName:"ul"},'Project Level Permissions for the project "P1":',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = Read-Only"),Object(l.b)("li",{parentName:"ul"},"staging = deploye (i.e. they can deploy env of type \u201cstaging\u201d)"),Object(l.b)("li",{parentName:"ul"},"development = Full Access (i.e. they can manage and create env of type \u201cdev\u201d)")))))))))),Object(l.b)("h3",{id:"example-2-advanced-setup"},"Example 2, advanced setup"),Object(l.b)("p",null,'An organization with 4 dev clusters (\u201cprod cluster\u201d, \u201cstaging clyster\u201d, 2 Dev clusters called \u201cdev cluster team 1\u201d and "dev cluster team 2\u201d) and 2 projects P1 and P2. The organization has a CTO, a devops, 2 dev teams with an \u201cacting dev-ops\u201d in it who manages the dev cluster on behalf of the devops.\nThe roles & permissions could be configured in this way:'),Object(l.b)("ul",null,Object(l.b)("li",{parentName:"ul"},"CTO = Owner"),Object(l.b)("li",{parentName:"ul"},"Devops = Devops or Admin"),Object(l.b)("li",{parentName:"ul"},'Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cDev Team 1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 1 \u2192 Create Environment (they can create envs only on their dev cluster)"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 2 \u2192 Read-Only"))),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = deploy"),Object(l.b)("li",{parentName:"ul"},"dev = Full Access (i.e. they can do whatever they want on env of type \u201cdev\u201d)"))))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d (i.e. they can't access P2)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = no-access"),Object(l.b)("li",{parentName:"ul"},"dev = no-access"))))))))))),Object(l.b)("li",{parentName:"ul"},'Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:',Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Role \u201cDev Team 2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 1 \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Dev cluster team 2 \u2192 Create Environment (they can create envs only on their dev cluster)"))),Object(l.b)("li",{parentName:"ul"},"Project Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d (i.e. they can't access P1)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = no-access"),Object(l.b)("li",{parentName:"ul"},"dev = no-access"))))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Environment access (by env type)",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"prod = no-access"),Object(l.b)("li",{parentName:"ul"},"staging = deploy"),Object(l.b)("li",{parentName:"ul"},"dev = Full Access (i.e. they can do whatever they want on env of type \u201cdev\u201d)"))))))))))),Object(l.b)("li",{parentName:"ul"},"Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Create a new Group \u201cActing DevOps\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Cluster Level Permissions:",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Prod cluster \u2192 Read-Only"),Object(l.b)("li",{parentName:"ul"},"Staging cluster \u2192 Create Environment"),Object(l.b)("li",{parentName:"ul"},"Dev1 cluster \u2192 Full Access"),Object(l.b)("li",{parentName:"ul"},"Dev2 cluster \u2192 Full Access"))),Object(l.b)("li",{parentName:"ul"},"Project permissions settings",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP1\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Admin (i.e.: full access to the project)"))),Object(l.b)("li",{parentName:"ul"},"Config on the project \u201cP2\u201d",Object(l.b)("ul",{parentName:"li"},Object(l.b)("li",{parentName:"ul"},"Admin (i.e.: full access to the project)")))))))))))}u.isMDXComponent=!0},415:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=r.a.createContext({}),s=function(e){var t=r.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},u=function(e){var t=s(e.components);return r.a.createElement(o.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,c=e.parentName,o=b(e,["components","mdxType","originalType","parentName"]),u=s(n),p=a,O=u["".concat(c,".").concat(p)]||u[p]||m[p]||l;return n?r.a.createElement(O,i({ref:t},o,{components:n})):r.a.createElement(O,i({ref:t},o))}));function O(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,c=new Array(l);c[0]=p;var i={};for(var b in t)hasOwnProperty.call(t,b)&&(i[b]=t[b]);i.originalType=e,i.mdxType="string"==typeof e?e:a,c[1]=i;for(var o=2;o1?arguments[1]:void 0,n),b=c>2?arguments[2]:void 0,o=void 0===b?n:r(b,n);o>i;)t[i++]=e;return t}},420:function(e,t,n){var a=n(28).f,r=Function.prototype,l=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(l)[1]}catch(e){return""}}})},421:function(e,t,n){"use strict";n(420);var a=n(0),r=n.n(a),l=n(416);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(l.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},422:function(e,t,n){"use strict";var a=n(1),r=n(0),l=n.n(r),c=n(39),i=n(425),b=n(20),o=n.n(b);t.a=function(e){var t,n=e.to,b=e.href,s=n||b,u=Object(i.a)(s),m=Object(r.useRef)(!1),p=o.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&u&&window.docusaurus.prefetch(s),function(){p&&t&&t.disconnect()}}),[s,p,u]),s&&u?l.a.createElement(c.b,Object(a.a)({},e,{onMouseEnter:function(){m.current||(window.docusaurus.preload(s),m.current=!0)},innerRef:function(e){var n,a;p&&e&&u&&(n=e,a=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:s})):l.a.createElement("a",Object(a.a)({},e,{href:s}))}},424:function(e,t,n){"use strict";var a=n(0),r=n.n(a),l=n(422),c=n(415),i=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,c=e.leftIcon,b=e.rightIcon,o=e.size,s=e.target,u=e.to,m=i()("jump-to","jump-to--"+o,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},c&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+c})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(b||"chevron-right")+" arrow"}))));return s?r.a.createElement("a",{href:u,target:s,className:m},p):r.a.createElement(l.a,{to:u,className:m},p)}},425:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))}}]); \ No newline at end of file diff --git a/b2880863.3014c91d.js.LICENSE.txt b/b2880863.74c3d2c5.js.LICENSE.txt similarity index 100% rename from b2880863.3014c91d.js.LICENSE.txt rename to b2880863.74c3d2c5.js.LICENSE.txt diff --git a/c4f5d8e4.0bc638b8.js b/c4f5d8e4.0bc638b8.js deleted file mode 100644 index e2912b9194..0000000000 --- a/c4f5d8e4.0bc638b8.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see c4f5d8e4.0bc638b8.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[196],{347:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),c=a(442),l=a(437),o=a(554);Object(c.a)("h2");t.default=function(){return r.a.createElement(l.a,{title:"Qovery Hub | Documentation, Guides, Tutorials",description:"Qovery is a Platform to Deploy On-demand Environments on AWS in Just a Few Seconds"},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Qovery Hub Resources"),r.a.createElement(o.a,{buttonClass:"highlight",description:"Qovery is a Platform to Deploy On-demand Environments on AWS in Just a Few Seconds",center:!0,size:"lg"}))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"docs",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-book"})),r.a.createElement("div",{className:"panel--title"},"Documentation"),r.a.createElement("div",{className:"panel--description"},"Read our product documentation"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"guides",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-layers"})),r.a.createElement("div",{className:"panel--title"},"Guides"),r.a.createElement("div",{className:"panel--description"},"Get started using Qovery smoothly"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"guides/tutorial",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-bookmark"})),r.a.createElement("div",{className:"panel--title"},"Tutorials"),r.a.createElement("div",{className:"panel--description"},"Check out our community tutorials"))))),r.a.createElement("div",{className:"container",style:{marginTop:"10px"}},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Discord"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discord"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://roadmap.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-flag"})),r.a.createElement("div",{className:"panel--title"},"Roadmap"),r.a.createElement("div",{className:"panel--description"},"Check out our public Roadmap"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discuss.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Forum"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discourse"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://github.com/Qovery",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-github"})),r.a.createElement("div",{className:"panel--title"},"Github"),r.a.createElement("div",{className:"panel--description"},"Issues, code, and development"))))))))}},415:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:f,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(z,e))}))):null)}))),(m||l)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:M.a.footerLogoLink},r.a.createElement(Q,{alt:m.alt,url:d})):r.a.createElement(Q,{alt:m.alt,url:d})),r.a.createElement("small",null,l),r.a.createElement("br",null))))},R=a(454),F=a(455),J=a(3);a(138);t.a=function(e){var t=Object(p.a)().siteConfig,a=void 0===t?{}:t,n=a.favicon,o=(a.tagline,a.title),i=a.themeConfig.image,s=a.url,m=e.children,u=e.title,d=e.noFooter,f=e.description,h=e.image,g=e.keywords,v=(e.permalink,e.version),b=u?u+" | "+o:o,E=h||i,y=s+Object(_.a)(E),N=Object(_.a)(n),w=Object(J.h)(),k=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(F.a,null,r.a.createElement(R.a,null,r.a.createElement(l.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),b&&r.a.createElement("title",null,b),b&&r.a.createElement("meta",{property:"og:title",content:b}),n&&r.a.createElement("link",{rel:"shortcut icon",href:N}),f&&r.a.createElement("meta",{name:"description",content:f}),f&&r.a.createElement("meta",{property:"og:description",content:f}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),E&&r.a.createElement("meta",{property:"og:image",content:y}),E&&r.a.createElement("meta",{property:"twitter:image",content:y}),E&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+b}),k&&r.a.createElement("meta",{property:"og:url",content:k}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),k&&r.a.createElement("link",{rel:"canonical",href:k})),r.a.createElement(c.a,null),r.a.createElement(D,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(q,null)))}},442:function(e,t,a){"use strict";var n=a(9),r=a(0),c=a.n(r),l=a(415),o=a.n(l),i=a(428),s=(a(139),a(140)),m=a.n(s);t.a=function(e){return function(t){var a,r=t.id,l=Object(n.a)(t,["id"]),s=Object(i.a)().siteConfig,u=(s=void 0===s?{}:s).themeConfig,d=(u=void 0===u?{}:u).navbar,f=(d=void 0===d?{}:d).hideOnScroll,p=void 0!==f&&f;return r?c.a.createElement(e,l,c.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(a={},a[m.a.enhancedAnchor]=!p,a)),id:r}),c.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),l.children):c.a.createElement(e,l)}}},446:function(e,t,a){"use strict";var n=a(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},471:function(e,t){var a,n,r=e.exports={};function c(){throw new Error("setTimeout has not been defined")}function l(){throw new Error("clearTimeout has not been defined")}function o(e){if(a===setTimeout)return setTimeout(e,0);if((a===c||!a)&&setTimeout)return a=setTimeout,setTimeout(e,0);try{return a(e,0)}catch(t){try{return a.call(null,e,0)}catch(t){return a.call(this,e,0)}}}!function(){try{a="function"==typeof setTimeout?setTimeout:c}catch(e){a=c}try{n="function"==typeof clearTimeout?clearTimeout:l}catch(e){n=l}}();var i,s=[],m=!1,u=-1;function d(){m&&i&&(m=!1,i.length?s=i.concat(s):u=-1,s.length&&f())}function f(){if(!m){var e=o(d);m=!0;for(var t=s.length;t;){for(i=s,s=[];++u1)for(var a=1;a=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())}).call(this,a(471))},548:function(e,t,a){var n;function r(e){function a(){if(a.enabled){var e=a,r=+new Date,c=r-(n||r);e.diff=c,e.prev=n,e.curr=r,n=r;for(var l=new Array(arguments.length),o=0;o0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var l=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*l;case"days":case"day":case"d":return l*c;case"hours":case"hour":case"hrs":case"hr":case"h":return l*r;case"minutes":case"minute":case"mins":case"min":case"m":return l*n;case"seconds":case"second":case"secs":case"sec":case"s":return l*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return l;default:return}}(e);if("number"===i&&!1===isNaN(e))return t.long?l(o=e,c,"day")||l(o,r,"hour")||l(o,n,"minute")||l(o,a,"second")||o+" ms":function(e){if(e>=c)return Math.round(e/c)+"d";if(e>=r)return Math.round(e/r)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=a)return Math.round(e/a)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},550:function(e,t,a){"use strict";var n=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!n.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some((function(e){return e.length>63}))}},554:function(e,t,a){"use strict";a(438),a(439);var n=a(0),r=a.n(n),c=a(415),l=a.n(c),o=(a(58),a(21),a(546)),i=a.n(o),s=a(550),m=function(e){return new Promise((function(t,a){return i()(e,{param:"c",timeout:3500},(function(e,n){e&&a(e),n&&t(n)}))}))},u=function(e){var t="";for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var n="group["===a.substring(0,6)?a:a.toUpperCase();t=t.concat("&"+n+"="+e[a])}return t},d=function(e,t,a){var n=Object(s.validate)(e),r=encodeURIComponent(e);if(!n)return Promise.resolve({result:"error",msg:"The email you entered is not valid."});var c="https://qovery.us4.list-manage.com/subscribe/post-json?u=3c76e7a2087d5bc4020348c46&id=63bd993879";arguments.length<3&&"string"==typeof t?c=t:"string"==typeof a&&(c=a);var l="&EMAIL="+r+u(t),o=""+c+l;return m(o)};a(152),t.a=function(e){var t,a=e.block,c=e.buttonClass,o=e.center,i=e.description,s=e.subscriptionEnabled,m=e.size,u=e.width,f=Object(n.useState)(""),p=f[0],h=f[1],g=Object(n.useState)(!1),v=g[0],b=g[1],E=Object(n.useState)(!1),y=E[0],N=E[1],w=Object(n.useState)("Could not subscribe :("),k=w[0],_=w[1];return r.a.createElement("div",{className:l()("mailing-list",(t={"mailing-list--block":a,"mailing-list--center":o},t["mailing-list--"+m]=m,t))},!1!==i&&r.a.createElement("div",{className:"mailing-list--description"},i),s&&!v&&r.a.createElement("form",{onSubmit:function(e){return function(e){e.preventDefault(),d(p).then((function(e){"success"===e.result?(b(!0),y&&N(!1)):(N(!0),e.msg.includes(p+" is already subscribed")?_("This email is already subscribed to the newsletter"):_("Could not subscribe :("))})).catch((function(e){N(!0)}))}(e)},className:l()("mailing-list--form")},r.a.createElement("input",{onChange:function(e){return h(e.target.value)},className:l()("input","input--"+m),name:"email",placeholder:"you@email.com",type:"email",style:{width:u}}),r.a.createElement("button",{className:l()("button","button--"+(c||"primary"),"button--"+m),type:"submit"},"Subscribe")),y&&r.a.createElement("span",{className:"badge badge--secondary"},k),r.a.createElement("div",{style:{textAlign:"center"}},s&&v&&r.a.createElement("span",{className:"badge badge--primary"},"Subscribed!")))}}}]); \ No newline at end of file diff --git a/c4f5d8e4.598278a7.js b/c4f5d8e4.598278a7.js new file mode 100644 index 0000000000..a5e7954f6e --- /dev/null +++ b/c4f5d8e4.598278a7.js @@ -0,0 +1,2 @@ +/*! For license information please see c4f5d8e4.598278a7.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[196],{347:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),l=a(442),c=a(437),o=a(554);Object(l.a)("h2");t.default=function(){return r.a.createElement(c.a,{title:"Qovery Hub | Documentation, Guides, Tutorials",description:"Qovery is an Internal Developer Platform Helping Platform Engineers and Developers To Ship Faster."},r.a.createElement("header",{className:"hero"},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("h1",null,"Qovery Hub Resources"),r.a.createElement(o.a,{buttonClass:"highlight",description:"Qovery is an Internal Developer Platform Helping Platform Engineers and Developers To Ship Faster.",center:!0,size:"lg"}))),r.a.createElement("main",null,r.a.createElement("section",null,r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"docs",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-book"})),r.a.createElement("div",{className:"panel--title"},"Documentation"),r.a.createElement("div",{className:"panel--description"},"Read our product documentation"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"guides",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-layers"})),r.a.createElement("div",{className:"panel--title"},"Guides"),r.a.createElement("div",{className:"panel--description"},"Get started using Qovery smoothly"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"guides/tutorial",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-bookmark"})),r.a.createElement("div",{className:"panel--title"},"Tutorials"),r.a.createElement("div",{className:"panel--description"},"Check out our community tutorials"))))),r.a.createElement("div",{className:"container",style:{marginTop:"10px"}},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Discord"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discord"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://roadmap.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-flag"})),r.a.createElement("div",{className:"panel--title"},"Roadmap"),r.a.createElement("div",{className:"panel--description"},"Check out our public Roadmap"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://discuss.qovery.com",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-message-circle"})),r.a.createElement("div",{className:"panel--title"},"Forum"),r.a.createElement("div",{className:"panel--description"},"Join our community on Discourse"))),r.a.createElement("div",{className:"col"},r.a.createElement("a",{href:"https://github.com/Qovery",target:"_blank",className:"panel panel--link text--center"},r.a.createElement("div",{className:"panel--icon"},r.a.createElement("i",{className:"feather icon-github"})),r.a.createElement("div",{className:"panel--title"},"Github"),r.a.createElement("div",{className:"panel--description"},"Issues, code, and development"))))))))}},415:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t0&&r.a.createElement("div",{className:"row footer__links"},r.a.createElement("div",{className:"col col--5 footer__col"},r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement(u.a,{className:"navbar__logo",src:f,alt:"Qovery",width:"150",height:"auto"})),r.a.createElement("div",{className:"margin-bottom--md"},r.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),r.a.createElement("div",null,r.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},r.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},r.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},r.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",r.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},r.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),i.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(z,e))}))):null)}))),(m||c)&&r.a.createElement("div",{className:"text--center"},m&&m.src&&r.a.createElement("div",{className:"margin-bottom--sm"},m.href?r.a.createElement("a",{href:m.href,target:"_blank",rel:"noopener noreferrer",className:M.a.footerLogoLink},r.a.createElement(P,{alt:m.alt,url:d})):r.a.createElement(P,{alt:m.alt,url:d})),r.a.createElement("small",null,c),r.a.createElement("br",null))))},q=a(454),R=a(455),F=a(3);a(138);t.a=function(e){var t=Object(p.a)().siteConfig,a=void 0===t?{}:t,n=a.favicon,o=(a.tagline,a.title),i=a.themeConfig.image,s=a.url,m=e.children,u=e.title,d=e.noFooter,f=e.description,h=e.image,g=e.keywords,v=(e.permalink,e.version),b=u?u+" | "+o:o,E=h||i,y=s+Object(_.a)(E),N=Object(_.a)(n),w=Object(F.h)(),k=w?"https://docs.qovery.com"+(w.pathname.endsWith("/")?w.pathname:w.pathname+"/"):null;return r.a.createElement(R.a,null,r.a.createElement(q.a,null,r.a.createElement(c.a,null,r.a.createElement("html",{lang:"en"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),b&&r.a.createElement("title",null,b),b&&r.a.createElement("meta",{property:"og:title",content:b}),n&&r.a.createElement("link",{rel:"shortcut icon",href:N}),f&&r.a.createElement("meta",{name:"description",content:f}),f&&r.a.createElement("meta",{property:"og:description",content:f}),v&&r.a.createElement("meta",{name:"docsearch:version",content:v}),g&&g.length&&r.a.createElement("meta",{name:"keywords",content:g.join(",")}),E&&r.a.createElement("meta",{property:"og:image",content:y}),E&&r.a.createElement("meta",{property:"twitter:image",content:y}),E&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+b}),k&&r.a.createElement("meta",{property:"og:url",content:k}),r.a.createElement("meta",{name:"twitter:card",content:"summary"}),k&&r.a.createElement("link",{rel:"canonical",href:k})),r.a.createElement(l.a,null),r.a.createElement(S,null),r.a.createElement("div",{className:"main-wrapper"},m),!d&&r.a.createElement(Q,null)))}},442:function(e,t,a){"use strict";var n=a(9),r=a(0),l=a.n(r),c=a(415),o=a.n(c),i=a(428),s=(a(139),a(140)),m=a.n(s);t.a=function(e){return function(t){var a,r=t.id,c=Object(n.a)(t,["id"]),s=Object(i.a)().siteConfig,u=(s=void 0===s?{}:s).themeConfig,d=(u=void 0===u?{}:u).navbar,f=(d=void 0===d?{}:d).hideOnScroll,p=void 0!==f&&f;return r?l.a.createElement(e,c,l.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(a={},a[m.a.enhancedAnchor]=!p,a)),id:r}),l.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+r,title:"Direct link to heading"},"#"),c.children):l.a.createElement(e,c)}}},446:function(e,t,a){"use strict";var n=a(0),r=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=r},471:function(e,t){var a,n,r=e.exports={};function l(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function o(e){if(a===setTimeout)return setTimeout(e,0);if((a===l||!a)&&setTimeout)return a=setTimeout,setTimeout(e,0);try{return a(e,0)}catch(t){try{return a.call(null,e,0)}catch(t){return a.call(this,e,0)}}}!function(){try{a="function"==typeof setTimeout?setTimeout:l}catch(e){a=l}try{n="function"==typeof clearTimeout?clearTimeout:c}catch(e){n=c}}();var i,s=[],m=!1,u=-1;function d(){m&&i&&(m=!1,i.length?s=i.concat(s):u=-1,s.length&&f())}function f(){if(!m){var e=o(d);m=!0;for(var t=s.length;t;){for(i=s,s=[];++u1)for(var a=1;a=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())}).call(this,a(471))},548:function(e,t,a){var n;function r(e){function a(){if(a.enabled){var e=a,r=+new Date,l=r-(n||r);e.diff=l,e.prev=n,e.curr=r,n=r;for(var c=new Array(arguments.length),o=0;o0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var c=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*c;case"days":case"day":case"d":return c*l;case"hours":case"hour":case"hrs":case"hr":case"h":return c*r;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*a;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(e);if("number"===i&&!1===isNaN(e))return t.long?c(o=e,l,"day")||c(o,r,"hour")||c(o,n,"minute")||c(o,a,"second")||o+" ms":function(e){if(e>=l)return Math.round(e/l)+"d";if(e>=r)return Math.round(e/r)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=a)return Math.round(e/a)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},550:function(e,t,a){"use strict";var n=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!n.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some((function(e){return e.length>63}))}},554:function(e,t,a){"use strict";a(438),a(439);var n=a(0),r=a.n(n),l=a(415),c=a.n(l),o=(a(58),a(21),a(546)),i=a.n(o),s=a(550),m=function(e){return new Promise((function(t,a){return i()(e,{param:"c",timeout:3500},(function(e,n){e&&a(e),n&&t(n)}))}))},u=function(e){var t="";for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var n="group["===a.substring(0,6)?a:a.toUpperCase();t=t.concat("&"+n+"="+e[a])}return t},d=function(e,t,a){var n=Object(s.validate)(e),r=encodeURIComponent(e);if(!n)return Promise.resolve({result:"error",msg:"The email you entered is not valid."});var l="https://qovery.us4.list-manage.com/subscribe/post-json?u=3c76e7a2087d5bc4020348c46&id=63bd993879";arguments.length<3&&"string"==typeof t?l=t:"string"==typeof a&&(l=a);var c="&EMAIL="+r+u(t),o=""+l+c;return m(o)};a(152),t.a=function(e){var t,a=e.block,l=e.buttonClass,o=e.center,i=e.description,s=e.subscriptionEnabled,m=e.size,u=e.width,f=Object(n.useState)(""),p=f[0],h=f[1],g=Object(n.useState)(!1),v=g[0],b=g[1],E=Object(n.useState)(!1),y=E[0],N=E[1],w=Object(n.useState)("Could not subscribe :("),k=w[0],_=w[1];return r.a.createElement("div",{className:c()("mailing-list",(t={"mailing-list--block":a,"mailing-list--center":o},t["mailing-list--"+m]=m,t))},!1!==i&&r.a.createElement("div",{className:"mailing-list--description"},i),s&&!v&&r.a.createElement("form",{onSubmit:function(e){return function(e){e.preventDefault(),d(p).then((function(e){"success"===e.result?(b(!0),y&&N(!1)):(N(!0),e.msg.includes(p+" is already subscribed")?_("This email is already subscribed to the newsletter"):_("Could not subscribe :("))})).catch((function(e){N(!0)}))}(e)},className:c()("mailing-list--form")},r.a.createElement("input",{onChange:function(e){return h(e.target.value)},className:c()("input","input--"+m),name:"email",placeholder:"you@email.com",type:"email",style:{width:u}}),r.a.createElement("button",{className:c()("button","button--"+(l||"primary"),"button--"+m),type:"submit"},"Subscribe")),y&&r.a.createElement("span",{className:"badge badge--secondary"},k),r.a.createElement("div",{style:{textAlign:"center"}},s&&v&&r.a.createElement("span",{className:"badge badge--primary"},"Subscribed!")))}}}]); \ No newline at end of file diff --git a/c4f5d8e4.0bc638b8.js.LICENSE.txt b/c4f5d8e4.598278a7.js.LICENSE.txt similarity index 100% rename from c4f5d8e4.0bc638b8.js.LICENSE.txt rename to c4f5d8e4.598278a7.js.LICENSE.txt diff --git a/c6d06197.470c97cf.js b/c6d06197.470c97cf.js deleted file mode 100644 index 2f30895046..0000000000 --- a/c6d06197.470c97cf.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see c6d06197.470c97cf.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[198],{349:function(t,e,r){"use strict";r.r(e);r(438),r(439),r(465),r(434),r(29),r(22),r(21),r(52),r(420);var n=r(0),o=r.n(n),i=r(495),u=r(508),a=r(442),c=r(437),l=r(422),f=r(496),s=r.n(f),p=(r(350),Object(a.a)("h2"));function v(t){var e=t.filtering,r=t.items;if(0==r.length)return o.a.createElement(i.a,{text:"no guides found"});if(e)return o.a.createElement(u.a,{items:r});var n=r.filter((function(t){return"getting-started"==t.content.metadata.categories[0].name})),a=r.filter((function(t){return"cloud-provider"==t.content.metadata.categories[0].name})),c=a[0].content.metadata.categories[0],l=r.filter((function(t){return"advanced"==t.content.metadata.categories[0].name})),f=l[0].content.metadata.categories[0],s=r.filter((function(t){return"tutorial"==t.content.metadata.categories[0].name})),v=s[0].content.metadata.categories[0];return o.a.createElement(o.a.Fragment,null,o.a.createElement("section",null,o.a.createElement(u.a,{items:n,staggered:!0})),o.a.createElement("section",null,o.a.createElement(p,{id:c.permalink},c.title),c.description&&o.a.createElement("div",{className:"sub-title"},c.description),o.a.createElement(u.a,{items:a,large:!1})),o.a.createElement("section",null,o.a.createElement(p,{id:f.permalink},f.title),f.description&&o.a.createElement("div",{className:"sub-title"},f.description),o.a.createElement(u.a,{items:l,large:!1})),o.a.createElement("section",null,o.a.createElement(p,{id:v.permalink},v.title),v.description&&o.a.createElement("div",{className:"sub-title"},v.description),o.a.createElement(u.a,{items:s,large:!1})))}e.default=function(t){t.metadata;var e=t.items,r=t.location?s.a.parse(t.location.search,{ignoreQueryPrefix:!0}):{},i=Object(n.useState)(r.search),u=i[0],a=i[1],f=!1,p=e.filter((function(t){var e=t.content.metadata.tags,r=e.some((function(t){return t.label.startsWith("platform: ")})),n=e.some((function(t){return t.label.startsWith("source: ")})),o=e.some((function(t){return t.label.startsWith("sink: ")}));return!((r||n)&&o)}));return u&&(f=!0,p=p.filter((function(t){var e=u.toLowerCase(),r=(t.content.frontMatter,t.content.metadata);return!!r.coverLabel.toLowerCase().includes(e)||!!r.tags.some((function(t){return t.label.toLowerCase().includes(e)}))}))),o.a.createElement(c.a,{title:"Guides",description:"Guides, tutorials, and education."},o.a.createElement("header",{className:"hero hero--clean"},o.a.createElement("div",{className:"container"},o.a.createElement("h1",null,"Qovery Guides"),o.a.createElement("div",{className:"hero--subtitle"},"Thoughtful guides to help you get the most out of Qovery. Created and curated by the ",o.a.createElement(l.a,{to:"https://www.qovery.com/team"},"Qovery team"),"."),o.a.createElement("div",{className:"hero--search"},o.a.createElement("input",{type:"text",className:"input--text input--xl",onChange:function(t){return a(t.currentTarget.value)},placeholder:"\ud83d\udd0d Search by language, framework, cloud provider, database or tag..."})))),o.a.createElement("main",{className:"container container--s"},o.a.createElement(v,{filtering:f,items:p})))}},415:function(t,e,r){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;e1?arguments[1]:void 0)}}),r(74)("find")},434:function(t,e,r){"use strict";var n=r(8),o=r(478),i=r(55);r(56)("search",1,(function(t,e,r,u){return[function(r){var n=t(this),o=null==r?void 0:r[e];return void 0!==o?o.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=u(r,t,this);if(e.done)return e.value;var a=n(t),c=String(this),l=a.lastIndex;o(l,0)||(a.lastIndex=0);var f=i(a,c);return o(a.lastIndex,l)||(a.lastIndex=l),null===f?-1:f.index}]}))},437:function(t,e,r){"use strict";r(449);var n=r(0),o=r.n(n),i=r(450),u=r(435),a=r(1),c=(r(438),r(439),r(451),r(422)),l=r(452),f=r(432),s=r.n(f),p=r(453),v=r.n(p),d=r(428),h=r(415),y=r.n(h),g=r(135),m=r.n(g),D=function(){return o.a.createElement("span",{className:y()(m.a.toggle,m.a.moon)})},_=function(){return o.a.createElement("span",{className:y()(m.a.toggle,m.a.sun)})},b=function(t){var e=Object(d.a)().isClient;return o.a.createElement(v.a,Object(a.a)({disabled:!e,icons:{checked:o.a.createElement(D,null),unchecked:o.a.createElement(_,null)}},t))};function E(){var t=Object(d.a)().siteConfig,e=(void 0===t?{}:t).customFields.metadata.latest_post,r=Date.parse(e.date),n=new Date,o=Math.abs(n-r),i=Math.ceil(o/864e5),u=null;return"undefined"!=typeof window&&(u=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!u||u0&&o.a.createElement("div",{className:"row footer__links"},o.a.createElement("div",{className:"col col--5 footer__col"},o.a.createElement("div",{className:"margin-bottom--md"},o.a.createElement(s.a,{className:"navbar__logo",src:v,alt:"Qovery",width:"150",height:"auto"})),o.a.createElement("div",{className:"margin-bottom--md"},o.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),o.a.createElement("div",null,o.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},o.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},o.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},o.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},o.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(t,e){return o.a.createElement("div",{key:e,className:"col footer__col"},null!=t.title?o.a.createElement("h4",{className:"footer__title"},t.title):null,null!=t.items&&Array.isArray(t.items)&&t.items.length>0?o.a.createElement("ul",{className:"footer__items"},t.items.map((function(t,e){return t.html?o.a.createElement("li",{key:e,className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):o.a.createElement("li",{key:t.href||t.to,className:"footer__item"},o.a.createElement(B,t))}))):null)}))),(f||u)&&o.a.createElement("div",{className:"text--center"},f&&f.src&&o.a.createElement("div",{className:"margin-bottom--sm"},f.href?o.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:R.a.footerLogoLink},o.a.createElement(L,{alt:f.alt,url:p})):o.a.createElement(L,{alt:f.alt,url:p})),o.a.createElement("small",null,u),o.a.createElement("br",null))))},M=r(454),W=r(455),U=r(3);r(138);e.a=function(t){var e=Object(d.a)().siteConfig,r=void 0===e?{}:e,n=r.favicon,a=(r.tagline,r.title),c=r.themeConfig.image,l=r.url,f=t.children,s=t.title,p=t.noFooter,v=t.description,h=t.image,y=t.keywords,g=(t.permalink,t.version),m=s?s+" | "+a:a,D=h||c,_=l+Object(F.a)(D),b=Object(F.a)(n),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return o.a.createElement(W.a,null,o.a.createElement(M.a,null,o.a.createElement(u.a,null,o.a.createElement("html",{lang:"en"}),o.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),m&&o.a.createElement("title",null,m),m&&o.a.createElement("meta",{property:"og:title",content:m}),n&&o.a.createElement("link",{rel:"shortcut icon",href:b}),v&&o.a.createElement("meta",{name:"description",content:v}),v&&o.a.createElement("meta",{property:"og:description",content:v}),g&&o.a.createElement("meta",{name:"docsearch:version",content:g}),y&&y.length&&o.a.createElement("meta",{name:"keywords",content:y.join(",")}),D&&o.a.createElement("meta",{property:"og:image",content:_}),D&&o.a.createElement("meta",{property:"twitter:image",content:_}),D&&o.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+m}),w&&o.a.createElement("meta",{property:"og:url",content:w}),o.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&o.a.createElement("link",{rel:"canonical",href:w})),o.a.createElement(i.a,null),o.a.createElement(N,null),o.a.createElement("div",{className:"main-wrapper"},f),!p&&o.a.createElement(T,null)))}},442:function(t,e,r){"use strict";var n=r(9),o=r(0),i=r.n(o),u=r(415),a=r.n(u),c=r(428),l=(r(139),r(140)),f=r.n(l);e.a=function(t){return function(e){var r,o=e.id,u=Object(n.a)(e,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,p=(s=void 0===s?{}:s).navbar,v=(p=void 0===p?{}:p).hideOnScroll,d=void 0!==v&&v;return o?i.a.createElement(t,u,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:a()("anchor",(r={},r[f.a.enhancedAnchor]=!d,r)),id:o}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+o,title:"Direct link to heading"},"#"),u.children):i.a.createElement(t,u)}}},443:function(t,e,r){(function(t,n){var o;(function(){var i="Expected a function",u="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",p="[object Error]",v="[object Function]",d="[object GeneratorFunction]",h="[object Map]",y="[object Number]",g="[object Object]",m="[object RegExp]",D="[object Set]",_="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",j="[object Float32Array]",A="[object Float64Array]",x="[object Int8Array]",S="[object Int16Array]",O="[object Int32Array]",k="[object Uint8Array]",C="[object Uint16Array]",N="[object Uint32Array]",P=/\b__p \+= '';/g,I=/\b(__p \+=) '' \+/g,R=/(__e\(.*?\)|\b__t\)) \+\n'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,L=/[&<>"']/g,T=RegExp(B.source),M=RegExp(L.source),W=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,V=/[\\^$.*+?()[\]{}|]/g,H=RegExp(V.source),Q=/^\s+|\s+$/g,J=/^\s+/,Z=/\s+$/,K=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,tt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,et=/\\(\\)?/g,rt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,ot=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,ut=/^\[object .+?Constructor\]$/,at=/^0o[0-7]+$/i,ct=/^(?:0|[1-9]\d*)$/,lt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ft=/($^)/,st=/['\n\r\u2028\u2029\\]/g,pt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",vt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",dt="[\\ud800-\\udfff]",ht="["+vt+"]",yt="["+pt+"]",gt="\\d+",mt="[\\u2700-\\u27bf]",Dt="[a-z\\xdf-\\xf6\\xf8-\\xff]",_t="[^\\ud800-\\udfff"+vt+gt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",bt="\\ud83c[\\udffb-\\udfff]",Et="[^\\ud800-\\udfff]",wt="(?:\\ud83c[\\udde6-\\uddff]){2}",Ft="[\\ud800-\\udbff][\\udc00-\\udfff]",jt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",At="(?:"+Dt+"|"+_t+")",xt="(?:"+jt+"|"+_t+")",St="(?:"+yt+"|"+bt+")"+"?",Ot="[\\ufe0e\\ufe0f]?"+St+("(?:\\u200d(?:"+[Et,wt,Ft].join("|")+")[\\ufe0e\\ufe0f]?"+St+")*"),kt="(?:"+[mt,wt,Ft].join("|")+")"+Ot,Ct="(?:"+[Et+yt+"?",yt,wt,Ft,dt].join("|")+")",Nt=RegExp("['\u2019]","g"),Pt=RegExp(yt,"g"),It=RegExp(bt+"(?="+bt+")|"+Ct+Ot,"g"),Rt=RegExp([jt+"?"+Dt+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[ht,jt,"$"].join("|")+")",xt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[ht,jt+At,"$"].join("|")+")",jt+"?"+At+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",jt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",gt,kt].join("|"),"g"),Bt=RegExp("[\\u200d\\ud800-\\udfff"+pt+"\\ufe0e\\ufe0f]"),Lt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Tt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mt=-1,Wt={};Wt[j]=Wt[A]=Wt[x]=Wt[S]=Wt[O]=Wt[k]=Wt["[object Uint8ClampedArray]"]=Wt[C]=Wt[N]=!0,Wt[c]=Wt[l]=Wt[w]=Wt[f]=Wt[F]=Wt[s]=Wt[p]=Wt[v]=Wt[h]=Wt[y]=Wt[g]=Wt[m]=Wt[D]=Wt[_]=Wt[E]=!1;var Ut={};Ut[c]=Ut[l]=Ut[w]=Ut[F]=Ut[f]=Ut[s]=Ut[j]=Ut[A]=Ut[x]=Ut[S]=Ut[O]=Ut[h]=Ut[y]=Ut[g]=Ut[m]=Ut[D]=Ut[_]=Ut[b]=Ut[k]=Ut["[object Uint8ClampedArray]"]=Ut[C]=Ut[N]=!0,Ut[p]=Ut[v]=Ut[E]=!1;var zt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$t=parseFloat,qt=parseInt,Gt="object"==typeof t&&t&&t.Object===Object&&t,Vt="object"==typeof self&&self&&self.Object===Object&&self,Ht=Gt||Vt||Function("return this")(),Qt=e&&!e.nodeType&&e,Jt=Qt&&"object"==typeof n&&n&&!n.nodeType&&n,Zt=Jt&&Jt.exports===Qt,Kt=Zt&&Gt.process,Yt=function(){try{var t=Jt&&Jt.require&&Jt.require("util").types;return t||Kt&&Kt.binding&&Kt.binding("util")}catch(e){}}(),Xt=Yt&&Yt.isArrayBuffer,te=Yt&&Yt.isDate,ee=Yt&&Yt.isMap,re=Yt&&Yt.isRegExp,ne=Yt&&Yt.isSet,oe=Yt&&Yt.isTypedArray;function ie(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function ue(t,e,r,n){for(var o=-1,i=null==t?0:t.length;++o-1}function pe(t,e,r){for(var n=-1,o=null==t?0:t.length;++n-1;);return r}function Ie(t,e){for(var r=t.length;r--&&be(e,t[r],0)>-1;);return r}function Re(t,e){for(var r=t.length,n=0;r--;)t[r]===e&&++n;return n}var Be=Ae({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Le=Ae({"&":"&","<":"<",">":">",'"':""","'":"'"});function Te(t){return"\\"+zt[t]}function Me(t){return Bt.test(t)}function We(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}function Ue(t,e){return function(r){return t(e(r))}}function ze(t,e){for(var r=-1,n=t.length,o=0,i=[];++r",""":'"',"'":"'"});var Qe=function t(e){var r,n=(e=null==e?Ht:Qe.defaults(Ht.Object(),e,Qe.pick(Ht,Tt))).Array,o=e.Date,pt=e.Error,vt=e.Function,dt=e.Math,ht=e.Object,yt=e.RegExp,gt=e.String,mt=e.TypeError,Dt=n.prototype,_t=vt.prototype,bt=ht.prototype,Et=e["__core-js_shared__"],wt=_t.toString,Ft=bt.hasOwnProperty,jt=0,At=(r=/[^.]+$/.exec(Et&&Et.keys&&Et.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",xt=bt.toString,St=wt.call(ht),Ot=Ht._,kt=yt("^"+wt.call(Ft).replace(V,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ct=Zt?e.Buffer:void 0,It=e.Symbol,Bt=e.Uint8Array,zt=Ct?Ct.allocUnsafe:void 0,Gt=Ue(ht.getPrototypeOf,ht),Vt=ht.create,Qt=bt.propertyIsEnumerable,Jt=Dt.splice,Kt=It?It.isConcatSpreadable:void 0,Yt=It?It.iterator:void 0,me=It?It.toStringTag:void 0,Ae=function(){try{var t=ti(ht,"defineProperty");return t({},"",{}),t}catch(e){}}(),Je=e.clearTimeout!==Ht.clearTimeout&&e.clearTimeout,Ze=o&&o.now!==Ht.Date.now&&o.now,Ke=e.setTimeout!==Ht.setTimeout&&e.setTimeout,Ye=dt.ceil,Xe=dt.floor,tr=ht.getOwnPropertySymbols,er=Ct?Ct.isBuffer:void 0,rr=e.isFinite,nr=Dt.join,or=Ue(ht.keys,ht),ir=dt.max,ur=dt.min,ar=o.now,cr=e.parseInt,lr=dt.random,fr=Dt.reverse,sr=ti(e,"DataView"),pr=ti(e,"Map"),vr=ti(e,"Promise"),dr=ti(e,"Set"),hr=ti(e,"WeakMap"),yr=ti(ht,"create"),gr=hr&&new hr,mr={},Dr=xi(sr),_r=xi(pr),br=xi(vr),Er=xi(dr),wr=xi(hr),Fr=It?It.prototype:void 0,jr=Fr?Fr.valueOf:void 0,Ar=Fr?Fr.toString:void 0;function xr(t){if(qu(t)&&!Pu(t)&&!(t instanceof Cr)){if(t instanceof kr)return t;if(Ft.call(t,"__wrapped__"))return Si(t)}return new kr(t)}var Sr=function(){function t(){}return function(e){if(!$u(e))return{};if(Vt)return Vt(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();function Or(){}function kr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function Cr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Nr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Jr(t,e,r,n,o,i){var u,a=1&e,l=2&e,p=4&e;if(r&&(u=o?r(t,n,o,i):r(t)),void 0!==u)return u;if(!$u(t))return t;var E=Pu(t);if(E){if(u=function(t){var e=t.length,r=new t.constructor(e);e&&"string"==typeof t[0]&&Ft.call(t,"index")&&(r.index=t.index,r.input=t.input);return r}(t),!a)return mo(t,u)}else{var P=ni(t),I=P==v||P==d;if(Lu(t))return so(t,a);if(P==g||P==c||I&&!o){if(u=l||I?{}:ii(t),!a)return l?function(t,e){return Do(t,ri(t),e)}(t,function(t,e){return t&&Do(e,ba(e),t)}(u,t)):function(t,e){return Do(t,ei(t),e)}(t,Gr(u,t))}else{if(!Ut[P])return o?t:{};u=function(t,e,r){var n=t.constructor;switch(e){case w:return po(t);case f:case s:return new n(+t);case F:return function(t,e){var r=e?po(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case j:case A:case x:case S:case O:case k:case"[object Uint8ClampedArray]":case C:case N:return vo(t,r);case h:return new n;case y:case _:return new n(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case D:return new n;case b:return o=t,jr?ht(jr.call(o)):{}}var o}(t,P,a)}}i||(i=new Br);var R=i.get(t);if(R)return R;i.set(t,u),Ju(t)?t.forEach((function(n){u.add(Jr(n,e,r,n,t,i))})):Gu(t)&&t.forEach((function(n,o){u.set(o,Jr(n,e,r,o,t,i))}));var B=E?void 0:(p?l?Ho:Vo:l?ba:_a)(t);return ae(B||t,(function(n,o){B&&(n=t[o=n]),zr(u,o,Jr(n,e,r,o,t,i))})),u}function Zr(t,e,r){var n=r.length;if(null==t)return!n;for(t=ht(t);n--;){var o=r[n],i=e[o],u=t[o];if(void 0===u&&!(o in t)||!i(u))return!1}return!0}function Kr(t,e,r){if("function"!=typeof t)throw new mt(i);return _i((function(){t.apply(void 0,r)}),e)}function Yr(t,e,r,n){var o=-1,i=se,u=!0,a=t.length,c=[],l=e.length;if(!a)return c;r&&(e=ve(e,ke(r))),n?(i=pe,u=!1):e.length>=200&&(i=Ne,u=!1,e=new Rr(e));t:for(;++o-1},Pr.prototype.set=function(t,e){var r=this.__data__,n=$r(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Ir.prototype.clear=function(){this.size=0,this.__data__={hash:new Nr,map:new(pr||Pr),string:new Nr}},Ir.prototype.delete=function(t){var e=Yo(this,t).delete(t);return this.size-=e?1:0,e},Ir.prototype.get=function(t){return Yo(this,t).get(t)},Ir.prototype.has=function(t){return Yo(this,t).has(t)},Ir.prototype.set=function(t,e){var r=Yo(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},Rr.prototype.add=Rr.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Rr.prototype.has=function(t){return this.__data__.has(t)},Br.prototype.clear=function(){this.__data__=new Pr,this.size=0},Br.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Br.prototype.get=function(t){return this.__data__.get(t)},Br.prototype.has=function(t){return this.__data__.has(t)},Br.prototype.set=function(t,e){var r=this.__data__;if(r instanceof Pr){var n=r.__data__;if(!pr||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Ir(n)}return r.set(t,e),this.size=r.size,this};var Xr=Eo(cn),tn=Eo(ln,!0);function en(t,e){var r=!0;return Xr(t,(function(t,n,o){return r=!!e(t,n,o)})),r}function rn(t,e,r){for(var n=-1,o=t.length;++n0&&r(a)?e>1?on(a,e-1,r,n,o):de(o,a):n||(o[o.length]=a)}return o}var un=wo(),an=wo(!0);function cn(t,e){return t&&un(t,e,_a)}function ln(t,e){return t&&an(t,e,_a)}function fn(t,e){return fe(e,(function(e){return Wu(t[e])}))}function sn(t,e){for(var r=0,n=(e=ao(e,t)).length;null!=t&&re}function hn(t,e){return null!=t&&Ft.call(t,e)}function yn(t,e){return null!=t&&e in ht(t)}function gn(t,e,r){for(var o=r?pe:se,i=t[0].length,u=t.length,a=u,c=n(u),l=1/0,f=[];a--;){var s=t[a];a&&e&&(s=ve(s,ke(e))),l=ur(s.length,l),c[a]=!r&&(e||i>=120&&s.length>=120)?new Rr(a&&s):void 0}s=t[0];var p=-1,v=c[0];t:for(;++p=a)return c;var l=r[n];return c*("desc"==l?-1:1)}}return t.index-e.index}(t,e,r)}))}function Pn(t,e,r){for(var n=-1,o=e.length,i={};++n-1;)a!==t&&Jt.call(a,c,1),Jt.call(t,c,1);return t}function Rn(t,e){for(var r=t?e.length:0,n=r-1;r--;){var o=e[r];if(r==n||o!==i){var i=o;ai(o)?Jt.call(t,o,1):Xn(t,o)}}return t}function Bn(t,e){return t+Xe(lr()*(e-t+1))}function Ln(t,e){var r="";if(!t||e<1||e>9007199254740991)return r;do{e%2&&(r+=t),(e=Xe(e/2))&&(t+=t)}while(e);return r}function Tn(t,e){return bi(hi(t,e,Va),t+"")}function Mn(t){return Tr(Oa(t))}function Wn(t,e){var r=Oa(t);return Fi(r,Qr(e,0,r.length))}function Un(t,e,r,n){if(!$u(t))return t;for(var o=-1,i=(e=ao(e,t)).length,u=i-1,a=t;null!=a&&++oi?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var u=n(i);++o>>1,u=t[i];null!==u&&!Ku(u)&&(r?u<=e:u=200){var l=e?null:To(t);if(l)return $e(l);u=!1,o=Ne,c=new Rr}else c=e?[]:a;t:for(;++n=n?t:Gn(t,e,r)}var fo=Je||function(t){return Ht.clearTimeout(t)};function so(t,e){if(e)return t.slice();var r=t.length,n=zt?zt(r):new t.constructor(r);return t.copy(n),n}function po(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function vo(t,e){var r=e?po(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function ho(t,e){if(t!==e){var r=void 0!==t,n=null===t,o=t==t,i=Ku(t),u=void 0!==e,a=null===e,c=e==e,l=Ku(e);if(!a&&!l&&!i&&t>e||i&&u&&c&&!a&&!l||n&&u&&c||!r&&c||!o)return 1;if(!n&&!i&&!l&&t1?r[o-1]:void 0,u=o>2?r[2]:void 0;for(i=t.length>3&&"function"==typeof i?(o--,i):void 0,u&&ci(r[0],r[1],u)&&(i=o<3?void 0:i,o=1),e=ht(e);++n-1?o[i?e[u]:u]:void 0}}function So(t){return Go((function(e){var r=e.length,n=r,o=kr.prototype.thru;for(t&&e.reverse();n--;){var u=e[n];if("function"!=typeof u)throw new mt(i);if(o&&!a&&"wrapper"==Jo(u))var a=new kr([],!0)}for(n=a?n:r;++n1&&D.reverse(),s&&la))return!1;var l=i.get(t);if(l&&i.get(e))return l==e;var f=-1,s=!0,p=2&r?new Rr:void 0;for(i.set(t,e),i.set(e,t);++f-1&&t%1==0&&t1?"& ":"")+e[n],e=e.join(r>2?", ":" "),t.replace(K,"{\n/* [wrapped with "+e+"] */\n")}(n,function(t,e){return ae(a,(function(r){var n="_."+r[0];e&r[1]&&!se(t,n)&&t.push(n)})),t.sort()}(function(t){var e=t.match(Y);return e?e[1].split(X):[]}(n),r)))}function wi(t){var e=0,r=0;return function(){var n=ar(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function Fi(t,e){var r=-1,n=t.length,o=n-1;for(e=void 0===e?n:e;++r1?t[e-1]:void 0;return r="function"==typeof r?(t.pop(),r):void 0,Qi(t,r)}));function eu(t){var e=xr(t);return e.__chain__=!0,e}function ru(t,e){return e(t)}var nu=Go((function(t){var e=t.length,r=e?t[0]:0,n=this.__wrapped__,o=function(e){return Hr(e,t)};return!(e>1||this.__actions__.length)&&n instanceof Cr&&ai(r)?((n=n.slice(r,+r+(e?1:0))).__actions__.push({func:ru,args:[o],thisArg:void 0}),new kr(n,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(o)}));var ou=_o((function(t,e,r){Ft.call(t,r)?++t[r]:Vr(t,r,1)}));var iu=xo(Ni),uu=xo(Pi);function au(t,e){return(Pu(t)?ae:Xr)(t,Ko(e,3))}function cu(t,e){return(Pu(t)?ce:tn)(t,Ko(e,3))}var lu=_o((function(t,e,r){Ft.call(t,r)?t[r].push(e):Vr(t,r,[e])}));var fu=Tn((function(t,e,r){var o=-1,i="function"==typeof e,u=Ru(t)?n(t.length):[];return Xr(t,(function(t){u[++o]=i?ie(e,t,r):mn(t,e,r)})),u})),su=_o((function(t,e,r){Vr(t,r,e)}));function pu(t,e){return(Pu(t)?ve:xn)(t,Ko(e,3))}var vu=_o((function(t,e,r){t[r?0:1].push(e)}),(function(){return[[],[]]}));var du=Tn((function(t,e){if(null==t)return[];var r=e.length;return r>1&&ci(t,e[0],e[1])?e=[]:r>2&&ci(e[0],e[1],e[2])&&(e=[e[0]]),Nn(t,on(e,1),[])})),hu=Ze||function(){return Ht.Date.now()};function yu(t,e,r){return e=r?void 0:e,Wo(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function gu(t,e){var r;if("function"!=typeof e)throw new mt(i);return t=na(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=void 0),r}}var mu=Tn((function(t,e,r){var n=1;if(r.length){var o=ze(r,Zo(mu));n|=32}return Wo(t,n,e,r,o)})),Du=Tn((function(t,e,r){var n=3;if(r.length){var o=ze(r,Zo(Du));n|=32}return Wo(e,n,t,r,o)}));function _u(t,e,r){var n,o,u,a,c,l,f=0,s=!1,p=!1,v=!0;if("function"!=typeof t)throw new mt(i);function d(e){var r=n,i=o;return n=o=void 0,f=e,a=t.apply(i,r)}function h(t){return f=t,c=_i(g,e),s?d(t):a}function y(t){var r=t-l;return void 0===l||r>=e||r<0||p&&t-f>=u}function g(){var t=hu();if(y(t))return m(t);c=_i(g,function(t){var r=e-(t-l);return p?ur(r,u-(t-f)):r}(t))}function m(t){return c=void 0,v&&n?d(t):(n=o=void 0,a)}function D(){var t=hu(),r=y(t);if(n=arguments,o=this,l=t,r){if(void 0===c)return h(l);if(p)return fo(c),c=_i(g,e),d(l)}return void 0===c&&(c=_i(g,e)),a}return e=ia(e)||0,$u(r)&&(s=!!r.leading,u=(p="maxWait"in r)?ir(ia(r.maxWait)||0,e):u,v="trailing"in r?!!r.trailing:v),D.cancel=function(){void 0!==c&&fo(c),f=0,n=l=o=c=void 0},D.flush=function(){return void 0===c?a:m(hu())},D}var bu=Tn((function(t,e){return Kr(t,1,e)})),Eu=Tn((function(t,e,r){return Kr(t,ia(e)||0,r)}));function wu(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new mt(i);var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var u=t.apply(this,n);return r.cache=i.set(o,u)||i,u};return r.cache=new(wu.Cache||Ir),r}function Fu(t){if("function"!=typeof t)throw new mt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}wu.Cache=Ir;var ju=co((function(t,e){var r=(e=1==e.length&&Pu(e[0])?ve(e[0],ke(Ko())):ve(on(e,1),ke(Ko()))).length;return Tn((function(n){for(var o=-1,i=ur(n.length,r);++o=e})),Nu=Dn(function(){return arguments}())?Dn:function(t){return qu(t)&&Ft.call(t,"callee")&&!Qt.call(t,"callee")},Pu=n.isArray,Iu=Xt?ke(Xt):function(t){return qu(t)&&vn(t)==w};function Ru(t){return null!=t&&zu(t.length)&&!Wu(t)}function Bu(t){return qu(t)&&Ru(t)}var Lu=er||ic,Tu=te?ke(te):function(t){return qu(t)&&vn(t)==s};function Mu(t){if(!qu(t))return!1;var e=vn(t);return e==p||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Hu(t)}function Wu(t){if(!$u(t))return!1;var e=vn(t);return e==v||e==d||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Uu(t){return"number"==typeof t&&t==na(t)}function zu(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function $u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function qu(t){return null!=t&&"object"==typeof t}var Gu=ee?ke(ee):function(t){return qu(t)&&ni(t)==h};function Vu(t){return"number"==typeof t||qu(t)&&vn(t)==y}function Hu(t){if(!qu(t)||vn(t)!=g)return!1;var e=Gt(t);if(null===e)return!0;var r=Ft.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&wt.call(r)==St}var Qu=re?ke(re):function(t){return qu(t)&&vn(t)==m};var Ju=ne?ke(ne):function(t){return qu(t)&&ni(t)==D};function Zu(t){return"string"==typeof t||!Pu(t)&&qu(t)&&vn(t)==_}function Ku(t){return"symbol"==typeof t||qu(t)&&vn(t)==b}var Yu=oe?ke(oe):function(t){return qu(t)&&zu(t.length)&&!!Wt[vn(t)]};var Xu=Ro(An),ta=Ro((function(t,e){return t<=e}));function ea(t){if(!t)return[];if(Ru(t))return Zu(t)?Ve(t):mo(t);if(Yt&&t[Yt])return function(t){for(var e,r=[];!(e=t.next()).done;)r.push(e.value);return r}(t[Yt]());var e=ni(t);return(e==h?We:e==D?$e:Oa)(t)}function ra(t){return t?(t=ia(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function na(t){var e=ra(t),r=e%1;return e==e?r?e-r:e:0}function oa(t){return t?Qr(na(t),0,4294967295):0}function ia(t){if("number"==typeof t)return t;if(Ku(t))return NaN;if($u(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=$u(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Q,"");var r=it.test(t);return r||at.test(t)?qt(t.slice(2),r?2:8):ot.test(t)?NaN:+t}function ua(t){return Do(t,ba(t))}function aa(t){return null==t?"":Kn(t)}var ca=bo((function(t,e){if(pi(e)||Ru(e))Do(e,_a(e),t);else for(var r in e)Ft.call(e,r)&&zr(t,r,e[r])})),la=bo((function(t,e){Do(e,ba(e),t)})),fa=bo((function(t,e,r,n){Do(e,ba(e),t,n)})),sa=bo((function(t,e,r,n){Do(e,_a(e),t,n)})),pa=Go(Hr);var va=Tn((function(t,e){t=ht(t);var r=-1,n=e.length,o=n>2?e[2]:void 0;for(o&&ci(e[0],e[1],o)&&(n=1);++r1),e})),Do(t,Ho(t),r),n&&(r=Jr(r,7,$o));for(var o=e.length;o--;)Xn(r,e[o]);return r}));var ja=Go((function(t,e){return null==t?{}:function(t,e){return Pn(t,e,(function(e,r){return ya(t,r)}))}(t,e)}));function Aa(t,e){if(null==t)return{};var r=ve(Ho(t),(function(t){return[t]}));return e=Ko(e),Pn(t,r,(function(t,r){return e(t,r[0])}))}var xa=Mo(_a),Sa=Mo(ba);function Oa(t){return null==t?[]:Ce(t,_a(t))}var ka=jo((function(t,e,r){return e=e.toLowerCase(),t+(r?Ca(e):e)}));function Ca(t){return Ma(aa(t).toLowerCase())}function Na(t){return(t=aa(t))&&t.replace(lt,Be).replace(Pt,"")}var Pa=jo((function(t,e,r){return t+(r?"-":"")+e.toLowerCase()})),Ia=jo((function(t,e,r){return t+(r?" ":"")+e.toLowerCase()})),Ra=Fo("toLowerCase");var Ba=jo((function(t,e,r){return t+(r?"_":"")+e.toLowerCase()}));var La=jo((function(t,e,r){return t+(r?" ":"")+Ma(e)}));var Ta=jo((function(t,e,r){return t+(r?" ":"")+e.toUpperCase()})),Ma=Fo("toUpperCase");function Wa(t,e,r){return t=aa(t),void 0===(e=r?void 0:e)?function(t){return Lt.test(t)}(t)?function(t){return t.match(Rt)||[]}(t):function(t){return t.match(tt)||[]}(t):t.match(e)||[]}var Ua=Tn((function(t,e){try{return ie(t,void 0,e)}catch(r){return Mu(r)?r:new pt(r)}})),za=Go((function(t,e){return ae(e,(function(e){e=Ai(e),Vr(t,e,mu(t[e],t))})),t}));function $a(t){return function(){return t}}var qa=So(),Ga=So(!0);function Va(t){return t}function Ha(t){return wn("function"==typeof t?t:Jr(t,1))}var Qa=Tn((function(t,e){return function(r){return mn(r,t,e)}})),Ja=Tn((function(t,e){return function(r){return mn(t,r,e)}}));function Za(t,e,r){var n=_a(e),o=fn(e,n);null!=r||$u(e)&&(o.length||!n.length)||(r=e,e=t,t=this,o=fn(e,_a(e)));var i=!($u(r)&&"chain"in r&&!r.chain),u=Wu(t);return ae(o,(function(r){var n=e[r];t[r]=n,u&&(t.prototype[r]=function(){var e=this.__chain__;if(i||e){var r=t(this.__wrapped__),o=r.__actions__=mo(this.__actions__);return o.push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,de([this.value()],arguments))})})),t}function Ka(){}var Ya=No(ve),Xa=No(le),tc=No(ge);function ec(t){return li(t)?je(Ai(t)):function(t){return function(e){return sn(e,t)}}(t)}var rc=Io(),nc=Io(!0);function oc(){return[]}function ic(){return!1}var uc=Co((function(t,e){return t+e}),0),ac=Lo("ceil"),cc=Co((function(t,e){return t/e}),1),lc=Lo("floor");var fc,sc=Co((function(t,e){return t*e}),1),pc=Lo("round"),vc=Co((function(t,e){return t-e}),0);return xr.after=function(t,e){if("function"!=typeof e)throw new mt(i);return t=na(t),function(){if(--t<1)return e.apply(this,arguments)}},xr.ary=yu,xr.assign=ca,xr.assignIn=la,xr.assignInWith=fa,xr.assignWith=sa,xr.at=pa,xr.before=gu,xr.bind=mu,xr.bindAll=za,xr.bindKey=Du,xr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Pu(t)?t:[t]},xr.chain=eu,xr.chunk=function(t,e,r){e=(r?ci(t,e,r):void 0===e)?1:ir(na(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var i=0,u=0,a=n(Ye(o/e));io?0:o+r),(n=void 0===n||n>o?o:na(n))<0&&(n+=o),n=r>n?0:oa(n);r>>0)?(t=aa(t))&&("string"==typeof e||null!=e&&!Qu(e))&&!(e=Kn(e))&&Me(t)?lo(Ve(t),0,r):t.split(e,r):[]},xr.spread=function(t,e){if("function"!=typeof t)throw new mt(i);return e=null==e?0:ir(na(e),0),Tn((function(r){var n=r[e],o=lo(r,0,e);return n&&de(o,n),ie(t,this,o)}))},xr.tail=function(t){var e=null==t?0:t.length;return e?Gn(t,1,e):[]},xr.take=function(t,e,r){return t&&t.length?Gn(t,0,(e=r||void 0===e?1:na(e))<0?0:e):[]},xr.takeRight=function(t,e,r){var n=null==t?0:t.length;return n?Gn(t,(e=n-(e=r||void 0===e?1:na(e)))<0?0:e,n):[]},xr.takeRightWhile=function(t,e){return t&&t.length?eo(t,Ko(e,3),!1,!0):[]},xr.takeWhile=function(t,e){return t&&t.length?eo(t,Ko(e,3)):[]},xr.tap=function(t,e){return e(t),t},xr.throttle=function(t,e,r){var n=!0,o=!0;if("function"!=typeof t)throw new mt(i);return $u(r)&&(n="leading"in r?!!r.leading:n,o="trailing"in r?!!r.trailing:o),_u(t,e,{leading:n,maxWait:e,trailing:o})},xr.thru=ru,xr.toArray=ea,xr.toPairs=xa,xr.toPairsIn=Sa,xr.toPath=function(t){return Pu(t)?ve(t,Ai):Ku(t)?[t]:mo(ji(aa(t)))},xr.toPlainObject=ua,xr.transform=function(t,e,r){var n=Pu(t),o=n||Lu(t)||Yu(t);if(e=Ko(e,4),null==r){var i=t&&t.constructor;r=o?n?new i:[]:$u(t)&&Wu(i)?Sr(Gt(t)):{}}return(o?ae:cn)(t,(function(t,n,o){return e(r,t,n,o)})),r},xr.unary=function(t){return yu(t,1)},xr.union=qi,xr.unionBy=Gi,xr.unionWith=Vi,xr.uniq=function(t){return t&&t.length?Yn(t):[]},xr.uniqBy=function(t,e){return t&&t.length?Yn(t,Ko(e,2)):[]},xr.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Yn(t,void 0,e):[]},xr.unset=function(t,e){return null==t||Xn(t,e)},xr.unzip=Hi,xr.unzipWith=Qi,xr.update=function(t,e,r){return null==t?t:to(t,e,uo(r))},xr.updateWith=function(t,e,r,n){return n="function"==typeof n?n:void 0,null==t?t:to(t,e,uo(r),n)},xr.values=Oa,xr.valuesIn=function(t){return null==t?[]:Ce(t,ba(t))},xr.without=Ji,xr.words=Wa,xr.wrap=function(t,e){return Au(uo(e),t)},xr.xor=Zi,xr.xorBy=Ki,xr.xorWith=Yi,xr.zip=Xi,xr.zipObject=function(t,e){return oo(t||[],e||[],zr)},xr.zipObjectDeep=function(t,e){return oo(t||[],e||[],Un)},xr.zipWith=tu,xr.entries=xa,xr.entriesIn=Sa,xr.extend=la,xr.extendWith=fa,Za(xr,xr),xr.add=uc,xr.attempt=Ua,xr.camelCase=ka,xr.capitalize=Ca,xr.ceil=ac,xr.clamp=function(t,e,r){return void 0===r&&(r=e,e=void 0),void 0!==r&&(r=(r=ia(r))==r?r:0),void 0!==e&&(e=(e=ia(e))==e?e:0),Qr(ia(t),e,r)},xr.clone=function(t){return Jr(t,4)},xr.cloneDeep=function(t){return Jr(t,5)},xr.cloneDeepWith=function(t,e){return Jr(t,5,e="function"==typeof e?e:void 0)},xr.cloneWith=function(t,e){return Jr(t,4,e="function"==typeof e?e:void 0)},xr.conformsTo=function(t,e){return null==e||Zr(t,e,_a(e))},xr.deburr=Na,xr.defaultTo=function(t,e){return null==t||t!=t?e:t},xr.divide=cc,xr.endsWith=function(t,e,r){t=aa(t),e=Kn(e);var n=t.length,o=r=void 0===r?n:Qr(na(r),0,n);return(r-=e.length)>=0&&t.slice(r,o)==e},xr.eq=Ou,xr.escape=function(t){return(t=aa(t))&&M.test(t)?t.replace(L,Le):t},xr.escapeRegExp=function(t){return(t=aa(t))&&H.test(t)?t.replace(V,"\\$&"):t},xr.every=function(t,e,r){var n=Pu(t)?le:en;return r&&ci(t,e,r)&&(e=void 0),n(t,Ko(e,3))},xr.find=iu,xr.findIndex=Ni,xr.findKey=function(t,e){return De(t,Ko(e,3),cn)},xr.findLast=uu,xr.findLastIndex=Pi,xr.findLastKey=function(t,e){return De(t,Ko(e,3),ln)},xr.floor=lc,xr.forEach=au,xr.forEachRight=cu,xr.forIn=function(t,e){return null==t?t:un(t,Ko(e,3),ba)},xr.forInRight=function(t,e){return null==t?t:an(t,Ko(e,3),ba)},xr.forOwn=function(t,e){return t&&cn(t,Ko(e,3))},xr.forOwnRight=function(t,e){return t&&ln(t,Ko(e,3))},xr.get=ha,xr.gt=ku,xr.gte=Cu,xr.has=function(t,e){return null!=t&&oi(t,e,hn)},xr.hasIn=ya,xr.head=Ri,xr.identity=Va,xr.includes=function(t,e,r,n){t=Ru(t)?t:Oa(t),r=r&&!n?na(r):0;var o=t.length;return r<0&&(r=ir(o+r,0)),Zu(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&be(t,e,r)>-1},xr.indexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=null==r?0:na(r);return o<0&&(o=ir(n+o,0)),be(t,e,o)},xr.inRange=function(t,e,r){return e=ra(e),void 0===r?(r=e,e=0):r=ra(r),function(t,e,r){return t>=ur(e,r)&&t=-9007199254740991&&t<=9007199254740991},xr.isSet=Ju,xr.isString=Zu,xr.isSymbol=Ku,xr.isTypedArray=Yu,xr.isUndefined=function(t){return void 0===t},xr.isWeakMap=function(t){return qu(t)&&ni(t)==E},xr.isWeakSet=function(t){return qu(t)&&"[object WeakSet]"==vn(t)},xr.join=function(t,e){return null==t?"":nr.call(t,e)},xr.kebabCase=Pa,xr.last=Mi,xr.lastIndexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n;return void 0!==r&&(o=(o=na(r))<0?ir(n+o,0):ur(o,n-1)),e==e?function(t,e,r){for(var n=r+1;n--;)if(t[n]===e)return n;return n}(t,e,o):_e(t,we,o,!0)},xr.lowerCase=Ia,xr.lowerFirst=Ra,xr.lt=Xu,xr.lte=ta,xr.max=function(t){return t&&t.length?rn(t,Va,dn):void 0},xr.maxBy=function(t,e){return t&&t.length?rn(t,Ko(e,2),dn):void 0},xr.mean=function(t){return Fe(t,Va)},xr.meanBy=function(t,e){return Fe(t,Ko(e,2))},xr.min=function(t){return t&&t.length?rn(t,Va,An):void 0},xr.minBy=function(t,e){return t&&t.length?rn(t,Ko(e,2),An):void 0},xr.stubArray=oc,xr.stubFalse=ic,xr.stubObject=function(){return{}},xr.stubString=function(){return""},xr.stubTrue=function(){return!0},xr.multiply=sc,xr.nth=function(t,e){return t&&t.length?Cn(t,na(e)):void 0},xr.noConflict=function(){return Ht._===this&&(Ht._=Ot),this},xr.noop=Ka,xr.now=hu,xr.pad=function(t,e,r){t=aa(t);var n=(e=na(e))?Ge(t):0;if(!e||n>=e)return t;var o=(e-n)/2;return Po(Xe(o),r)+t+Po(Ye(o),r)},xr.padEnd=function(t,e,r){t=aa(t);var n=(e=na(e))?Ge(t):0;return e&&ne){var n=t;t=e,e=n}if(r||t%1||e%1){var o=lr();return ur(t+o*(e-t+$t("1e-"+((o+"").length-1))),e)}return Bn(t,e)},xr.reduce=function(t,e,r){var n=Pu(t)?he:xe,o=arguments.length<3;return n(t,Ko(e,4),r,o,Xr)},xr.reduceRight=function(t,e,r){var n=Pu(t)?ye:xe,o=arguments.length<3;return n(t,Ko(e,4),r,o,tn)},xr.repeat=function(t,e,r){return e=(r?ci(t,e,r):void 0===e)?1:na(e),Ln(aa(t),e)},xr.replace=function(){var t=arguments,e=aa(t[0]);return t.length<3?e:e.replace(t[1],t[2])},xr.result=function(t,e,r){var n=-1,o=(e=ao(e,t)).length;for(o||(o=1,t=void 0);++n9007199254740991)return[];var r=4294967295,n=ur(t,4294967295);t-=4294967295;for(var o=Oe(n,e=Ko(e));++r=i)return t;var a=r-Ge(n);if(a<1)return n;var c=u?lo(u,0,a).join(""):t.slice(0,a);if(void 0===o)return c+n;if(u&&(a+=c.length-a),Qu(o)){if(t.slice(a).search(o)){var l,f=c;for(o.global||(o=yt(o.source,aa(nt.exec(o))+"g")),o.lastIndex=0;l=o.exec(f);)var s=l.index;c=c.slice(0,void 0===s?a:s)}}else if(t.indexOf(Kn(o),a)!=a){var p=c.lastIndexOf(o);p>-1&&(c=c.slice(0,p))}return c+n},xr.unescape=function(t){return(t=aa(t))&&T.test(t)?t.replace(B,He):t},xr.uniqueId=function(t){var e=++jt;return aa(t)+e},xr.upperCase=Ta,xr.upperFirst=Ma,xr.each=au,xr.eachRight=cu,xr.first=Ri,Za(xr,(fc={},cn(xr,(function(t,e){Ft.call(xr.prototype,e)||(fc[e]=t)})),fc),{chain:!1}),xr.VERSION="4.17.15",ae(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){xr[t].placeholder=xr})),ae(["drop","take"],(function(t,e){Cr.prototype[t]=function(r){r=void 0===r?1:ir(na(r),0);var n=this.__filtered__&&!e?new Cr(this):this.clone();return n.__filtered__?n.__takeCount__=ur(r,n.__takeCount__):n.__views__.push({size:ur(r,4294967295),type:t+(n.__dir__<0?"Right":"")}),n},Cr.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),ae(["filter","map","takeWhile"],(function(t,e){var r=e+1,n=1==r||3==r;Cr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Ko(t,3),type:r}),e.__filtered__=e.__filtered__||n,e}})),ae(["head","last"],(function(t,e){var r="take"+(e?"Right":"");Cr.prototype[t]=function(){return this[r](1).value()[0]}})),ae(["initial","tail"],(function(t,e){var r="drop"+(e?"":"Right");Cr.prototype[t]=function(){return this.__filtered__?new Cr(this):this[r](1)}})),Cr.prototype.compact=function(){return this.filter(Va)},Cr.prototype.find=function(t){return this.filter(t).head()},Cr.prototype.findLast=function(t){return this.reverse().find(t)},Cr.prototype.invokeMap=Tn((function(t,e){return"function"==typeof t?new Cr(this):this.map((function(r){return mn(r,t,e)}))})),Cr.prototype.reject=function(t){return this.filter(Fu(Ko(t)))},Cr.prototype.slice=function(t,e){t=na(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Cr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),void 0!==e&&(r=(e=na(e))<0?r.dropRight(-e):r.take(e-t)),r)},Cr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Cr.prototype.toArray=function(){return this.take(4294967295)},cn(Cr.prototype,(function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),o=xr[n?"take"+("last"==e?"Right":""):e],i=n||/^find/.test(e);o&&(xr.prototype[e]=function(){var e=this.__wrapped__,u=n?[1]:arguments,a=e instanceof Cr,c=u[0],l=a||Pu(e),f=function(t){var e=o.apply(xr,de([t],u));return n&&s?e[0]:e};l&&r&&"function"==typeof c&&1!=c.length&&(a=l=!1);var s=this.__chain__,p=!!this.__actions__.length,v=i&&!s,d=a&&!p;if(!i&&l){e=d?e:new Cr(this);var h=t.apply(e,u);return h.__actions__.push({func:ru,args:[f],thisArg:void 0}),new kr(h,s)}return v&&d?t.apply(this,u):(h=this.thru(f),v?n?h.value()[0]:h.value():h)})})),ae(["pop","push","shift","sort","splice","unshift"],(function(t){var e=Dt[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",n=/^(?:pop|shift)$/.test(t);xr.prototype[t]=function(){var t=arguments;if(n&&!this.__chain__){var o=this.value();return e.apply(Pu(o)?o:[],t)}return this[r]((function(r){return e.apply(Pu(r)?r:[],t)}))}})),cn(Cr.prototype,(function(t,e){var r=xr[e];if(r){var n=r.name+"";Ft.call(mr,n)||(mr[n]=[]),mr[n].push({name:e,func:r})}})),mr[Oo(void 0,2).name]=[{name:"wrapper",func:void 0}],Cr.prototype.clone=function(){var t=new Cr(this.__wrapped__);return t.__actions__=mo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=mo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=mo(this.__views__),t},Cr.prototype.reverse=function(){if(this.__filtered__){var t=new Cr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Cr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,r=Pu(t),n=e<0,o=r?t.length:0,i=function(t,e,r){var n=-1,o=r.length;for(;++n=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},xr.prototype.plant=function(t){for(var e,r=this;r instanceof Or;){var n=Si(r);n.__index__=0,n.__values__=void 0,e?o.__wrapped__=n:e=n;var o=n;r=r.__wrapped__}return o.__wrapped__=t,e},xr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Cr){var e=t;return this.__actions__.length&&(e=new Cr(this)),(e=e.reverse()).__actions__.push({func:ru,args:[$i],thisArg:void 0}),new kr(e,this.__chain__)}return this.thru($i)},xr.prototype.toJSON=xr.prototype.valueOf=xr.prototype.value=function(){return ro(this.__wrapped__,this.__actions__)},xr.prototype.first=xr.prototype.head,Yt&&(xr.prototype[Yt]=function(){return this}),xr}();Ht._=Qe,void 0===(o=function(){return Qe}.call(e,r,e,n))||(n.exports=o)}).call(this)}).call(this,r(76),r(448)(t))},446:function(t,e,r){"use strict";var n=r(0),o=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});e.a=o},447:function(t,e,r){"use strict";r.d(e,"a",(function(){return i}));r(77),r(465),r(431),r(78);var n=r(467),o=r.n(n);function i(t,e){var r=new o.a;return t.map((function(t){var n=t;return"string"==typeof t&&(n={label:t,permalink:"/blog/tags/"+r.slug(t)}),function(t,e){var r=t.label.split(": ",2),n=r[0],o=r[1],i="primary";switch(e){case"blog":case"guides":i=function(t){switch(t){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(n)}return{category:n,count:t.count,label:t.label,permalink:t.permalink,style:i,value:o}}(n,e)}))}},448:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},457:function(t,e,r){var n=r(30),o=r(54),i=r(27),u=r(26),a=r(458);t.exports=function(t,e){var r=1==t,c=2==t,l=3==t,f=4==t,s=6==t,p=5==t||s,v=e||a;return function(e,a,d){for(var h,y,g=i(e),m=o(g),D=n(a,d,3),_=u(m.length),b=0,E=r?v(e,_):c?v(e,0):void 0;_>b;b++)if((p||b in m)&&(y=D(h=m[b],b,g),t))if(r)E[b]=y;else if(y)switch(t){case 3:return!0;case 5:return h;case 6:return b;case 2:E.push(h)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(t,e,r){var n=r(459);t.exports=function(t,e){return new(n(t))(e)}},459:function(t,e,r){var n=r(13),o=r(460),i=r(2)("species");t.exports=function(t){var e;return o(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!o(e.prototype)||(e=void 0),n(e)&&null===(e=e[i])&&(e=void 0)),void 0===e?Array:e}},460:function(t,e,r){var n=r(23);t.exports=Array.isArray||function(t){return"Array"==n(t)}},461:function(t,e,r){"use strict";var n=SyntaxError,o=Function,i=TypeError,u=function(t){try{return o('"use strict"; return ('+t+").constructor;")()}catch(e){}},a=Object.getOwnPropertyDescriptor;if(a)try{a({},"")}catch(x){a=null}var c=function(){throw new i},l=a?function(){try{return c}catch(t){try{return a(arguments,"callee").get}catch(e){return c}}}():c,f=r(499)(),s=Object.getPrototypeOf||function(t){return t.__proto__},p={},v="undefined"==typeof Uint8Array?void 0:s(Uint8Array),d={"%AggregateError%":"undefined"==typeof AggregateError?void 0:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayIteratorPrototype%":f?s([][Symbol.iterator]()):void 0,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"%BigInt%":"undefined"==typeof BigInt?void 0:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?void 0:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry,"%Function%":o,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?s(s([][Symbol.iterator]())):void 0,"%JSON%":"object"==typeof JSON?JSON:void 0,"%Map%":"undefined"==typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?s((new Map)[Symbol.iterator]()):void 0,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?void 0:Promise,"%Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?s((new Set)[Symbol.iterator]()):void 0,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?s(""[Symbol.iterator]()):void 0,"%Symbol%":f?Symbol:void 0,"%SyntaxError%":n,"%ThrowTypeError%":l,"%TypedArray%":v,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?void 0:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet},h={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(462),g=r(502),m=y.call(Function.call,Array.prototype.concat),D=y.call(Function.apply,Array.prototype.splice),_=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),E=y.call(Function.call,RegExp.prototype.exec),w=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,F=/\\(\\)?/g,j=function(t){var e=b(t,0,1),r=b(t,-1);if("%"===e&&"%"!==r)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new n("invalid intrinsic syntax, expected opening `%`");var o=[];return _(t,w,(function(t,e,r,n){o[o.length]=r?_(n,F,"$1"):e||t})),o},A=function(t,e){var r,o=t;if(g(h,o)&&(o="%"+(r=h[o])[0]+"%"),g(d,o)){var a=d[o];if(a===p&&(a=function t(e){var r;if("%AsyncFunction%"===e)r=u("async function () {}");else if("%GeneratorFunction%"===e)r=u("function* () {}");else if("%AsyncGeneratorFunction%"===e)r=u("async function* () {}");else if("%AsyncGenerator%"===e){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===e){var o=t("%AsyncGenerator%");o&&(r=s(o.prototype))}return d[e]=r,r}(o)),void 0===a&&!e)throw new i("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:r,name:o,value:a}}throw new n("intrinsic "+t+" does not exist!")};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new i('"allowMissing" argument must be a boolean');if(null===E(/^%?[^%]*%?$/,t))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=j(t),o=r.length>0?r[0]:"",u=A("%"+o+"%",e),c=u.name,l=u.value,f=!1,s=u.alias;s&&(o=s[0],D(r,m([0,1],s)));for(var p=1,v=!0;p=r.length){var w=a(l,h);l=(v=!!w)&&"get"in w&&!("originalValue"in w.get)?w.get:l[h]}else v=g(l,h),l=l[h];v&&!f&&(d[c]=l)}}return l}},462:function(t,e,r){"use strict";var n=r(501);t.exports=Function.prototype.bind||n},463:function(t,e,r){"use strict";var n=String.prototype.replace,o=/%20/g,i="RFC1738",u="RFC3986";t.exports={default:u,formatters:{RFC1738:function(t){return n.call(t,o,"+")},RFC3986:function(t){return String(t)}},RFC1738:i,RFC3986:u}},466:function(t,e,r){"use strict";var n=r(0),o=r.n(n),i=r(422),u=r(415),a=r.n(u);e.a=function(t){var e=t.count,r=t.label,n=t.permalink,u=t.style,c=t.value,l=t.valueOnly;return o.a.createElement(i.a,{to:n+"/",className:a()("badge","badge--rounded","badge--"+u)},l?c:r,e&&o.a.createElement(o.a.Fragment,null," (",e,")"))}},467:function(t,e,r){var n=r(468);t.exports=a;var o=Object.hasOwnProperty,i=/\s/g,u=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function a(){if(!(this instanceof a))return new a;this.reset()}function c(t,e){return"string"!=typeof t?"":(e||(t=t.toLowerCase()),t.trim().replace(u,"").replace(n(),"").replace(i,"-"))}a.prototype.slug=function(t,e){for(var r=c(t,!0===e),n=r;o.call(this.occurrences,r);)this.occurrences[n]++,r=n+"-"+this.occurrences[n];return this.occurrences[r]=0,r},a.prototype.reset=function(){this.occurrences=Object.create(null)},a.slug=c},468:function(t,e){t.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},470:function(t,e,r){"use strict";var n=r(463),o=Object.prototype.hasOwnProperty,i=Array.isArray,u=function(){for(var t=[],e=0;e<256;++e)t.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return t}(),a=function(t,e){for(var r=e&&e.plainObjects?Object.create(null):{},n=0;n1;){var e=t.pop(),r=e.obj[e.prop];if(i(r)){for(var n=[],o=0;o=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||i===n.RFC1738&&(40===f||41===f)?c+=a.charAt(l):f<128?c+=u[f]:f<2048?c+=u[192|f>>6]+u[128|63&f]:f<55296||f>=57344?c+=u[224|f>>12]+u[128|f>>6&63]+u[128|63&f]:(l+=1,f=65536+((1023&f)<<10|1023&a.charCodeAt(l)),c+=u[240|f>>18]+u[128|f>>12&63]+u[128|f>>6&63]+u[128|63&f])}return c},isBuffer:function(t){return!(!t||"object"!=typeof t)&&!!(t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer(t))},isRegExp:function(t){return"[object RegExp]"===Object.prototype.toString.call(t)},maybeMap:function(t,e){if(i(t)){for(var r=[],n=0;n0?j.join(",")||null:void 0}];else if(c(v))I=v;else{var B=Object.keys(j);I=y?B.sort(y):B}for(var L=u&&c(j)&&1===j.length?r+"[]":r,T=0;T0?b+_:""}},498:function(t,e,r){"use strict";var n=r(461),o=r(503),i=r(505),u=n("%TypeError%"),a=n("%WeakMap%",!0),c=n("%Map%",!0),l=o("WeakMap.prototype.get",!0),f=o("WeakMap.prototype.set",!0),s=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),v=o("Map.prototype.set",!0),d=o("Map.prototype.has",!0),h=function(t,e){for(var r,n=t;null!==(r=n.next);n=r)if(r.key===e)return n.next=r.next,r.next=t.next,t.next=r,r};t.exports=function(){var t,e,r,n={assert:function(t){if(!n.has(t))throw new u("Side channel does not contain "+i(t))},get:function(n){if(a&&n&&("object"==typeof n||"function"==typeof n)){if(t)return l(t,n)}else if(c){if(e)return p(e,n)}else if(r)return function(t,e){var r=h(t,e);return r&&r.value}(r,n)},has:function(n){if(a&&n&&("object"==typeof n||"function"==typeof n)){if(t)return s(t,n)}else if(c){if(e)return d(e,n)}else if(r)return function(t,e){return!!h(t,e)}(r,n);return!1},set:function(n,o){a&&n&&("object"==typeof n||"function"==typeof n)?(t||(t=new a),f(t,n,o)):c?(e||(e=new c),v(e,n,o)):(r||(r={key:{},next:null}),function(t,e,r){var n=h(t,e);n?n.value=r:t.next={key:e,next:t.next,value:r}}(r,n,o))}};return n}},499:function(t,e,r){"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=r(500);t.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},500:function(t,e,r){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},501:function(t,e,r){"use strict";var n="Function.prototype.bind called on incompatible ",o=Array.prototype.slice,i=Object.prototype.toString;t.exports=function(t){var e=this;if("function"!=typeof e||"[object Function]"!==i.call(e))throw new TypeError(n+e);for(var r,u=o.call(arguments,1),a=function(){if(this instanceof r){var n=e.apply(this,u.concat(o.call(arguments)));return Object(n)===n?n:this}return e.apply(t,u.concat(o.call(arguments)))},c=Math.max(0,e.length-u.length),l=[],f=0;f-1?o(r):r}},504:function(t,e,r){"use strict";var n=r(462),o=r(461),i=o("%Function.prototype.apply%"),u=o("%Function.prototype.call%"),a=o("%Reflect.apply%",!0)||n.call(u,i),c=o("%Object.getOwnPropertyDescriptor%",!0),l=o("%Object.defineProperty%",!0),f=o("%Math.max%");if(l)try{l({},"a",{value:1})}catch(p){l=null}t.exports=function(t){var e=a(n,u,arguments);if(c&&l){var r=c(e,"length");r.configurable&&l(e,"length",{value:1+f(0,t.length-(arguments.length-1))})}return e};var s=function(){return a(n,i,arguments)};l?l(t.exports,"apply",{value:s}):t.exports.apply=s},505:function(t,e,r){var n="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=n&&o&&"function"==typeof o.get?o.get:null,u=n&&Map.prototype.forEach,a="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&a?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,l=a&&c&&"function"==typeof c.get?c.get:null,f=a&&Set.prototype.forEach,s="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,v="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,h=Object.prototype.toString,y=Function.prototype.toString,g=String.prototype.match,m=String.prototype.slice,D=String.prototype.replace,_=String.prototype.toUpperCase,b=String.prototype.toLowerCase,E=RegExp.prototype.test,w=Array.prototype.concat,F=Array.prototype.join,j=Array.prototype.slice,A=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,S=Object.getOwnPropertySymbols,O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,k="function"==typeof Symbol&&"object"==typeof Symbol.iterator,C="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===k||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,P=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function I(t,e){if(t===1/0||t===-1/0||t!=t||t&&t>-1e3&&t<1e3||E.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var n=t<0?-A(-t):A(t);if(n!==t){var o=String(n),i=m.call(e,o.length+1);return D.call(o,r,"$&_")+"."+D.call(D.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return D.call(e,r,"$&_")}var R=r(506),B=R.custom,L=z(B)?B:null;function T(t,e,r){var n="double"===(r.quoteStyle||e)?'"':"'";return n+t+n}function M(t){return D.call(String(t),/"/g,""")}function W(t){return!("[object Array]"!==G(t)||C&&"object"==typeof t&&C in t)}function U(t){return!("[object RegExp]"!==G(t)||C&&"object"==typeof t&&C in t)}function z(t){if(k)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!O)return!1;try{return O.call(t),!0}catch(e){}return!1}t.exports=function t(e,r,n,o){var a=r||{};if(q(a,"quoteStyle")&&"single"!==a.quoteStyle&&"double"!==a.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(q(a,"maxStringLength")&&("number"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!q(a,"customInspect")||a.customInspect;if("boolean"!=typeof c&&"symbol"!==c)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(q(a,"indent")&&null!==a.indent&&"\t"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(q(a,"numericSeparator")&&"boolean"!=typeof a.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=a.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,r){if(e.length>r.maxStringLength){var n=e.length-r.maxStringLength,o="... "+n+" more character"+(n>1?"s":"");return t(m.call(e,0,r.maxStringLength),r)+o}return T(D.call(D.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,H),"single",r)}(e,a);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var _=String(e);return h?I(e,_):_}if("bigint"==typeof e){var E=String(e)+"n";return h?I(e,E):E}var A=void 0===a.depth?5:a.depth;if(void 0===n&&(n=0),n>=A&&A>0&&"object"==typeof e)return W(e)?"[Array]":"[Object]";var S=function(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=F.call(Array(t.indent+1)," ")}return{base:r,prev:F.call(Array(e+1),r)}}(a,n);if(void 0===o)o=[];else if(V(o,e)>=0)return"[Circular]";function B(e,r,i){if(r&&(o=j.call(o)).push(r),i){var u={depth:a.depth};return q(a,"quoteStyle")&&(u.quoteStyle=a.quoteStyle),t(e,u,n+1,o)}return t(e,a,n+1,o)}if("function"==typeof e&&!U(e)){var $=function(t){if(t.name)return t.name;var e=g.call(y.call(t),/^function\s*([\w$]+)/);if(e)return e[1];return null}(e),X=Y(e,B);return"[Function"+($?": "+$:" (anonymous)")+"]"+(X.length>0?" { "+F.call(X,", ")+" }":"")}if(z(e)){var tt=k?D.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):O.call(e);return"object"!=typeof e||k?tt:Q(tt)}if(function(t){if(!t||"object"!=typeof t)return!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement)return!0;return"string"==typeof t.nodeName&&"function"==typeof t.getAttribute}(e)){for(var et="<"+b.call(String(e.nodeName)),rt=e.attributes||[],nt=0;nt"}if(W(e)){if(0===e.length)return"[]";var ot=Y(e,B);return S&&!function(t){for(var e=0;e=0)return!1;return!0}(ot)?"["+K(ot,S)+"]":"[ "+F.call(ot,", ")+" ]"}if(function(t){return!("[object Error]"!==G(t)||C&&"object"==typeof t&&C in t)}(e)){var it=Y(e,B);return"cause"in Error.prototype||!("cause"in e)||N.call(e,"cause")?0===it.length?"["+String(e)+"]":"{ ["+String(e)+"] "+F.call(it,", ")+" }":"{ ["+String(e)+"] "+F.call(w.call("[cause]: "+B(e.cause),it),", ")+" }"}if("object"==typeof e&&c){if(L&&"function"==typeof e[L]&&R)return R(e,{depth:A-n});if("symbol"!==c&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!i||!t||"object"!=typeof t)return!1;try{i.call(t);try{l.call(t)}catch(et){return!0}return t instanceof Map}catch(e){}return!1}(e)){var ut=[];return u.call(e,(function(t,r){ut.push(B(r,e,!0)+" => "+B(t,e))})),Z("Map",i.call(e),ut,S)}if(function(t){if(!l||!t||"object"!=typeof t)return!1;try{l.call(t);try{i.call(t)}catch(e){return!0}return t instanceof Set}catch(r){}return!1}(e)){var at=[];return f.call(e,(function(t){at.push(B(t,e))})),Z("Set",l.call(e),at,S)}if(function(t){if(!s||!t||"object"!=typeof t)return!1;try{s.call(t,s);try{p.call(t,p)}catch(et){return!0}return t instanceof WeakMap}catch(e){}return!1}(e))return J("WeakMap");if(function(t){if(!p||!t||"object"!=typeof t)return!1;try{p.call(t,p);try{s.call(t,s)}catch(et){return!0}return t instanceof WeakSet}catch(e){}return!1}(e))return J("WeakSet");if(function(t){if(!v||!t||"object"!=typeof t)return!1;try{return v.call(t),!0}catch(e){}return!1}(e))return J("WeakRef");if(function(t){return!("[object Number]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(B(Number(e)));if(function(t){if(!t||"object"!=typeof t||!x)return!1;try{return x.call(t),!0}catch(e){}return!1}(e))return Q(B(x.call(e)));if(function(t){return!("[object Boolean]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(d.call(e));if(function(t){return!("[object String]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(B(String(e)));if(!function(t){return!("[object Date]"!==G(t)||C&&"object"==typeof t&&C in t)}(e)&&!U(e)){var ct=Y(e,B),lt=P?P(e)===Object.prototype:e instanceof Object||e.constructor===Object,ft=e instanceof Object?"":"null prototype",st=!lt&&C&&Object(e)===e&&C in e?m.call(G(e),8,-1):ft?"Object":"",pt=(lt||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(st||ft?"["+F.call(w.call([],st||[],ft||[]),": ")+"] ":"");return 0===ct.length?pt+"{}":S?pt+"{"+K(ct,S)+"}":pt+"{ "+F.call(ct,", ")+" }"}return String(e)};var $=Object.prototype.hasOwnProperty||function(t){return t in this};function q(t,e){return $.call(t,e)}function G(t){return h.call(t)}function V(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;r-1?t.split(","):t},l=function(t,e,r,n){if(t){var i=r.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,u=/(\[[^[\]]*])/g,a=r.depth>0&&/(\[[^[\]]*])/.exec(i),l=a?i.slice(0,a.index):i,f=[];if(l){if(!r.plainObjects&&o.call(Object.prototype,l)&&!r.allowPrototypes)return;f.push(l)}for(var s=0;r.depth>0&&null!==(a=u.exec(i))&&s=0;--i){var u,a=t[i];if("[]"===a&&r.parseArrays)u=[].concat(o);else{u=r.plainObjects?Object.create(null):{};var l="["===a.charAt(0)&&"]"===a.charAt(a.length-1)?a.slice(1,-1):a,f=parseInt(l,10);r.parseArrays||""!==l?!isNaN(f)&&a!==l&&String(f)===l&&f>=0&&r.parseArrays&&f<=r.arrayLimit?(u=[])[f]=o:"__proto__"!==l&&(u[l]=o):u={0:o}}o=u}return o}(f,e,r,n)}};t.exports=function(t,e){var r=function(t){if(!t)return u;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?u.charset:t.charset;return{allowDots:void 0===t.allowDots?u.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:u.allowPrototypes,allowSparse:"boolean"==typeof t.allowSparse?t.allowSparse:u.allowSparse,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:u.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:u.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:u.comma,decoder:"function"==typeof t.decoder?t.decoder:u.decoder,delimiter:"string"==typeof t.delimiter||n.isRegExp(t.delimiter)?t.delimiter:u.delimiter,depth:"number"==typeof t.depth||!1===t.depth?+t.depth:u.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:u.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:u.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:u.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:u.strictNullHandling}}(e);if(""===t||null==t)return r.plainObjects?Object.create(null):{};for(var f="string"==typeof t?function(t,e){var r,l={},f=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,s=e.parameterLimit===1/0?void 0:e.parameterLimit,p=f.split(e.delimiter,s),v=-1,d=e.charset;if(e.charsetSentinel)for(r=0;r-1&&(y=i(y)?[y]:y),o.call(l,h)?l[h]=n.combine(l[h],y):l[h]=y}return l}(t,r):t,s=r.plainObjects?Object.create(null):{},p=Object.keys(f),v=0;v1?arguments[1]:void 0)}}),r(74)("find")},434:function(t,e,r){"use strict";var n=r(8),o=r(478),i=r(55);r(56)("search",1,(function(t,e,r,u){return[function(r){var n=t(this),o=null==r?void 0:r[e];return void 0!==o?o.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=u(r,t,this);if(e.done)return e.value;var a=n(t),c=String(this),l=a.lastIndex;o(l,0)||(a.lastIndex=0);var f=i(a,c);return o(a.lastIndex,l)||(a.lastIndex=l),null===f?-1:f.index}]}))},437:function(t,e,r){"use strict";r(449);var n=r(0),o=r.n(n),i=r(450),u=r(435),a=r(1),c=(r(438),r(439),r(451),r(422)),l=r(452),f=r(432),s=r.n(f),p=r(453),v=r.n(p),d=r(428),h=r(415),y=r.n(h),g=r(135),m=r.n(g),D=function(){return o.a.createElement("span",{className:y()(m.a.toggle,m.a.moon)})},_=function(){return o.a.createElement("span",{className:y()(m.a.toggle,m.a.sun)})},b=function(t){var e=Object(d.a)().isClient;return o.a.createElement(v.a,Object(a.a)({disabled:!e,icons:{checked:o.a.createElement(D,null),unchecked:o.a.createElement(_,null)}},t))};function E(){var t=Object(d.a)().siteConfig,e=(void 0===t?{}:t).customFields.metadata.latest_post,r=Date.parse(e.date),n=new Date,o=Math.abs(n-r),i=Math.ceil(o/864e5),u=null;return"undefined"!=typeof window&&(u=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!u||u0&&o.a.createElement("div",{className:"row footer__links"},o.a.createElement("div",{className:"col col--5 footer__col"},o.a.createElement("div",{className:"margin-bottom--md"},o.a.createElement(s.a,{className:"navbar__logo",src:v,alt:"Qovery",width:"150",height:"auto"})),o.a.createElement("div",{className:"margin-bottom--md"},o.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),o.a.createElement("div",null,o.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},o.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},o.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},o.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",o.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},o.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(t,e){return o.a.createElement("div",{key:e,className:"col footer__col"},null!=t.title?o.a.createElement("h4",{className:"footer__title"},t.title):null,null!=t.items&&Array.isArray(t.items)&&t.items.length>0?o.a.createElement("ul",{className:"footer__items"},t.items.map((function(t,e){return t.html?o.a.createElement("li",{key:e,className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):o.a.createElement("li",{key:t.href||t.to,className:"footer__item"},o.a.createElement(B,t))}))):null)}))),(f||u)&&o.a.createElement("div",{className:"text--center"},f&&f.src&&o.a.createElement("div",{className:"margin-bottom--sm"},f.href?o.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:R.a.footerLogoLink},o.a.createElement(L,{alt:f.alt,url:p})):o.a.createElement(L,{alt:f.alt,url:p})),o.a.createElement("small",null,u),o.a.createElement("br",null))))},M=r(454),W=r(455),U=r(3);r(138);e.a=function(t){var e=Object(d.a)().siteConfig,r=void 0===e?{}:e,n=r.favicon,a=(r.tagline,r.title),c=r.themeConfig.image,l=r.url,f=t.children,s=t.title,p=t.noFooter,v=t.description,h=t.image,y=t.keywords,g=(t.permalink,t.version),m=s?s+" | "+a:a,D=h||c,_=l+Object(F.a)(D),b=Object(F.a)(n),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return o.a.createElement(W.a,null,o.a.createElement(M.a,null,o.a.createElement(u.a,null,o.a.createElement("html",{lang:"en"}),o.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),m&&o.a.createElement("title",null,m),m&&o.a.createElement("meta",{property:"og:title",content:m}),n&&o.a.createElement("link",{rel:"shortcut icon",href:b}),v&&o.a.createElement("meta",{name:"description",content:v}),v&&o.a.createElement("meta",{property:"og:description",content:v}),g&&o.a.createElement("meta",{name:"docsearch:version",content:g}),y&&y.length&&o.a.createElement("meta",{name:"keywords",content:y.join(",")}),D&&o.a.createElement("meta",{property:"og:image",content:_}),D&&o.a.createElement("meta",{property:"twitter:image",content:_}),D&&o.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+m}),w&&o.a.createElement("meta",{property:"og:url",content:w}),o.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&o.a.createElement("link",{rel:"canonical",href:w})),o.a.createElement(i.a,null),o.a.createElement(N,null),o.a.createElement("div",{className:"main-wrapper"},f),!p&&o.a.createElement(T,null)))}},442:function(t,e,r){"use strict";var n=r(9),o=r(0),i=r.n(o),u=r(415),a=r.n(u),c=r(428),l=(r(139),r(140)),f=r.n(l);e.a=function(t){return function(e){var r,o=e.id,u=Object(n.a)(e,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,p=(s=void 0===s?{}:s).navbar,v=(p=void 0===p?{}:p).hideOnScroll,d=void 0!==v&&v;return o?i.a.createElement(t,u,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:a()("anchor",(r={},r[f.a.enhancedAnchor]=!d,r)),id:o}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+o,title:"Direct link to heading"},"#"),u.children):i.a.createElement(t,u)}}},443:function(t,e,r){(function(t,n){var o;(function(){var i="Expected a function",u="__lodash_placeholder__",a=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",p="[object Error]",v="[object Function]",d="[object GeneratorFunction]",h="[object Map]",y="[object Number]",g="[object Object]",m="[object RegExp]",D="[object Set]",_="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",j="[object Float32Array]",A="[object Float64Array]",x="[object Int8Array]",O="[object Int16Array]",S="[object Int32Array]",k="[object Uint8Array]",C="[object Uint16Array]",N="[object Uint32Array]",P=/\b__p \+= '';/g,I=/\b(__p \+=) '' \+/g,R=/(__e\(.*?\)|\b__t\)) \+\n'';/g,B=/&(?:amp|lt|gt|quot|#39);/g,L=/[&<>"']/g,T=RegExp(B.source),M=RegExp(L.source),W=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,z=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,V=/[\\^$.*+?()[\]{}|]/g,H=RegExp(V.source),Q=/^\s+|\s+$/g,J=/^\s+/,Z=/\s+$/,K=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,tt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,et=/\\(\\)?/g,rt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,ot=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,ut=/^\[object .+?Constructor\]$/,at=/^0o[0-7]+$/i,ct=/^(?:0|[1-9]\d*)$/,lt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ft=/($^)/,st=/['\n\r\u2028\u2029\\]/g,pt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",vt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",dt="[\\ud800-\\udfff]",ht="["+vt+"]",yt="["+pt+"]",gt="\\d+",mt="[\\u2700-\\u27bf]",Dt="[a-z\\xdf-\\xf6\\xf8-\\xff]",_t="[^\\ud800-\\udfff"+vt+gt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",bt="\\ud83c[\\udffb-\\udfff]",Et="[^\\ud800-\\udfff]",wt="(?:\\ud83c[\\udde6-\\uddff]){2}",Ft="[\\ud800-\\udbff][\\udc00-\\udfff]",jt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",At="(?:"+Dt+"|"+_t+")",xt="(?:"+jt+"|"+_t+")",Ot="(?:"+yt+"|"+bt+")"+"?",St="[\\ufe0e\\ufe0f]?"+Ot+("(?:\\u200d(?:"+[Et,wt,Ft].join("|")+")[\\ufe0e\\ufe0f]?"+Ot+")*"),kt="(?:"+[mt,wt,Ft].join("|")+")"+St,Ct="(?:"+[Et+yt+"?",yt,wt,Ft,dt].join("|")+")",Nt=RegExp("['\u2019]","g"),Pt=RegExp(yt,"g"),It=RegExp(bt+"(?="+bt+")|"+Ct+St,"g"),Rt=RegExp([jt+"?"+Dt+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[ht,jt,"$"].join("|")+")",xt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[ht,jt+At,"$"].join("|")+")",jt+"?"+At+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",jt+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",gt,kt].join("|"),"g"),Bt=RegExp("[\\u200d\\ud800-\\udfff"+pt+"\\ufe0e\\ufe0f]"),Lt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Tt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mt=-1,Wt={};Wt[j]=Wt[A]=Wt[x]=Wt[O]=Wt[S]=Wt[k]=Wt["[object Uint8ClampedArray]"]=Wt[C]=Wt[N]=!0,Wt[c]=Wt[l]=Wt[w]=Wt[f]=Wt[F]=Wt[s]=Wt[p]=Wt[v]=Wt[h]=Wt[y]=Wt[g]=Wt[m]=Wt[D]=Wt[_]=Wt[E]=!1;var Ut={};Ut[c]=Ut[l]=Ut[w]=Ut[F]=Ut[f]=Ut[s]=Ut[j]=Ut[A]=Ut[x]=Ut[O]=Ut[S]=Ut[h]=Ut[y]=Ut[g]=Ut[m]=Ut[D]=Ut[_]=Ut[b]=Ut[k]=Ut["[object Uint8ClampedArray]"]=Ut[C]=Ut[N]=!0,Ut[p]=Ut[v]=Ut[E]=!1;var zt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$t=parseFloat,qt=parseInt,Gt="object"==typeof t&&t&&t.Object===Object&&t,Vt="object"==typeof self&&self&&self.Object===Object&&self,Ht=Gt||Vt||Function("return this")(),Qt=e&&!e.nodeType&&e,Jt=Qt&&"object"==typeof n&&n&&!n.nodeType&&n,Zt=Jt&&Jt.exports===Qt,Kt=Zt&&Gt.process,Yt=function(){try{var t=Jt&&Jt.require&&Jt.require("util").types;return t||Kt&&Kt.binding&&Kt.binding("util")}catch(e){}}(),Xt=Yt&&Yt.isArrayBuffer,te=Yt&&Yt.isDate,ee=Yt&&Yt.isMap,re=Yt&&Yt.isRegExp,ne=Yt&&Yt.isSet,oe=Yt&&Yt.isTypedArray;function ie(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}function ue(t,e,r,n){for(var o=-1,i=null==t?0:t.length;++o-1}function pe(t,e,r){for(var n=-1,o=null==t?0:t.length;++n-1;);return r}function Ie(t,e){for(var r=t.length;r--&&be(e,t[r],0)>-1;);return r}function Re(t,e){for(var r=t.length,n=0;r--;)t[r]===e&&++n;return n}var Be=Ae({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Le=Ae({"&":"&","<":"<",">":">",'"':""","'":"'"});function Te(t){return"\\"+zt[t]}function Me(t){return Bt.test(t)}function We(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}function Ue(t,e){return function(r){return t(e(r))}}function ze(t,e){for(var r=-1,n=t.length,o=0,i=[];++r",""":'"',"'":"'"});var Qe=function t(e){var r,n=(e=null==e?Ht:Qe.defaults(Ht.Object(),e,Qe.pick(Ht,Tt))).Array,o=e.Date,pt=e.Error,vt=e.Function,dt=e.Math,ht=e.Object,yt=e.RegExp,gt=e.String,mt=e.TypeError,Dt=n.prototype,_t=vt.prototype,bt=ht.prototype,Et=e["__core-js_shared__"],wt=_t.toString,Ft=bt.hasOwnProperty,jt=0,At=(r=/[^.]+$/.exec(Et&&Et.keys&&Et.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"",xt=bt.toString,Ot=wt.call(ht),St=Ht._,kt=yt("^"+wt.call(Ft).replace(V,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ct=Zt?e.Buffer:void 0,It=e.Symbol,Bt=e.Uint8Array,zt=Ct?Ct.allocUnsafe:void 0,Gt=Ue(ht.getPrototypeOf,ht),Vt=ht.create,Qt=bt.propertyIsEnumerable,Jt=Dt.splice,Kt=It?It.isConcatSpreadable:void 0,Yt=It?It.iterator:void 0,me=It?It.toStringTag:void 0,Ae=function(){try{var t=ti(ht,"defineProperty");return t({},"",{}),t}catch(e){}}(),Je=e.clearTimeout!==Ht.clearTimeout&&e.clearTimeout,Ze=o&&o.now!==Ht.Date.now&&o.now,Ke=e.setTimeout!==Ht.setTimeout&&e.setTimeout,Ye=dt.ceil,Xe=dt.floor,tr=ht.getOwnPropertySymbols,er=Ct?Ct.isBuffer:void 0,rr=e.isFinite,nr=Dt.join,or=Ue(ht.keys,ht),ir=dt.max,ur=dt.min,ar=o.now,cr=e.parseInt,lr=dt.random,fr=Dt.reverse,sr=ti(e,"DataView"),pr=ti(e,"Map"),vr=ti(e,"Promise"),dr=ti(e,"Set"),hr=ti(e,"WeakMap"),yr=ti(ht,"create"),gr=hr&&new hr,mr={},Dr=xi(sr),_r=xi(pr),br=xi(vr),Er=xi(dr),wr=xi(hr),Fr=It?It.prototype:void 0,jr=Fr?Fr.valueOf:void 0,Ar=Fr?Fr.toString:void 0;function xr(t){if(qu(t)&&!Pu(t)&&!(t instanceof Cr)){if(t instanceof kr)return t;if(Ft.call(t,"__wrapped__"))return Oi(t)}return new kr(t)}var Or=function(){function t(){}return function(e){if(!$u(e))return{};if(Vt)return Vt(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();function Sr(){}function kr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function Cr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Nr(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Jr(t,e,r,n,o,i){var u,a=1&e,l=2&e,p=4&e;if(r&&(u=o?r(t,n,o,i):r(t)),void 0!==u)return u;if(!$u(t))return t;var E=Pu(t);if(E){if(u=function(t){var e=t.length,r=new t.constructor(e);e&&"string"==typeof t[0]&&Ft.call(t,"index")&&(r.index=t.index,r.input=t.input);return r}(t),!a)return mo(t,u)}else{var P=ni(t),I=P==v||P==d;if(Lu(t))return so(t,a);if(P==g||P==c||I&&!o){if(u=l||I?{}:ii(t),!a)return l?function(t,e){return Do(t,ri(t),e)}(t,function(t,e){return t&&Do(e,ba(e),t)}(u,t)):function(t,e){return Do(t,ei(t),e)}(t,Gr(u,t))}else{if(!Ut[P])return o?t:{};u=function(t,e,r){var n=t.constructor;switch(e){case w:return po(t);case f:case s:return new n(+t);case F:return function(t,e){var r=e?po(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case j:case A:case x:case O:case S:case k:case"[object Uint8ClampedArray]":case C:case N:return vo(t,r);case h:return new n;case y:case _:return new n(t);case m:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case D:return new n;case b:return o=t,jr?ht(jr.call(o)):{}}var o}(t,P,a)}}i||(i=new Br);var R=i.get(t);if(R)return R;i.set(t,u),Ju(t)?t.forEach((function(n){u.add(Jr(n,e,r,n,t,i))})):Gu(t)&&t.forEach((function(n,o){u.set(o,Jr(n,e,r,o,t,i))}));var B=E?void 0:(p?l?Ho:Vo:l?ba:_a)(t);return ae(B||t,(function(n,o){B&&(n=t[o=n]),zr(u,o,Jr(n,e,r,o,t,i))})),u}function Zr(t,e,r){var n=r.length;if(null==t)return!n;for(t=ht(t);n--;){var o=r[n],i=e[o],u=t[o];if(void 0===u&&!(o in t)||!i(u))return!1}return!0}function Kr(t,e,r){if("function"!=typeof t)throw new mt(i);return _i((function(){t.apply(void 0,r)}),e)}function Yr(t,e,r,n){var o=-1,i=se,u=!0,a=t.length,c=[],l=e.length;if(!a)return c;r&&(e=ve(e,ke(r))),n?(i=pe,u=!1):e.length>=200&&(i=Ne,u=!1,e=new Rr(e));t:for(;++o-1},Pr.prototype.set=function(t,e){var r=this.__data__,n=$r(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this},Ir.prototype.clear=function(){this.size=0,this.__data__={hash:new Nr,map:new(pr||Pr),string:new Nr}},Ir.prototype.delete=function(t){var e=Yo(this,t).delete(t);return this.size-=e?1:0,e},Ir.prototype.get=function(t){return Yo(this,t).get(t)},Ir.prototype.has=function(t){return Yo(this,t).has(t)},Ir.prototype.set=function(t,e){var r=Yo(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},Rr.prototype.add=Rr.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Rr.prototype.has=function(t){return this.__data__.has(t)},Br.prototype.clear=function(){this.__data__=new Pr,this.size=0},Br.prototype.delete=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r},Br.prototype.get=function(t){return this.__data__.get(t)},Br.prototype.has=function(t){return this.__data__.has(t)},Br.prototype.set=function(t,e){var r=this.__data__;if(r instanceof Pr){var n=r.__data__;if(!pr||n.length<199)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Ir(n)}return r.set(t,e),this.size=r.size,this};var Xr=Eo(cn),tn=Eo(ln,!0);function en(t,e){var r=!0;return Xr(t,(function(t,n,o){return r=!!e(t,n,o)})),r}function rn(t,e,r){for(var n=-1,o=t.length;++n0&&r(a)?e>1?on(a,e-1,r,n,o):de(o,a):n||(o[o.length]=a)}return o}var un=wo(),an=wo(!0);function cn(t,e){return t&&un(t,e,_a)}function ln(t,e){return t&&an(t,e,_a)}function fn(t,e){return fe(e,(function(e){return Wu(t[e])}))}function sn(t,e){for(var r=0,n=(e=ao(e,t)).length;null!=t&&re}function hn(t,e){return null!=t&&Ft.call(t,e)}function yn(t,e){return null!=t&&e in ht(t)}function gn(t,e,r){for(var o=r?pe:se,i=t[0].length,u=t.length,a=u,c=n(u),l=1/0,f=[];a--;){var s=t[a];a&&e&&(s=ve(s,ke(e))),l=ur(s.length,l),c[a]=!r&&(e||i>=120&&s.length>=120)?new Rr(a&&s):void 0}s=t[0];var p=-1,v=c[0];t:for(;++p=a)return c;var l=r[n];return c*("desc"==l?-1:1)}}return t.index-e.index}(t,e,r)}))}function Pn(t,e,r){for(var n=-1,o=e.length,i={};++n-1;)a!==t&&Jt.call(a,c,1),Jt.call(t,c,1);return t}function Rn(t,e){for(var r=t?e.length:0,n=r-1;r--;){var o=e[r];if(r==n||o!==i){var i=o;ai(o)?Jt.call(t,o,1):Xn(t,o)}}return t}function Bn(t,e){return t+Xe(lr()*(e-t+1))}function Ln(t,e){var r="";if(!t||e<1||e>9007199254740991)return r;do{e%2&&(r+=t),(e=Xe(e/2))&&(t+=t)}while(e);return r}function Tn(t,e){return bi(hi(t,e,Va),t+"")}function Mn(t){return Tr(Sa(t))}function Wn(t,e){var r=Sa(t);return Fi(r,Qr(e,0,r.length))}function Un(t,e,r,n){if(!$u(t))return t;for(var o=-1,i=(e=ao(e,t)).length,u=i-1,a=t;null!=a&&++oi?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var u=n(i);++o>>1,u=t[i];null!==u&&!Ku(u)&&(r?u<=e:u=200){var l=e?null:To(t);if(l)return $e(l);u=!1,o=Ne,c=new Rr}else c=e?[]:a;t:for(;++n=n?t:Gn(t,e,r)}var fo=Je||function(t){return Ht.clearTimeout(t)};function so(t,e){if(e)return t.slice();var r=t.length,n=zt?zt(r):new t.constructor(r);return t.copy(n),n}function po(t){var e=new t.constructor(t.byteLength);return new Bt(e).set(new Bt(t)),e}function vo(t,e){var r=e?po(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function ho(t,e){if(t!==e){var r=void 0!==t,n=null===t,o=t==t,i=Ku(t),u=void 0!==e,a=null===e,c=e==e,l=Ku(e);if(!a&&!l&&!i&&t>e||i&&u&&c&&!a&&!l||n&&u&&c||!r&&c||!o)return 1;if(!n&&!i&&!l&&t1?r[o-1]:void 0,u=o>2?r[2]:void 0;for(i=t.length>3&&"function"==typeof i?(o--,i):void 0,u&&ci(r[0],r[1],u)&&(i=o<3?void 0:i,o=1),e=ht(e);++n-1?o[i?e[u]:u]:void 0}}function Oo(t){return Go((function(e){var r=e.length,n=r,o=kr.prototype.thru;for(t&&e.reverse();n--;){var u=e[n];if("function"!=typeof u)throw new mt(i);if(o&&!a&&"wrapper"==Jo(u))var a=new kr([],!0)}for(n=a?n:r;++n1&&D.reverse(),s&&la))return!1;var l=i.get(t);if(l&&i.get(e))return l==e;var f=-1,s=!0,p=2&r?new Rr:void 0;for(i.set(t,e),i.set(e,t);++f-1&&t%1==0&&t1?"& ":"")+e[n],e=e.join(r>2?", ":" "),t.replace(K,"{\n/* [wrapped with "+e+"] */\n")}(n,function(t,e){return ae(a,(function(r){var n="_."+r[0];e&r[1]&&!se(t,n)&&t.push(n)})),t.sort()}(function(t){var e=t.match(Y);return e?e[1].split(X):[]}(n),r)))}function wi(t){var e=0,r=0;return function(){var n=ar(),o=16-(n-r);if(r=n,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function Fi(t,e){var r=-1,n=t.length,o=n-1;for(e=void 0===e?n:e;++r1?t[e-1]:void 0;return r="function"==typeof r?(t.pop(),r):void 0,Qi(t,r)}));function eu(t){var e=xr(t);return e.__chain__=!0,e}function ru(t,e){return e(t)}var nu=Go((function(t){var e=t.length,r=e?t[0]:0,n=this.__wrapped__,o=function(e){return Hr(e,t)};return!(e>1||this.__actions__.length)&&n instanceof Cr&&ai(r)?((n=n.slice(r,+r+(e?1:0))).__actions__.push({func:ru,args:[o],thisArg:void 0}),new kr(n,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(o)}));var ou=_o((function(t,e,r){Ft.call(t,r)?++t[r]:Vr(t,r,1)}));var iu=xo(Ni),uu=xo(Pi);function au(t,e){return(Pu(t)?ae:Xr)(t,Ko(e,3))}function cu(t,e){return(Pu(t)?ce:tn)(t,Ko(e,3))}var lu=_o((function(t,e,r){Ft.call(t,r)?t[r].push(e):Vr(t,r,[e])}));var fu=Tn((function(t,e,r){var o=-1,i="function"==typeof e,u=Ru(t)?n(t.length):[];return Xr(t,(function(t){u[++o]=i?ie(e,t,r):mn(t,e,r)})),u})),su=_o((function(t,e,r){Vr(t,r,e)}));function pu(t,e){return(Pu(t)?ve:xn)(t,Ko(e,3))}var vu=_o((function(t,e,r){t[r?0:1].push(e)}),(function(){return[[],[]]}));var du=Tn((function(t,e){if(null==t)return[];var r=e.length;return r>1&&ci(t,e[0],e[1])?e=[]:r>2&&ci(e[0],e[1],e[2])&&(e=[e[0]]),Nn(t,on(e,1),[])})),hu=Ze||function(){return Ht.Date.now()};function yu(t,e,r){return e=r?void 0:e,Wo(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function gu(t,e){var r;if("function"!=typeof e)throw new mt(i);return t=na(t),function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=void 0),r}}var mu=Tn((function(t,e,r){var n=1;if(r.length){var o=ze(r,Zo(mu));n|=32}return Wo(t,n,e,r,o)})),Du=Tn((function(t,e,r){var n=3;if(r.length){var o=ze(r,Zo(Du));n|=32}return Wo(e,n,t,r,o)}));function _u(t,e,r){var n,o,u,a,c,l,f=0,s=!1,p=!1,v=!0;if("function"!=typeof t)throw new mt(i);function d(e){var r=n,i=o;return n=o=void 0,f=e,a=t.apply(i,r)}function h(t){return f=t,c=_i(g,e),s?d(t):a}function y(t){var r=t-l;return void 0===l||r>=e||r<0||p&&t-f>=u}function g(){var t=hu();if(y(t))return m(t);c=_i(g,function(t){var r=e-(t-l);return p?ur(r,u-(t-f)):r}(t))}function m(t){return c=void 0,v&&n?d(t):(n=o=void 0,a)}function D(){var t=hu(),r=y(t);if(n=arguments,o=this,l=t,r){if(void 0===c)return h(l);if(p)return fo(c),c=_i(g,e),d(l)}return void 0===c&&(c=_i(g,e)),a}return e=ia(e)||0,$u(r)&&(s=!!r.leading,u=(p="maxWait"in r)?ir(ia(r.maxWait)||0,e):u,v="trailing"in r?!!r.trailing:v),D.cancel=function(){void 0!==c&&fo(c),f=0,n=l=o=c=void 0},D.flush=function(){return void 0===c?a:m(hu())},D}var bu=Tn((function(t,e){return Kr(t,1,e)})),Eu=Tn((function(t,e,r){return Kr(t,ia(e)||0,r)}));function wu(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new mt(i);var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var u=t.apply(this,n);return r.cache=i.set(o,u)||i,u};return r.cache=new(wu.Cache||Ir),r}function Fu(t){if("function"!=typeof t)throw new mt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}wu.Cache=Ir;var ju=co((function(t,e){var r=(e=1==e.length&&Pu(e[0])?ve(e[0],ke(Ko())):ve(on(e,1),ke(Ko()))).length;return Tn((function(n){for(var o=-1,i=ur(n.length,r);++o=e})),Nu=Dn(function(){return arguments}())?Dn:function(t){return qu(t)&&Ft.call(t,"callee")&&!Qt.call(t,"callee")},Pu=n.isArray,Iu=Xt?ke(Xt):function(t){return qu(t)&&vn(t)==w};function Ru(t){return null!=t&&zu(t.length)&&!Wu(t)}function Bu(t){return qu(t)&&Ru(t)}var Lu=er||ic,Tu=te?ke(te):function(t){return qu(t)&&vn(t)==s};function Mu(t){if(!qu(t))return!1;var e=vn(t);return e==p||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!Hu(t)}function Wu(t){if(!$u(t))return!1;var e=vn(t);return e==v||e==d||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Uu(t){return"number"==typeof t&&t==na(t)}function zu(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function $u(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function qu(t){return null!=t&&"object"==typeof t}var Gu=ee?ke(ee):function(t){return qu(t)&&ni(t)==h};function Vu(t){return"number"==typeof t||qu(t)&&vn(t)==y}function Hu(t){if(!qu(t)||vn(t)!=g)return!1;var e=Gt(t);if(null===e)return!0;var r=Ft.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&wt.call(r)==Ot}var Qu=re?ke(re):function(t){return qu(t)&&vn(t)==m};var Ju=ne?ke(ne):function(t){return qu(t)&&ni(t)==D};function Zu(t){return"string"==typeof t||!Pu(t)&&qu(t)&&vn(t)==_}function Ku(t){return"symbol"==typeof t||qu(t)&&vn(t)==b}var Yu=oe?ke(oe):function(t){return qu(t)&&zu(t.length)&&!!Wt[vn(t)]};var Xu=Ro(An),ta=Ro((function(t,e){return t<=e}));function ea(t){if(!t)return[];if(Ru(t))return Zu(t)?Ve(t):mo(t);if(Yt&&t[Yt])return function(t){for(var e,r=[];!(e=t.next()).done;)r.push(e.value);return r}(t[Yt]());var e=ni(t);return(e==h?We:e==D?$e:Sa)(t)}function ra(t){return t?(t=ia(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function na(t){var e=ra(t),r=e%1;return e==e?r?e-r:e:0}function oa(t){return t?Qr(na(t),0,4294967295):0}function ia(t){if("number"==typeof t)return t;if(Ku(t))return NaN;if($u(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=$u(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Q,"");var r=it.test(t);return r||at.test(t)?qt(t.slice(2),r?2:8):ot.test(t)?NaN:+t}function ua(t){return Do(t,ba(t))}function aa(t){return null==t?"":Kn(t)}var ca=bo((function(t,e){if(pi(e)||Ru(e))Do(e,_a(e),t);else for(var r in e)Ft.call(e,r)&&zr(t,r,e[r])})),la=bo((function(t,e){Do(e,ba(e),t)})),fa=bo((function(t,e,r,n){Do(e,ba(e),t,n)})),sa=bo((function(t,e,r,n){Do(e,_a(e),t,n)})),pa=Go(Hr);var va=Tn((function(t,e){t=ht(t);var r=-1,n=e.length,o=n>2?e[2]:void 0;for(o&&ci(e[0],e[1],o)&&(n=1);++r1),e})),Do(t,Ho(t),r),n&&(r=Jr(r,7,$o));for(var o=e.length;o--;)Xn(r,e[o]);return r}));var ja=Go((function(t,e){return null==t?{}:function(t,e){return Pn(t,e,(function(e,r){return ya(t,r)}))}(t,e)}));function Aa(t,e){if(null==t)return{};var r=ve(Ho(t),(function(t){return[t]}));return e=Ko(e),Pn(t,r,(function(t,r){return e(t,r[0])}))}var xa=Mo(_a),Oa=Mo(ba);function Sa(t){return null==t?[]:Ce(t,_a(t))}var ka=jo((function(t,e,r){return e=e.toLowerCase(),t+(r?Ca(e):e)}));function Ca(t){return Ma(aa(t).toLowerCase())}function Na(t){return(t=aa(t))&&t.replace(lt,Be).replace(Pt,"")}var Pa=jo((function(t,e,r){return t+(r?"-":"")+e.toLowerCase()})),Ia=jo((function(t,e,r){return t+(r?" ":"")+e.toLowerCase()})),Ra=Fo("toLowerCase");var Ba=jo((function(t,e,r){return t+(r?"_":"")+e.toLowerCase()}));var La=jo((function(t,e,r){return t+(r?" ":"")+Ma(e)}));var Ta=jo((function(t,e,r){return t+(r?" ":"")+e.toUpperCase()})),Ma=Fo("toUpperCase");function Wa(t,e,r){return t=aa(t),void 0===(e=r?void 0:e)?function(t){return Lt.test(t)}(t)?function(t){return t.match(Rt)||[]}(t):function(t){return t.match(tt)||[]}(t):t.match(e)||[]}var Ua=Tn((function(t,e){try{return ie(t,void 0,e)}catch(r){return Mu(r)?r:new pt(r)}})),za=Go((function(t,e){return ae(e,(function(e){e=Ai(e),Vr(t,e,mu(t[e],t))})),t}));function $a(t){return function(){return t}}var qa=Oo(),Ga=Oo(!0);function Va(t){return t}function Ha(t){return wn("function"==typeof t?t:Jr(t,1))}var Qa=Tn((function(t,e){return function(r){return mn(r,t,e)}})),Ja=Tn((function(t,e){return function(r){return mn(t,r,e)}}));function Za(t,e,r){var n=_a(e),o=fn(e,n);null!=r||$u(e)&&(o.length||!n.length)||(r=e,e=t,t=this,o=fn(e,_a(e)));var i=!($u(r)&&"chain"in r&&!r.chain),u=Wu(t);return ae(o,(function(r){var n=e[r];t[r]=n,u&&(t.prototype[r]=function(){var e=this.__chain__;if(i||e){var r=t(this.__wrapped__),o=r.__actions__=mo(this.__actions__);return o.push({func:n,args:arguments,thisArg:t}),r.__chain__=e,r}return n.apply(t,de([this.value()],arguments))})})),t}function Ka(){}var Ya=No(ve),Xa=No(le),tc=No(ge);function ec(t){return li(t)?je(Ai(t)):function(t){return function(e){return sn(e,t)}}(t)}var rc=Io(),nc=Io(!0);function oc(){return[]}function ic(){return!1}var uc=Co((function(t,e){return t+e}),0),ac=Lo("ceil"),cc=Co((function(t,e){return t/e}),1),lc=Lo("floor");var fc,sc=Co((function(t,e){return t*e}),1),pc=Lo("round"),vc=Co((function(t,e){return t-e}),0);return xr.after=function(t,e){if("function"!=typeof e)throw new mt(i);return t=na(t),function(){if(--t<1)return e.apply(this,arguments)}},xr.ary=yu,xr.assign=ca,xr.assignIn=la,xr.assignInWith=fa,xr.assignWith=sa,xr.at=pa,xr.before=gu,xr.bind=mu,xr.bindAll=za,xr.bindKey=Du,xr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Pu(t)?t:[t]},xr.chain=eu,xr.chunk=function(t,e,r){e=(r?ci(t,e,r):void 0===e)?1:ir(na(e),0);var o=null==t?0:t.length;if(!o||e<1)return[];for(var i=0,u=0,a=n(Ye(o/e));io?0:o+r),(n=void 0===n||n>o?o:na(n))<0&&(n+=o),n=r>n?0:oa(n);r>>0)?(t=aa(t))&&("string"==typeof e||null!=e&&!Qu(e))&&!(e=Kn(e))&&Me(t)?lo(Ve(t),0,r):t.split(e,r):[]},xr.spread=function(t,e){if("function"!=typeof t)throw new mt(i);return e=null==e?0:ir(na(e),0),Tn((function(r){var n=r[e],o=lo(r,0,e);return n&&de(o,n),ie(t,this,o)}))},xr.tail=function(t){var e=null==t?0:t.length;return e?Gn(t,1,e):[]},xr.take=function(t,e,r){return t&&t.length?Gn(t,0,(e=r||void 0===e?1:na(e))<0?0:e):[]},xr.takeRight=function(t,e,r){var n=null==t?0:t.length;return n?Gn(t,(e=n-(e=r||void 0===e?1:na(e)))<0?0:e,n):[]},xr.takeRightWhile=function(t,e){return t&&t.length?eo(t,Ko(e,3),!1,!0):[]},xr.takeWhile=function(t,e){return t&&t.length?eo(t,Ko(e,3)):[]},xr.tap=function(t,e){return e(t),t},xr.throttle=function(t,e,r){var n=!0,o=!0;if("function"!=typeof t)throw new mt(i);return $u(r)&&(n="leading"in r?!!r.leading:n,o="trailing"in r?!!r.trailing:o),_u(t,e,{leading:n,maxWait:e,trailing:o})},xr.thru=ru,xr.toArray=ea,xr.toPairs=xa,xr.toPairsIn=Oa,xr.toPath=function(t){return Pu(t)?ve(t,Ai):Ku(t)?[t]:mo(ji(aa(t)))},xr.toPlainObject=ua,xr.transform=function(t,e,r){var n=Pu(t),o=n||Lu(t)||Yu(t);if(e=Ko(e,4),null==r){var i=t&&t.constructor;r=o?n?new i:[]:$u(t)&&Wu(i)?Or(Gt(t)):{}}return(o?ae:cn)(t,(function(t,n,o){return e(r,t,n,o)})),r},xr.unary=function(t){return yu(t,1)},xr.union=qi,xr.unionBy=Gi,xr.unionWith=Vi,xr.uniq=function(t){return t&&t.length?Yn(t):[]},xr.uniqBy=function(t,e){return t&&t.length?Yn(t,Ko(e,2)):[]},xr.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Yn(t,void 0,e):[]},xr.unset=function(t,e){return null==t||Xn(t,e)},xr.unzip=Hi,xr.unzipWith=Qi,xr.update=function(t,e,r){return null==t?t:to(t,e,uo(r))},xr.updateWith=function(t,e,r,n){return n="function"==typeof n?n:void 0,null==t?t:to(t,e,uo(r),n)},xr.values=Sa,xr.valuesIn=function(t){return null==t?[]:Ce(t,ba(t))},xr.without=Ji,xr.words=Wa,xr.wrap=function(t,e){return Au(uo(e),t)},xr.xor=Zi,xr.xorBy=Ki,xr.xorWith=Yi,xr.zip=Xi,xr.zipObject=function(t,e){return oo(t||[],e||[],zr)},xr.zipObjectDeep=function(t,e){return oo(t||[],e||[],Un)},xr.zipWith=tu,xr.entries=xa,xr.entriesIn=Oa,xr.extend=la,xr.extendWith=fa,Za(xr,xr),xr.add=uc,xr.attempt=Ua,xr.camelCase=ka,xr.capitalize=Ca,xr.ceil=ac,xr.clamp=function(t,e,r){return void 0===r&&(r=e,e=void 0),void 0!==r&&(r=(r=ia(r))==r?r:0),void 0!==e&&(e=(e=ia(e))==e?e:0),Qr(ia(t),e,r)},xr.clone=function(t){return Jr(t,4)},xr.cloneDeep=function(t){return Jr(t,5)},xr.cloneDeepWith=function(t,e){return Jr(t,5,e="function"==typeof e?e:void 0)},xr.cloneWith=function(t,e){return Jr(t,4,e="function"==typeof e?e:void 0)},xr.conformsTo=function(t,e){return null==e||Zr(t,e,_a(e))},xr.deburr=Na,xr.defaultTo=function(t,e){return null==t||t!=t?e:t},xr.divide=cc,xr.endsWith=function(t,e,r){t=aa(t),e=Kn(e);var n=t.length,o=r=void 0===r?n:Qr(na(r),0,n);return(r-=e.length)>=0&&t.slice(r,o)==e},xr.eq=Su,xr.escape=function(t){return(t=aa(t))&&M.test(t)?t.replace(L,Le):t},xr.escapeRegExp=function(t){return(t=aa(t))&&H.test(t)?t.replace(V,"\\$&"):t},xr.every=function(t,e,r){var n=Pu(t)?le:en;return r&&ci(t,e,r)&&(e=void 0),n(t,Ko(e,3))},xr.find=iu,xr.findIndex=Ni,xr.findKey=function(t,e){return De(t,Ko(e,3),cn)},xr.findLast=uu,xr.findLastIndex=Pi,xr.findLastKey=function(t,e){return De(t,Ko(e,3),ln)},xr.floor=lc,xr.forEach=au,xr.forEachRight=cu,xr.forIn=function(t,e){return null==t?t:un(t,Ko(e,3),ba)},xr.forInRight=function(t,e){return null==t?t:an(t,Ko(e,3),ba)},xr.forOwn=function(t,e){return t&&cn(t,Ko(e,3))},xr.forOwnRight=function(t,e){return t&&ln(t,Ko(e,3))},xr.get=ha,xr.gt=ku,xr.gte=Cu,xr.has=function(t,e){return null!=t&&oi(t,e,hn)},xr.hasIn=ya,xr.head=Ri,xr.identity=Va,xr.includes=function(t,e,r,n){t=Ru(t)?t:Sa(t),r=r&&!n?na(r):0;var o=t.length;return r<0&&(r=ir(o+r,0)),Zu(t)?r<=o&&t.indexOf(e,r)>-1:!!o&&be(t,e,r)>-1},xr.indexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=null==r?0:na(r);return o<0&&(o=ir(n+o,0)),be(t,e,o)},xr.inRange=function(t,e,r){return e=ra(e),void 0===r?(r=e,e=0):r=ra(r),function(t,e,r){return t>=ur(e,r)&&t=-9007199254740991&&t<=9007199254740991},xr.isSet=Ju,xr.isString=Zu,xr.isSymbol=Ku,xr.isTypedArray=Yu,xr.isUndefined=function(t){return void 0===t},xr.isWeakMap=function(t){return qu(t)&&ni(t)==E},xr.isWeakSet=function(t){return qu(t)&&"[object WeakSet]"==vn(t)},xr.join=function(t,e){return null==t?"":nr.call(t,e)},xr.kebabCase=Pa,xr.last=Mi,xr.lastIndexOf=function(t,e,r){var n=null==t?0:t.length;if(!n)return-1;var o=n;return void 0!==r&&(o=(o=na(r))<0?ir(n+o,0):ur(o,n-1)),e==e?function(t,e,r){for(var n=r+1;n--;)if(t[n]===e)return n;return n}(t,e,o):_e(t,we,o,!0)},xr.lowerCase=Ia,xr.lowerFirst=Ra,xr.lt=Xu,xr.lte=ta,xr.max=function(t){return t&&t.length?rn(t,Va,dn):void 0},xr.maxBy=function(t,e){return t&&t.length?rn(t,Ko(e,2),dn):void 0},xr.mean=function(t){return Fe(t,Va)},xr.meanBy=function(t,e){return Fe(t,Ko(e,2))},xr.min=function(t){return t&&t.length?rn(t,Va,An):void 0},xr.minBy=function(t,e){return t&&t.length?rn(t,Ko(e,2),An):void 0},xr.stubArray=oc,xr.stubFalse=ic,xr.stubObject=function(){return{}},xr.stubString=function(){return""},xr.stubTrue=function(){return!0},xr.multiply=sc,xr.nth=function(t,e){return t&&t.length?Cn(t,na(e)):void 0},xr.noConflict=function(){return Ht._===this&&(Ht._=St),this},xr.noop=Ka,xr.now=hu,xr.pad=function(t,e,r){t=aa(t);var n=(e=na(e))?Ge(t):0;if(!e||n>=e)return t;var o=(e-n)/2;return Po(Xe(o),r)+t+Po(Ye(o),r)},xr.padEnd=function(t,e,r){t=aa(t);var n=(e=na(e))?Ge(t):0;return e&&ne){var n=t;t=e,e=n}if(r||t%1||e%1){var o=lr();return ur(t+o*(e-t+$t("1e-"+((o+"").length-1))),e)}return Bn(t,e)},xr.reduce=function(t,e,r){var n=Pu(t)?he:xe,o=arguments.length<3;return n(t,Ko(e,4),r,o,Xr)},xr.reduceRight=function(t,e,r){var n=Pu(t)?ye:xe,o=arguments.length<3;return n(t,Ko(e,4),r,o,tn)},xr.repeat=function(t,e,r){return e=(r?ci(t,e,r):void 0===e)?1:na(e),Ln(aa(t),e)},xr.replace=function(){var t=arguments,e=aa(t[0]);return t.length<3?e:e.replace(t[1],t[2])},xr.result=function(t,e,r){var n=-1,o=(e=ao(e,t)).length;for(o||(o=1,t=void 0);++n9007199254740991)return[];var r=4294967295,n=ur(t,4294967295);t-=4294967295;for(var o=Se(n,e=Ko(e));++r=i)return t;var a=r-Ge(n);if(a<1)return n;var c=u?lo(u,0,a).join(""):t.slice(0,a);if(void 0===o)return c+n;if(u&&(a+=c.length-a),Qu(o)){if(t.slice(a).search(o)){var l,f=c;for(o.global||(o=yt(o.source,aa(nt.exec(o))+"g")),o.lastIndex=0;l=o.exec(f);)var s=l.index;c=c.slice(0,void 0===s?a:s)}}else if(t.indexOf(Kn(o),a)!=a){var p=c.lastIndexOf(o);p>-1&&(c=c.slice(0,p))}return c+n},xr.unescape=function(t){return(t=aa(t))&&T.test(t)?t.replace(B,He):t},xr.uniqueId=function(t){var e=++jt;return aa(t)+e},xr.upperCase=Ta,xr.upperFirst=Ma,xr.each=au,xr.eachRight=cu,xr.first=Ri,Za(xr,(fc={},cn(xr,(function(t,e){Ft.call(xr.prototype,e)||(fc[e]=t)})),fc),{chain:!1}),xr.VERSION="4.17.15",ae(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){xr[t].placeholder=xr})),ae(["drop","take"],(function(t,e){Cr.prototype[t]=function(r){r=void 0===r?1:ir(na(r),0);var n=this.__filtered__&&!e?new Cr(this):this.clone();return n.__filtered__?n.__takeCount__=ur(r,n.__takeCount__):n.__views__.push({size:ur(r,4294967295),type:t+(n.__dir__<0?"Right":"")}),n},Cr.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),ae(["filter","map","takeWhile"],(function(t,e){var r=e+1,n=1==r||3==r;Cr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Ko(t,3),type:r}),e.__filtered__=e.__filtered__||n,e}})),ae(["head","last"],(function(t,e){var r="take"+(e?"Right":"");Cr.prototype[t]=function(){return this[r](1).value()[0]}})),ae(["initial","tail"],(function(t,e){var r="drop"+(e?"":"Right");Cr.prototype[t]=function(){return this.__filtered__?new Cr(this):this[r](1)}})),Cr.prototype.compact=function(){return this.filter(Va)},Cr.prototype.find=function(t){return this.filter(t).head()},Cr.prototype.findLast=function(t){return this.reverse().find(t)},Cr.prototype.invokeMap=Tn((function(t,e){return"function"==typeof t?new Cr(this):this.map((function(r){return mn(r,t,e)}))})),Cr.prototype.reject=function(t){return this.filter(Fu(Ko(t)))},Cr.prototype.slice=function(t,e){t=na(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Cr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),void 0!==e&&(r=(e=na(e))<0?r.dropRight(-e):r.take(e-t)),r)},Cr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Cr.prototype.toArray=function(){return this.take(4294967295)},cn(Cr.prototype,(function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),n=/^(?:head|last)$/.test(e),o=xr[n?"take"+("last"==e?"Right":""):e],i=n||/^find/.test(e);o&&(xr.prototype[e]=function(){var e=this.__wrapped__,u=n?[1]:arguments,a=e instanceof Cr,c=u[0],l=a||Pu(e),f=function(t){var e=o.apply(xr,de([t],u));return n&&s?e[0]:e};l&&r&&"function"==typeof c&&1!=c.length&&(a=l=!1);var s=this.__chain__,p=!!this.__actions__.length,v=i&&!s,d=a&&!p;if(!i&&l){e=d?e:new Cr(this);var h=t.apply(e,u);return h.__actions__.push({func:ru,args:[f],thisArg:void 0}),new kr(h,s)}return v&&d?t.apply(this,u):(h=this.thru(f),v?n?h.value()[0]:h.value():h)})})),ae(["pop","push","shift","sort","splice","unshift"],(function(t){var e=Dt[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",n=/^(?:pop|shift)$/.test(t);xr.prototype[t]=function(){var t=arguments;if(n&&!this.__chain__){var o=this.value();return e.apply(Pu(o)?o:[],t)}return this[r]((function(r){return e.apply(Pu(r)?r:[],t)}))}})),cn(Cr.prototype,(function(t,e){var r=xr[e];if(r){var n=r.name+"";Ft.call(mr,n)||(mr[n]=[]),mr[n].push({name:e,func:r})}})),mr[So(void 0,2).name]=[{name:"wrapper",func:void 0}],Cr.prototype.clone=function(){var t=new Cr(this.__wrapped__);return t.__actions__=mo(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=mo(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=mo(this.__views__),t},Cr.prototype.reverse=function(){if(this.__filtered__){var t=new Cr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Cr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,r=Pu(t),n=e<0,o=r?t.length:0,i=function(t,e,r){var n=-1,o=r.length;for(;++n=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},xr.prototype.plant=function(t){for(var e,r=this;r instanceof Sr;){var n=Oi(r);n.__index__=0,n.__values__=void 0,e?o.__wrapped__=n:e=n;var o=n;r=r.__wrapped__}return o.__wrapped__=t,e},xr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Cr){var e=t;return this.__actions__.length&&(e=new Cr(this)),(e=e.reverse()).__actions__.push({func:ru,args:[$i],thisArg:void 0}),new kr(e,this.__chain__)}return this.thru($i)},xr.prototype.toJSON=xr.prototype.valueOf=xr.prototype.value=function(){return ro(this.__wrapped__,this.__actions__)},xr.prototype.first=xr.prototype.head,Yt&&(xr.prototype[Yt]=function(){return this}),xr}();Ht._=Qe,void 0===(o=function(){return Qe}.call(e,r,e,n))||(n.exports=o)}).call(this)}).call(this,r(76),r(448)(t))},446:function(t,e,r){"use strict";var n=r(0),o=Object(n.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});e.a=o},447:function(t,e,r){"use strict";r.d(e,"a",(function(){return i}));r(77),r(465),r(431),r(78);var n=r(467),o=r.n(n);function i(t,e){var r=new o.a;return t.map((function(t){var n=t;return"string"==typeof t&&(n={label:t,permalink:"/blog/tags/"+r.slug(t)}),function(t,e){var r=t.label.split(": ",2),n=r[0],o=r[1],i="primary";switch(e){case"blog":case"guides":i=function(t){switch(t){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(n)}return{category:n,count:t.count,label:t.label,permalink:t.permalink,style:i,value:o}}(n,e)}))}},448:function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},457:function(t,e,r){var n=r(30),o=r(54),i=r(27),u=r(26),a=r(458);t.exports=function(t,e){var r=1==t,c=2==t,l=3==t,f=4==t,s=6==t,p=5==t||s,v=e||a;return function(e,a,d){for(var h,y,g=i(e),m=o(g),D=n(a,d,3),_=u(m.length),b=0,E=r?v(e,_):c?v(e,0):void 0;_>b;b++)if((p||b in m)&&(y=D(h=m[b],b,g),t))if(r)E[b]=y;else if(y)switch(t){case 3:return!0;case 5:return h;case 6:return b;case 2:E.push(h)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(t,e,r){var n=r(459);t.exports=function(t,e){return new(n(t))(e)}},459:function(t,e,r){var n=r(13),o=r(460),i=r(2)("species");t.exports=function(t){var e;return o(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!o(e.prototype)||(e=void 0),n(e)&&null===(e=e[i])&&(e=void 0)),void 0===e?Array:e}},460:function(t,e,r){var n=r(23);t.exports=Array.isArray||function(t){return"Array"==n(t)}},461:function(t,e,r){"use strict";var n=SyntaxError,o=Function,i=TypeError,u=function(t){try{return o('"use strict"; return ('+t+").constructor;")()}catch(e){}},a=Object.getOwnPropertyDescriptor;if(a)try{a({},"")}catch(x){a=null}var c=function(){throw new i},l=a?function(){try{return c}catch(t){try{return a(arguments,"callee").get}catch(e){return c}}}():c,f=r(499)(),s=Object.getPrototypeOf||function(t){return t.__proto__},p={},v="undefined"==typeof Uint8Array?void 0:s(Uint8Array),d={"%AggregateError%":"undefined"==typeof AggregateError?void 0:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?void 0:ArrayBuffer,"%ArrayIteratorPrototype%":f?s([][Symbol.iterator]()):void 0,"%AsyncFromSyncIteratorPrototype%":void 0,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?void 0:Atomics,"%BigInt%":"undefined"==typeof BigInt?void 0:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?void 0:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?void 0:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?void 0:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?void 0:FinalizationRegistry,"%Function%":o,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?void 0:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?void 0:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?void 0:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?s(s([][Symbol.iterator]())):void 0,"%JSON%":"object"==typeof JSON?JSON:void 0,"%Map%":"undefined"==typeof Map?void 0:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?s((new Map)[Symbol.iterator]()):void 0,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?void 0:Promise,"%Proxy%":"undefined"==typeof Proxy?void 0:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?void 0:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?void 0:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?s((new Set)[Symbol.iterator]()):void 0,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?void 0:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?s(""[Symbol.iterator]()):void 0,"%Symbol%":f?Symbol:void 0,"%SyntaxError%":n,"%ThrowTypeError%":l,"%TypedArray%":v,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?void 0:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?void 0:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?void 0:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?void 0:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?void 0:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?void 0:WeakSet},h={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=r(462),g=r(502),m=y.call(Function.call,Array.prototype.concat),D=y.call(Function.apply,Array.prototype.splice),_=y.call(Function.call,String.prototype.replace),b=y.call(Function.call,String.prototype.slice),E=y.call(Function.call,RegExp.prototype.exec),w=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,F=/\\(\\)?/g,j=function(t){var e=b(t,0,1),r=b(t,-1);if("%"===e&&"%"!==r)throw new n("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new n("invalid intrinsic syntax, expected opening `%`");var o=[];return _(t,w,(function(t,e,r,n){o[o.length]=r?_(n,F,"$1"):e||t})),o},A=function(t,e){var r,o=t;if(g(h,o)&&(o="%"+(r=h[o])[0]+"%"),g(d,o)){var a=d[o];if(a===p&&(a=function t(e){var r;if("%AsyncFunction%"===e)r=u("async function () {}");else if("%GeneratorFunction%"===e)r=u("function* () {}");else if("%AsyncGeneratorFunction%"===e)r=u("async function* () {}");else if("%AsyncGenerator%"===e){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===e){var o=t("%AsyncGenerator%");o&&(r=s(o.prototype))}return d[e]=r,r}(o)),void 0===a&&!e)throw new i("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:r,name:o,value:a}}throw new n("intrinsic "+t+" does not exist!")};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new i('"allowMissing" argument must be a boolean');if(null===E(/^%?[^%]*%?$/,t))throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=j(t),o=r.length>0?r[0]:"",u=A("%"+o+"%",e),c=u.name,l=u.value,f=!1,s=u.alias;s&&(o=s[0],D(r,m([0,1],s)));for(var p=1,v=!0;p=r.length){var w=a(l,h);l=(v=!!w)&&"get"in w&&!("originalValue"in w.get)?w.get:l[h]}else v=g(l,h),l=l[h];v&&!f&&(d[c]=l)}}return l}},462:function(t,e,r){"use strict";var n=r(501);t.exports=Function.prototype.bind||n},463:function(t,e,r){"use strict";var n=String.prototype.replace,o=/%20/g,i="RFC1738",u="RFC3986";t.exports={default:u,formatters:{RFC1738:function(t){return n.call(t,o,"+")},RFC3986:function(t){return String(t)}},RFC1738:i,RFC3986:u}},466:function(t,e,r){"use strict";var n=r(0),o=r.n(n),i=r(422),u=r(415),a=r.n(u);e.a=function(t){var e=t.count,r=t.label,n=t.permalink,u=t.style,c=t.value,l=t.valueOnly;return o.a.createElement(i.a,{to:n+"/",className:a()("badge","badge--rounded","badge--"+u)},l?c:r,e&&o.a.createElement(o.a.Fragment,null," (",e,")"))}},467:function(t,e,r){var n=r(468);t.exports=a;var o=Object.hasOwnProperty,i=/\s/g,u=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function a(){if(!(this instanceof a))return new a;this.reset()}function c(t,e){return"string"!=typeof t?"":(e||(t=t.toLowerCase()),t.trim().replace(u,"").replace(n(),"").replace(i,"-"))}a.prototype.slug=function(t,e){for(var r=c(t,!0===e),n=r;o.call(this.occurrences,r);)this.occurrences[n]++,r=n+"-"+this.occurrences[n];return this.occurrences[r]=0,r},a.prototype.reset=function(){this.occurrences=Object.create(null)},a.slug=c},468:function(t,e){t.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},470:function(t,e,r){"use strict";var n=r(463),o=Object.prototype.hasOwnProperty,i=Array.isArray,u=function(){for(var t=[],e=0;e<256;++e)t.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return t}(),a=function(t,e){for(var r=e&&e.plainObjects?Object.create(null):{},n=0;n1;){var e=t.pop(),r=e.obj[e.prop];if(i(r)){for(var n=[],o=0;o=48&&f<=57||f>=65&&f<=90||f>=97&&f<=122||i===n.RFC1738&&(40===f||41===f)?c+=a.charAt(l):f<128?c+=u[f]:f<2048?c+=u[192|f>>6]+u[128|63&f]:f<55296||f>=57344?c+=u[224|f>>12]+u[128|f>>6&63]+u[128|63&f]:(l+=1,f=65536+((1023&f)<<10|1023&a.charCodeAt(l)),c+=u[240|f>>18]+u[128|f>>12&63]+u[128|f>>6&63]+u[128|63&f])}return c},isBuffer:function(t){return!(!t||"object"!=typeof t)&&!!(t.constructor&&t.constructor.isBuffer&&t.constructor.isBuffer(t))},isRegExp:function(t){return"[object RegExp]"===Object.prototype.toString.call(t)},maybeMap:function(t,e){if(i(t)){for(var r=[],n=0;n0?j.join(",")||null:void 0}];else if(c(v))I=v;else{var B=Object.keys(j);I=y?B.sort(y):B}for(var L=u&&c(j)&&1===j.length?r+"[]":r,T=0;T0?b+_:""}},498:function(t,e,r){"use strict";var n=r(461),o=r(503),i=r(505),u=n("%TypeError%"),a=n("%WeakMap%",!0),c=n("%Map%",!0),l=o("WeakMap.prototype.get",!0),f=o("WeakMap.prototype.set",!0),s=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),v=o("Map.prototype.set",!0),d=o("Map.prototype.has",!0),h=function(t,e){for(var r,n=t;null!==(r=n.next);n=r)if(r.key===e)return n.next=r.next,r.next=t.next,t.next=r,r};t.exports=function(){var t,e,r,n={assert:function(t){if(!n.has(t))throw new u("Side channel does not contain "+i(t))},get:function(n){if(a&&n&&("object"==typeof n||"function"==typeof n)){if(t)return l(t,n)}else if(c){if(e)return p(e,n)}else if(r)return function(t,e){var r=h(t,e);return r&&r.value}(r,n)},has:function(n){if(a&&n&&("object"==typeof n||"function"==typeof n)){if(t)return s(t,n)}else if(c){if(e)return d(e,n)}else if(r)return function(t,e){return!!h(t,e)}(r,n);return!1},set:function(n,o){a&&n&&("object"==typeof n||"function"==typeof n)?(t||(t=new a),f(t,n,o)):c?(e||(e=new c),v(e,n,o)):(r||(r={key:{},next:null}),function(t,e,r){var n=h(t,e);n?n.value=r:t.next={key:e,next:t.next,value:r}}(r,n,o))}};return n}},499:function(t,e,r){"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=r(500);t.exports=function(){return"function"==typeof n&&("function"==typeof Symbol&&("symbol"==typeof n("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},500:function(t,e,r){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},501:function(t,e,r){"use strict";var n="Function.prototype.bind called on incompatible ",o=Array.prototype.slice,i=Object.prototype.toString;t.exports=function(t){var e=this;if("function"!=typeof e||"[object Function]"!==i.call(e))throw new TypeError(n+e);for(var r,u=o.call(arguments,1),a=function(){if(this instanceof r){var n=e.apply(this,u.concat(o.call(arguments)));return Object(n)===n?n:this}return e.apply(t,u.concat(o.call(arguments)))},c=Math.max(0,e.length-u.length),l=[],f=0;f-1?o(r):r}},504:function(t,e,r){"use strict";var n=r(462),o=r(461),i=o("%Function.prototype.apply%"),u=o("%Function.prototype.call%"),a=o("%Reflect.apply%",!0)||n.call(u,i),c=o("%Object.getOwnPropertyDescriptor%",!0),l=o("%Object.defineProperty%",!0),f=o("%Math.max%");if(l)try{l({},"a",{value:1})}catch(p){l=null}t.exports=function(t){var e=a(n,u,arguments);if(c&&l){var r=c(e,"length");r.configurable&&l(e,"length",{value:1+f(0,t.length-(arguments.length-1))})}return e};var s=function(){return a(n,i,arguments)};l?l(t.exports,"apply",{value:s}):t.exports.apply=s},505:function(t,e,r){var n="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=n&&o&&"function"==typeof o.get?o.get:null,u=n&&Map.prototype.forEach,a="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&a?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,l=a&&c&&"function"==typeof c.get?c.get:null,f=a&&Set.prototype.forEach,s="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,v="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,h=Object.prototype.toString,y=Function.prototype.toString,g=String.prototype.match,m=String.prototype.slice,D=String.prototype.replace,_=String.prototype.toUpperCase,b=String.prototype.toLowerCase,E=RegExp.prototype.test,w=Array.prototype.concat,F=Array.prototype.join,j=Array.prototype.slice,A=Math.floor,x="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,k="function"==typeof Symbol&&"object"==typeof Symbol.iterator,C="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===k||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,P=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function I(t,e){if(t===1/0||t===-1/0||t!=t||t&&t>-1e3&&t<1e3||E.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var n=t<0?-A(-t):A(t);if(n!==t){var o=String(n),i=m.call(e,o.length+1);return D.call(o,r,"$&_")+"."+D.call(D.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return D.call(e,r,"$&_")}var R=r(506),B=R.custom,L=z(B)?B:null;function T(t,e,r){var n="double"===(r.quoteStyle||e)?'"':"'";return n+t+n}function M(t){return D.call(String(t),/"/g,""")}function W(t){return!("[object Array]"!==G(t)||C&&"object"==typeof t&&C in t)}function U(t){return!("[object RegExp]"!==G(t)||C&&"object"==typeof t&&C in t)}function z(t){if(k)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!S)return!1;try{return S.call(t),!0}catch(e){}return!1}t.exports=function t(e,r,n,o){var a=r||{};if(q(a,"quoteStyle")&&"single"!==a.quoteStyle&&"double"!==a.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(q(a,"maxStringLength")&&("number"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!q(a,"customInspect")||a.customInspect;if("boolean"!=typeof c&&"symbol"!==c)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(q(a,"indent")&&null!==a.indent&&"\t"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(q(a,"numericSeparator")&&"boolean"!=typeof a.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var h=a.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,r){if(e.length>r.maxStringLength){var n=e.length-r.maxStringLength,o="... "+n+" more character"+(n>1?"s":"");return t(m.call(e,0,r.maxStringLength),r)+o}return T(D.call(D.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,H),"single",r)}(e,a);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var _=String(e);return h?I(e,_):_}if("bigint"==typeof e){var E=String(e)+"n";return h?I(e,E):E}var A=void 0===a.depth?5:a.depth;if(void 0===n&&(n=0),n>=A&&A>0&&"object"==typeof e)return W(e)?"[Array]":"[Object]";var O=function(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=F.call(Array(t.indent+1)," ")}return{base:r,prev:F.call(Array(e+1),r)}}(a,n);if(void 0===o)o=[];else if(V(o,e)>=0)return"[Circular]";function B(e,r,i){if(r&&(o=j.call(o)).push(r),i){var u={depth:a.depth};return q(a,"quoteStyle")&&(u.quoteStyle=a.quoteStyle),t(e,u,n+1,o)}return t(e,a,n+1,o)}if("function"==typeof e&&!U(e)){var $=function(t){if(t.name)return t.name;var e=g.call(y.call(t),/^function\s*([\w$]+)/);if(e)return e[1];return null}(e),X=Y(e,B);return"[Function"+($?": "+$:" (anonymous)")+"]"+(X.length>0?" { "+F.call(X,", ")+" }":"")}if(z(e)){var tt=k?D.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):S.call(e);return"object"!=typeof e||k?tt:Q(tt)}if(function(t){if(!t||"object"!=typeof t)return!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement)return!0;return"string"==typeof t.nodeName&&"function"==typeof t.getAttribute}(e)){for(var et="<"+b.call(String(e.nodeName)),rt=e.attributes||[],nt=0;nt"}if(W(e)){if(0===e.length)return"[]";var ot=Y(e,B);return O&&!function(t){for(var e=0;e=0)return!1;return!0}(ot)?"["+K(ot,O)+"]":"[ "+F.call(ot,", ")+" ]"}if(function(t){return!("[object Error]"!==G(t)||C&&"object"==typeof t&&C in t)}(e)){var it=Y(e,B);return"cause"in Error.prototype||!("cause"in e)||N.call(e,"cause")?0===it.length?"["+String(e)+"]":"{ ["+String(e)+"] "+F.call(it,", ")+" }":"{ ["+String(e)+"] "+F.call(w.call("[cause]: "+B(e.cause),it),", ")+" }"}if("object"==typeof e&&c){if(L&&"function"==typeof e[L]&&R)return R(e,{depth:A-n});if("symbol"!==c&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!i||!t||"object"!=typeof t)return!1;try{i.call(t);try{l.call(t)}catch(et){return!0}return t instanceof Map}catch(e){}return!1}(e)){var ut=[];return u.call(e,(function(t,r){ut.push(B(r,e,!0)+" => "+B(t,e))})),Z("Map",i.call(e),ut,O)}if(function(t){if(!l||!t||"object"!=typeof t)return!1;try{l.call(t);try{i.call(t)}catch(e){return!0}return t instanceof Set}catch(r){}return!1}(e)){var at=[];return f.call(e,(function(t){at.push(B(t,e))})),Z("Set",l.call(e),at,O)}if(function(t){if(!s||!t||"object"!=typeof t)return!1;try{s.call(t,s);try{p.call(t,p)}catch(et){return!0}return t instanceof WeakMap}catch(e){}return!1}(e))return J("WeakMap");if(function(t){if(!p||!t||"object"!=typeof t)return!1;try{p.call(t,p);try{s.call(t,s)}catch(et){return!0}return t instanceof WeakSet}catch(e){}return!1}(e))return J("WeakSet");if(function(t){if(!v||!t||"object"!=typeof t)return!1;try{return v.call(t),!0}catch(e){}return!1}(e))return J("WeakRef");if(function(t){return!("[object Number]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(B(Number(e)));if(function(t){if(!t||"object"!=typeof t||!x)return!1;try{return x.call(t),!0}catch(e){}return!1}(e))return Q(B(x.call(e)));if(function(t){return!("[object Boolean]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(d.call(e));if(function(t){return!("[object String]"!==G(t)||C&&"object"==typeof t&&C in t)}(e))return Q(B(String(e)));if(!function(t){return!("[object Date]"!==G(t)||C&&"object"==typeof t&&C in t)}(e)&&!U(e)){var ct=Y(e,B),lt=P?P(e)===Object.prototype:e instanceof Object||e.constructor===Object,ft=e instanceof Object?"":"null prototype",st=!lt&&C&&Object(e)===e&&C in e?m.call(G(e),8,-1):ft?"Object":"",pt=(lt||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(st||ft?"["+F.call(w.call([],st||[],ft||[]),": ")+"] ":"");return 0===ct.length?pt+"{}":O?pt+"{"+K(ct,O)+"}":pt+"{ "+F.call(ct,", ")+" }"}return String(e)};var $=Object.prototype.hasOwnProperty||function(t){return t in this};function q(t,e){return $.call(t,e)}function G(t){return h.call(t)}function V(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;r-1?t.split(","):t},l=function(t,e,r,n){if(t){var i=r.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,u=/(\[[^[\]]*])/g,a=r.depth>0&&/(\[[^[\]]*])/.exec(i),l=a?i.slice(0,a.index):i,f=[];if(l){if(!r.plainObjects&&o.call(Object.prototype,l)&&!r.allowPrototypes)return;f.push(l)}for(var s=0;r.depth>0&&null!==(a=u.exec(i))&&s=0;--i){var u,a=t[i];if("[]"===a&&r.parseArrays)u=[].concat(o);else{u=r.plainObjects?Object.create(null):{};var l="["===a.charAt(0)&&"]"===a.charAt(a.length-1)?a.slice(1,-1):a,f=parseInt(l,10);r.parseArrays||""!==l?!isNaN(f)&&a!==l&&String(f)===l&&f>=0&&r.parseArrays&&f<=r.arrayLimit?(u=[])[f]=o:"__proto__"!==l&&(u[l]=o):u={0:o}}o=u}return o}(f,e,r,n)}};t.exports=function(t,e){var r=function(t){if(!t)return u;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?u.charset:t.charset;return{allowDots:void 0===t.allowDots?u.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:u.allowPrototypes,allowSparse:"boolean"==typeof t.allowSparse?t.allowSparse:u.allowSparse,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:u.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:u.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:u.comma,decoder:"function"==typeof t.decoder?t.decoder:u.decoder,delimiter:"string"==typeof t.delimiter||n.isRegExp(t.delimiter)?t.delimiter:u.delimiter,depth:"number"==typeof t.depth||!1===t.depth?+t.depth:u.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:u.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:u.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:u.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:u.strictNullHandling}}(e);if(""===t||null==t)return r.plainObjects?Object.create(null):{};for(var f="string"==typeof t?function(t,e){var r,l={},f=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,s=e.parameterLimit===1/0?void 0:e.parameterLimit,p=f.split(e.delimiter,s),v=-1,d=e.charset;if(e.charsetSentinel)for(r=0;r-1&&(y=i(y)?[y]:y),o.call(l,h)?l[h]=n.combine(l[h],y):l[h]=y}return l}(t,r):t,s=r.plainObjects?Object.create(null):{},p=Object.keys(f),v=0;v - + - + @@ -36,20 +36,20 @@ - +
- +
- + - + @@ -57,7 +57,7 @@ - + diff --git a/components/index.html b/components/index.html index a7fd66a457..936fbac99b 100644 --- a/components/index.html +++ b/components/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,20 +36,20 @@ - +
-

Qovery Components

Components allow you to collect, transform, and route data with ease. Learn more.
The Qovery Logo
no components found
+

Qovery Components

Components allow you to collect, transform, and route data with ease. Learn more.
The Qovery Logo
no components found
- + - + @@ -57,7 +57,7 @@ - + diff --git a/contact/index.html b/contact/index.html index 99e445bd70..c6759e72b7 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,20 +36,20 @@ - +
-

Contact

Qovery is a Timber.io open-source product. You can contact the Qovery & Timber team using any of the options below.
+

Contact

Qovery is a Timber.io open-source product. You can contact the Qovery & Timber team using any of the options below.
- + - + @@ -57,7 +57,7 @@ - + diff --git a/d9deea5f.47c2d25b.js b/d9deea5f.47c2d25b.js new file mode 100644 index 0000000000..01944165dd --- /dev/null +++ b/d9deea5f.47c2d25b.js @@ -0,0 +1,2 @@ +/*! For license information please see d9deea5f.47c2d25b.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[220],{372:function(n,t,e){"use strict";e.r(t);var r=e(0),u=e.n(r),i=e(437),a=e(508),o=e(422);t.default=function(n){var t=n.metadata.category,e=n.items;return u.a.createElement(i.a,{title:t.title+" Guides",description:"All "+t.title+" guides"},u.a.createElement("header",{className:"hero hero--clean"},u.a.createElement("div",{className:"container"},u.a.createElement("h1",null,t.title," Guides"),t.description&&u.a.createElement("div",{className:"hero--subtitle"},t.description),u.a.createElement("div",null,u.a.createElement(o.a,{to:"/guides"},"View All Guides")))),u.a.createElement("main",{className:"container container--s"},u.a.createElement(a.a,{items:e,staggered:null!=e[0].content.metadata.seriesPosition})))}},415:function(n,t,e){var r;!function(){"use strict";var e={}.hasOwnProperty;function u(){for(var n=[],t=0;t1?arguments[1]:void 0)}}),e(74)("find")},437:function(n,t,e){"use strict";e(449);var r=e(0),u=e.n(r),i=e(450),a=e(435),o=e(1),c=(e(438),e(439),e(451),e(422)),l=e(452),f=e(432),s=e.n(f),v=e(453),h=e.n(v),d=e(428),p=e(415),D=e.n(p),g=e(135),_=e.n(g),m=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.moon)})},y=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.sun)})},b=function(n){var t=Object(d.a)().isClient;return u.a.createElement(h.a,Object(o.a)({disabled:!t,icons:{checked:u.a.createElement(m,null),unchecked:u.a.createElement(y,null)}},n))};function E(){var n=Object(d.a)().siteConfig,t=(void 0===n?{}:n).customFields.metadata.latest_post,e=Date.parse(t.date),r=new Date,u=Math.abs(r-e),i=Math.ceil(u/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!a||a0&&u.a.createElement("div",{className:"row footer__links"},u.a.createElement("div",{className:"col col--5 footer__col"},u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement(s.a,{className:"navbar__logo",src:h,alt:"Qovery",width:"150",height:"auto"})),u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement("p",null,"Qovery is an Internal Developer Platform Helping 50.000+ Developers and Platform Engineers To Ship Faster.")),u.a.createElement("div",null,u.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},u.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},u.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},u.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},u.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(n,t){return u.a.createElement("div",{key:t,className:"col footer__col"},null!=n.title?u.a.createElement("h4",{className:"footer__title"},n.title):null,null!=n.items&&Array.isArray(n.items)&&n.items.length>0?u.a.createElement("ul",{className:"footer__items"},n.items.map((function(n,t){return n.html?u.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):u.a.createElement("li",{key:n.href||n.to,className:"footer__item"},u.a.createElement(R,n))}))):null)}))),(f||a)&&u.a.createElement("div",{className:"text--center"},f&&f.src&&u.a.createElement("div",{className:"margin-bottom--sm"},f.href?u.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:L.a.footerLogoLink},u.a.createElement(z,{alt:f.alt,url:v})):u.a.createElement(z,{alt:f.alt,url:v})),u.a.createElement("small",null,a),u.a.createElement("br",null))))},W=e(454),M=e(455),U=e(3);e(138);t.a=function(n){var t=Object(d.a)().siteConfig,e=void 0===t?{}:t,r=e.favicon,o=(e.tagline,e.title),c=e.themeConfig.image,l=e.url,f=n.children,s=n.title,v=n.noFooter,h=n.description,p=n.image,D=n.keywords,g=(n.permalink,n.version),_=s?s+" | "+o:o,m=p||c,y=l+Object(F.a)(m),b=Object(F.a)(r),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return u.a.createElement(M.a,null,u.a.createElement(W.a,null,u.a.createElement(a.a,null,u.a.createElement("html",{lang:"en"}),u.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&u.a.createElement("title",null,_),_&&u.a.createElement("meta",{property:"og:title",content:_}),r&&u.a.createElement("link",{rel:"shortcut icon",href:b}),h&&u.a.createElement("meta",{name:"description",content:h}),h&&u.a.createElement("meta",{property:"og:description",content:h}),g&&u.a.createElement("meta",{name:"docsearch:version",content:g}),D&&D.length&&u.a.createElement("meta",{name:"keywords",content:D.join(",")}),m&&u.a.createElement("meta",{property:"og:image",content:y}),m&&u.a.createElement("meta",{property:"twitter:image",content:y}),m&&u.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),w&&u.a.createElement("meta",{property:"og:url",content:w}),u.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&u.a.createElement("link",{rel:"canonical",href:w})),u.a.createElement(i.a,null),u.a.createElement(B,null),u.a.createElement("div",{className:"main-wrapper"},f),!v&&u.a.createElement(T,null)))}},442:function(n,t,e){"use strict";var r=e(9),u=e(0),i=e.n(u),a=e(415),o=e.n(a),c=e(428),l=(e(139),e(140)),f=e.n(l);t.a=function(n){return function(t){var e,u=t.id,a=Object(r.a)(t,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,v=(s=void 0===s?{}:s).navbar,h=(v=void 0===v?{}:v).hideOnScroll,d=void 0!==h&&h;return u?i.a.createElement(n,a,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(e={},e[f.a.enhancedAnchor]=!d,e)),id:u}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+u,title:"Direct link to heading"},"#"),a.children):i.a.createElement(n,a)}}},443:function(n,t,e){(function(n,r){var u;(function(){var i="Expected a function",a="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",v="[object Error]",h="[object Function]",d="[object GeneratorFunction]",p="[object Map]",D="[object Number]",g="[object Object]",_="[object RegExp]",m="[object Set]",y="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",C="[object Float32Array]",k="[object Float64Array]",A="[object Int8Array]",x="[object Int16Array]",j="[object Int32Array]",O="[object Uint8Array]",N="[object Uint16Array]",B="[object Uint32Array]",I=/\b__p \+= '';/g,S=/\b(__p \+=) '' \+/g,L=/(__e\(.*?\)|\b__t\)) \+\n'';/g,R=/&(?:amp|lt|gt|quot|#39);/g,z=/[&<>"']/g,T=RegExp(R.source),W=RegExp(z.source),M=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,P=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,V=/[\\^$.*+?()[\]{}|]/g,Z=RegExp(V.source),K=/^\s+|\s+$/g,H=/^\s+/,Q=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,nn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tn=/\\(\\)?/g,en=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,rn=/\w*$/,un=/^[-+]0x[0-9a-f]+$/i,an=/^0b[01]+$/i,on=/^\[object .+?Constructor\]$/,cn=/^0o[0-7]+$/i,ln=/^(?:0|[1-9]\d*)$/,fn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,sn=/($^)/,vn=/['\n\r\u2028\u2029\\]/g,hn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",dn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pn="[\\ud800-\\udfff]",Dn="["+dn+"]",gn="["+hn+"]",_n="\\d+",mn="[\\u2700-\\u27bf]",yn="[a-z\\xdf-\\xf6\\xf8-\\xff]",bn="[^\\ud800-\\udfff"+dn+_n+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",En="\\ud83c[\\udffb-\\udfff]",wn="[^\\ud800-\\udfff]",Fn="(?:\\ud83c[\\udde6-\\uddff]){2}",Cn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="[A-Z\\xc0-\\xd6\\xd8-\\xde]",An="(?:"+yn+"|"+bn+")",xn="(?:"+kn+"|"+bn+")",jn="(?:"+gn+"|"+En+")"+"?",On="[\\ufe0e\\ufe0f]?"+jn+("(?:\\u200d(?:"+[wn,Fn,Cn].join("|")+")[\\ufe0e\\ufe0f]?"+jn+")*"),Nn="(?:"+[mn,Fn,Cn].join("|")+")"+On,Bn="(?:"+[wn+gn+"?",gn,Fn,Cn,pn].join("|")+")",In=RegExp("['\u2019]","g"),Sn=RegExp(gn,"g"),Ln=RegExp(En+"(?="+En+")|"+Bn+On,"g"),Rn=RegExp([kn+"?"+yn+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[Dn,kn,"$"].join("|")+")",xn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[Dn,kn+An,"$"].join("|")+")",kn+"?"+An+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",kn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_n,Nn].join("|"),"g"),zn=RegExp("[\\u200d\\ud800-\\udfff"+hn+"\\ufe0e\\ufe0f]"),Tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,Un={};Un[C]=Un[k]=Un[A]=Un[x]=Un[j]=Un[O]=Un["[object Uint8ClampedArray]"]=Un[N]=Un[B]=!0,Un[c]=Un[l]=Un[w]=Un[f]=Un[F]=Un[s]=Un[v]=Un[h]=Un[p]=Un[D]=Un[g]=Un[_]=Un[m]=Un[y]=Un[E]=!1;var Pn={};Pn[c]=Pn[l]=Pn[w]=Pn[F]=Pn[f]=Pn[s]=Pn[C]=Pn[k]=Pn[A]=Pn[x]=Pn[j]=Pn[p]=Pn[D]=Pn[g]=Pn[_]=Pn[m]=Pn[y]=Pn[b]=Pn[O]=Pn["[object Uint8ClampedArray]"]=Pn[N]=Pn[B]=!0,Pn[v]=Pn[h]=Pn[E]=!1;var $n={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},qn=parseFloat,Gn=parseInt,Vn="object"==typeof n&&n&&n.Object===Object&&n,Zn="object"==typeof self&&self&&self.Object===Object&&self,Kn=Vn||Zn||Function("return this")(),Hn=t&&!t.nodeType&&t,Qn=Hn&&"object"==typeof r&&r&&!r.nodeType&&r,Jn=Qn&&Qn.exports===Hn,Yn=Jn&&Vn.process,Xn=function(){try{var n=Qn&&Qn.require&&Qn.require("util").types;return n||Yn&&Yn.binding&&Yn.binding("util")}catch(t){}}(),nt=Xn&&Xn.isArrayBuffer,tt=Xn&&Xn.isDate,et=Xn&&Xn.isMap,rt=Xn&&Xn.isRegExp,ut=Xn&&Xn.isSet,it=Xn&&Xn.isTypedArray;function at(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function ot(n,t,e,r){for(var u=-1,i=null==n?0:n.length;++u-1}function ht(n,t,e){for(var r=-1,u=null==n?0:n.length;++r-1;);return e}function Lt(n,t){for(var e=n.length;e--&&Et(t,n[e],0)>-1;);return e}function Rt(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}var zt=At({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Tt=At({"&":"&","<":"<",">":">",'"':""","'":"'"});function Wt(n){return"\\"+$n[n]}function Mt(n){return zn.test(n)}function Ut(n){var t=-1,e=Array(n.size);return n.forEach((function(n,r){e[++t]=[r,n]})),e}function Pt(n,t){return function(e){return n(t(e))}}function $t(n,t){for(var e=-1,r=n.length,u=0,i=[];++e",""":'"',"'":"'"});var Ht=function n(t){var e,r=(t=null==t?Kn:Ht.defaults(Kn.Object(),t,Ht.pick(Kn,Wn))).Array,u=t.Date,hn=t.Error,dn=t.Function,pn=t.Math,Dn=t.Object,gn=t.RegExp,_n=t.String,mn=t.TypeError,yn=r.prototype,bn=dn.prototype,En=Dn.prototype,wn=t["__core-js_shared__"],Fn=bn.toString,Cn=En.hasOwnProperty,kn=0,An=(e=/[^.]+$/.exec(wn&&wn.keys&&wn.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",xn=En.toString,jn=Fn.call(Dn),On=Kn._,Nn=gn("^"+Fn.call(Cn).replace(V,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Bn=Jn?t.Buffer:void 0,Ln=t.Symbol,zn=t.Uint8Array,$n=Bn?Bn.allocUnsafe:void 0,Vn=Pt(Dn.getPrototypeOf,Dn),Zn=Dn.create,Hn=En.propertyIsEnumerable,Qn=yn.splice,Yn=Ln?Ln.isConcatSpreadable:void 0,Xn=Ln?Ln.iterator:void 0,mt=Ln?Ln.toStringTag:void 0,At=function(){try{var n=Xu(Dn,"defineProperty");return n({},"",{}),n}catch(t){}}(),Qt=t.clearTimeout!==Kn.clearTimeout&&t.clearTimeout,Jt=u&&u.now!==Kn.Date.now&&u.now,Yt=t.setTimeout!==Kn.setTimeout&&t.setTimeout,Xt=pn.ceil,ne=pn.floor,te=Dn.getOwnPropertySymbols,ee=Bn?Bn.isBuffer:void 0,re=t.isFinite,ue=yn.join,ie=Pt(Dn.keys,Dn),ae=pn.max,oe=pn.min,ce=u.now,le=t.parseInt,fe=pn.random,se=yn.reverse,ve=Xu(t,"DataView"),he=Xu(t,"Map"),de=Xu(t,"Promise"),pe=Xu(t,"Set"),De=Xu(t,"WeakMap"),ge=Xu(Dn,"create"),_e=De&&new De,me={},ye=ki(ve),be=ki(he),Ee=ki(de),we=ki(pe),Fe=ki(De),Ce=Ln?Ln.prototype:void 0,ke=Ce?Ce.valueOf:void 0,Ae=Ce?Ce.toString:void 0;function xe(n){if($a(n)&&!Ba(n)&&!(n instanceof Be)){if(n instanceof Ne)return n;if(Cn.call(n,"__wrapped__"))return Ai(n)}return new Ne(n)}var je=function(){function n(){}return function(t){if(!Pa(t))return{};if(Zn)return Zn(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}();function Oe(){}function Ne(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Be(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Ie(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Qe(n,t,e,r,u,i){var a,o=1&t,l=2&t,v=4&t;if(e&&(a=u?e(n,r,u,i):e(n)),void 0!==a)return a;if(!Pa(n))return n;var E=Ba(n);if(E){if(a=function(n){var t=n.length,e=new n.constructor(t);t&&"string"==typeof n[0]&&Cn.call(n,"index")&&(e.index=n.index,e.input=n.input);return e}(n),!o)return gu(n,a)}else{var I=ei(n),S=I==h||I==d;if(Ra(n))return su(n,o);if(I==g||I==c||S&&!u){if(a=l||S?{}:ui(n),!o)return l?function(n,t){return _u(n,ti(n),t)}(n,function(n,t){return n&&_u(t,bo(t),n)}(a,n)):function(n,t){return _u(n,ni(n),t)}(n,Ve(a,n))}else{if(!Pn[I])return u?n:{};a=function(n,t,e){var r=n.constructor;switch(t){case w:return vu(n);case f:case s:return new r(+n);case F:return function(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case C:case k:case A:case x:case j:case O:case"[object Uint8ClampedArray]":case N:case B:return hu(n,e);case p:return new r;case D:case y:return new r(n);case _:return function(n){var t=new n.constructor(n.source,rn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case m:return new r;case b:return u=n,ke?Dn(ke.call(u)):{}}var u}(n,I,o)}}i||(i=new ze);var L=i.get(n);if(L)return L;i.set(n,a),Ka(n)?n.forEach((function(r){a.add(Qe(r,t,e,r,n,i))})):qa(n)&&n.forEach((function(r,u){a.set(u,Qe(r,t,e,u,n,i))}));var R=E?void 0:(v?l?Vu:Gu:l?bo:yo)(n);return ct(R||n,(function(r,u){R&&(r=n[u=r]),$e(a,u,Qe(r,t,e,u,n,i))})),a}function Je(n,t,e){var r=e.length;if(null==n)return!r;for(n=Dn(n);r--;){var u=e[r],i=t[u],a=n[u];if(void 0===a&&!(u in n)||!i(a))return!1}return!0}function Ye(n,t,e){if("function"!=typeof n)throw new mn(i);return mi((function(){n.apply(void 0,e)}),t)}function Xe(n,t,e,r){var u=-1,i=vt,a=!0,o=n.length,c=[],l=t.length;if(!o)return c;e&&(t=dt(t,Nt(e))),r?(i=ht,a=!1):t.length>=200&&(i=It,a=!1,t=new Re(t));n:for(;++u-1},Se.prototype.set=function(n,t){var e=this.__data__,r=qe(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},Le.prototype.clear=function(){this.size=0,this.__data__={hash:new Ie,map:new(he||Se),string:new Ie}},Le.prototype.delete=function(n){var t=Ju(this,n).delete(n);return this.size-=t?1:0,t},Le.prototype.get=function(n){return Ju(this,n).get(n)},Le.prototype.has=function(n){return Ju(this,n).has(n)},Le.prototype.set=function(n,t){var e=Ju(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Re.prototype.add=Re.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Re.prototype.has=function(n){return this.__data__.has(n)},ze.prototype.clear=function(){this.__data__=new Se,this.size=0},ze.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},ze.prototype.get=function(n){return this.__data__.get(n)},ze.prototype.has=function(n){return this.__data__.has(n)},ze.prototype.set=function(n,t){var e=this.__data__;if(e instanceof Se){var r=e.__data__;if(!he||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new Le(r)}return e.set(n,t),this.size=e.size,this};var nr=bu(cr),tr=bu(lr,!0);function er(n,t){var e=!0;return nr(n,(function(n,r,u){return e=!!t(n,r,u)})),e}function rr(n,t,e){for(var r=-1,u=n.length;++r0&&e(o)?t>1?ir(o,t-1,e,r,u):pt(u,o):r||(u[u.length]=o)}return u}var ar=Eu(),or=Eu(!0);function cr(n,t){return n&&ar(n,t,yo)}function lr(n,t){return n&&or(n,t,yo)}function fr(n,t){return st(t,(function(t){return Wa(n[t])}))}function sr(n,t){for(var e=0,r=(t=ou(t,n)).length;null!=n&&et}function pr(n,t){return null!=n&&Cn.call(n,t)}function Dr(n,t){return null!=n&&t in Dn(n)}function gr(n,t,e){for(var u=e?ht:vt,i=n[0].length,a=n.length,o=a,c=r(a),l=1/0,f=[];o--;){var s=n[o];o&&t&&(s=dt(s,Nt(t))),l=oe(s.length,l),c[o]=!e&&(t||i>=120&&s.length>=120)?new Re(o&&s):void 0}s=n[0];var v=-1,h=c[0];n:for(;++v=o)return c;var l=e[r];return c*("desc"==l?-1:1)}}return n.index-t.index}(n,t,e)}))}function Ir(n,t,e){for(var r=-1,u=t.length,i={};++r-1;)o!==n&&Qn.call(o,c,1),Qn.call(n,c,1);return n}function Lr(n,t){for(var e=n?t.length:0,r=e-1;e--;){var u=t[e];if(e==r||u!==i){var i=u;ai(u)?Qn.call(n,u,1):Xr(n,u)}}return n}function Rr(n,t){return n+ne(fe()*(t-n+1))}function zr(n,t){var e="";if(!n||t<1||t>9007199254740991)return e;do{t%2&&(e+=n),(t=ne(t/2))&&(n+=n)}while(t);return e}function Tr(n,t){return yi(di(n,t,Vo),n+"")}function Wr(n){return We(jo(n))}function Mr(n,t){var e=jo(n);return wi(e,He(t,0,e.length))}function Ur(n,t,e,r){if(!Pa(n))return n;for(var u=-1,i=(t=ou(t,n)).length,a=i-1,o=n;null!=o&&++ui?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var a=r(i);++u>>1,a=n[i];null!==a&&!Qa(a)&&(e?a<=t:a=200){var l=t?null:zu(n);if(l)return qt(l);a=!1,u=It,c=new Re}else c=t?[]:o;n:for(;++r=r?n:Gr(n,t,e)}var fu=Qt||function(n){return Kn.clearTimeout(n)};function su(n,t){if(t)return n.slice();var e=n.length,r=$n?$n(e):new n.constructor(e);return n.copy(r),r}function vu(n){var t=new n.constructor(n.byteLength);return new zn(t).set(new zn(n)),t}function hu(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function du(n,t){if(n!==t){var e=void 0!==n,r=null===n,u=n==n,i=Qa(n),a=void 0!==t,o=null===t,c=t==t,l=Qa(t);if(!o&&!l&&!i&&n>t||i&&a&&c&&!o&&!l||r&&a&&c||!e&&c||!u)return 1;if(!r&&!i&&!l&&n1?e[u-1]:void 0,a=u>2?e[2]:void 0;for(i=n.length>3&&"function"==typeof i?(u--,i):void 0,a&&oi(e[0],e[1],a)&&(i=u<3?void 0:i,u=1),t=Dn(t);++r-1?u[i?t[a]:a]:void 0}}function Au(n){return qu((function(t){var e=t.length,r=e,u=Ne.prototype.thru;for(n&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new mn(i);if(u&&!o&&"wrapper"==Ku(a))var o=new Ne([],!0)}for(r=o?r:e;++r1&&m.reverse(),s&&l<_&&(m.length=l),this&&this!==Kn&&this instanceof g&&(C=D||Cu(C)),C.apply(F,m)}}function ju(n,t){return function(e,r){return function(n,t,e,r){return cr(n,(function(n,u,i){t(r,e(n),u,i)})),r}(e,n,t(r),{})}}function Ou(n,t){return function(e,r){var u;if(void 0===e&&void 0===r)return t;if(void 0!==e&&(u=e),void 0!==r){if(void 0===u)return r;"string"==typeof e||"string"==typeof r?(e=Jr(e),r=Jr(r)):(e=Qr(e),r=Qr(r)),u=n(e,r)}return u}}function Nu(n){return qu((function(t){return t=dt(t,Nt(Qu())),Tr((function(e){var r=this;return n(t,(function(n){return at(n,r,e)}))}))}))}function Bu(n,t){var e=(t=void 0===t?" ":Jr(t)).length;if(e<2)return e?zr(t,n):t;var r=zr(t,Xt(n/Vt(t)));return Mt(t)?lu(Zt(r),0,n).join(""):r.slice(0,n)}function Iu(n){return function(t,e,u){return u&&"number"!=typeof u&&oi(t,e,u)&&(e=u=void 0),t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e,u){for(var i=-1,a=ae(Xt((t-n)/(e||1)),0),o=r(a);a--;)o[u?a:++i]=n,n+=e;return o}(t,e,u=void 0===u?to))return!1;var l=i.get(n);if(l&&i.get(t))return l==t;var f=-1,s=!0,v=2&e?new Re:void 0;for(i.set(n,t),i.set(t,n);++f-1&&n%1==0&&n1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(J,"{\n/* [wrapped with "+t+"] */\n")}(r,function(n,t){return ct(o,(function(e){var r="_."+e[0];t&e[1]&&!vt(n,r)&&n.push(r)})),n.sort()}(function(n){var t=n.match(Y);return t?t[1].split(X):[]}(r),e)))}function Ei(n){var t=0,e=0;return function(){var r=ce(),u=16-(r-e);if(e=r,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}function wi(n,t){var e=-1,r=n.length,u=r-1;for(t=void 0===t?r:t;++e1?n[t-1]:void 0;return e="function"==typeof e?(n.pop(),e):void 0,Zi(n,e)}));function na(n){var t=xe(n);return t.__chain__=!0,t}function ta(n,t){return t(n)}var ea=qu((function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,u=function(t){return Ke(t,n)};return!(t>1||this.__actions__.length)&&r instanceof Be&&ai(e)?((r=r.slice(e,+e+(t?1:0))).__actions__.push({func:ta,args:[u],thisArg:void 0}),new Ne(r,this.__chain__).thru((function(n){return t&&!n.length&&n.push(void 0),n}))):this.thru(u)}));var ra=mu((function(n,t,e){Cn.call(n,e)?++n[e]:Ze(n,e,1)}));var ua=ku(Ni),ia=ku(Bi);function aa(n,t){return(Ba(n)?ct:nr)(n,Qu(t,3))}function oa(n,t){return(Ba(n)?lt:tr)(n,Qu(t,3))}var ca=mu((function(n,t,e){Cn.call(n,e)?n[e].push(t):Ze(n,e,[t])}));var la=Tr((function(n,t,e){var u=-1,i="function"==typeof t,a=Sa(n)?r(n.length):[];return nr(n,(function(n){a[++u]=i?at(t,n,e):_r(n,t,e)})),a})),fa=mu((function(n,t,e){Ze(n,e,t)}));function sa(n,t){return(Ba(n)?dt:Ar)(n,Qu(t,3))}var va=mu((function(n,t,e){n[e?0:1].push(t)}),(function(){return[[],[]]}));var ha=Tr((function(n,t){if(null==n)return[];var e=t.length;return e>1&&oi(n,t[0],t[1])?t=[]:e>2&&oi(t[0],t[1],t[2])&&(t=[t[0]]),Br(n,ir(t,1),[])})),da=Jt||function(){return Kn.Date.now()};function pa(n,t,e){return t=e?void 0:t,Wu(n,128,void 0,void 0,void 0,void 0,t=n&&null==t?n.length:t)}function Da(n,t){var e;if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=void 0),e}}var ga=Tr((function(n,t,e){var r=1;if(e.length){var u=$t(e,Hu(ga));r|=32}return Wu(n,r,t,e,u)})),_a=Tr((function(n,t,e){var r=3;if(e.length){var u=$t(e,Hu(_a));r|=32}return Wu(t,r,n,e,u)}));function ma(n,t,e){var r,u,a,o,c,l,f=0,s=!1,v=!1,h=!0;if("function"!=typeof n)throw new mn(i);function d(t){var e=r,i=u;return r=u=void 0,f=t,o=n.apply(i,e)}function p(n){return f=n,c=mi(g,t),s?d(n):o}function D(n){var e=n-l;return void 0===l||e>=t||e<0||v&&n-f>=a}function g(){var n=da();if(D(n))return _(n);c=mi(g,function(n){var e=t-(n-l);return v?oe(e,a-(n-f)):e}(n))}function _(n){return c=void 0,h&&r?d(n):(r=u=void 0,o)}function m(){var n=da(),e=D(n);if(r=arguments,u=this,l=n,e){if(void 0===c)return p(l);if(v)return fu(c),c=mi(g,t),d(l)}return void 0===c&&(c=mi(g,t)),o}return t=uo(t)||0,Pa(e)&&(s=!!e.leading,a=(v="maxWait"in e)?ae(uo(e.maxWait)||0,t):a,h="trailing"in e?!!e.trailing:h),m.cancel=function(){void 0!==c&&fu(c),f=0,r=l=u=c=void 0},m.flush=function(){return void 0===c?o:_(da())},m}var ya=Tr((function(n,t){return Ye(n,1,t)})),ba=Tr((function(n,t,e){return Ye(n,uo(t)||0,e)}));function Ea(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new mn(i);var e=function(){var r=arguments,u=t?t.apply(this,r):r[0],i=e.cache;if(i.has(u))return i.get(u);var a=n.apply(this,r);return e.cache=i.set(u,a)||i,a};return e.cache=new(Ea.Cache||Le),e}function wa(n){if("function"!=typeof n)throw new mn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Ea.Cache=Le;var Fa=cu((function(n,t){var e=(t=1==t.length&&Ba(t[0])?dt(t[0],Nt(Qu())):dt(ir(t,1),Nt(Qu()))).length;return Tr((function(r){for(var u=-1,i=oe(r.length,e);++u=t})),Na=mr(function(){return arguments}())?mr:function(n){return $a(n)&&Cn.call(n,"callee")&&!Hn.call(n,"callee")},Ba=r.isArray,Ia=nt?Nt(nt):function(n){return $a(n)&&hr(n)==w};function Sa(n){return null!=n&&Ua(n.length)&&!Wa(n)}function La(n){return $a(n)&&Sa(n)}var Ra=ee||ic,za=tt?Nt(tt):function(n){return $a(n)&&hr(n)==s};function Ta(n){if(!$a(n))return!1;var t=hr(n);return t==v||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Va(n)}function Wa(n){if(!Pa(n))return!1;var t=hr(n);return t==h||t==d||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ma(n){return"number"==typeof n&&n==eo(n)}function Ua(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=9007199254740991}function Pa(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function $a(n){return null!=n&&"object"==typeof n}var qa=et?Nt(et):function(n){return $a(n)&&ei(n)==p};function Ga(n){return"number"==typeof n||$a(n)&&hr(n)==D}function Va(n){if(!$a(n)||hr(n)!=g)return!1;var t=Vn(n);if(null===t)return!0;var e=Cn.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&Fn.call(e)==jn}var Za=rt?Nt(rt):function(n){return $a(n)&&hr(n)==_};var Ka=ut?Nt(ut):function(n){return $a(n)&&ei(n)==m};function Ha(n){return"string"==typeof n||!Ba(n)&&$a(n)&&hr(n)==y}function Qa(n){return"symbol"==typeof n||$a(n)&&hr(n)==b}var Ja=it?Nt(it):function(n){return $a(n)&&Ua(n.length)&&!!Un[hr(n)]};var Ya=Su(kr),Xa=Su((function(n,t){return n<=t}));function no(n){if(!n)return[];if(Sa(n))return Ha(n)?Zt(n):gu(n);if(Xn&&n[Xn])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[Xn]());var t=ei(n);return(t==p?Ut:t==m?qt:jo)(n)}function to(n){return n?(n=uo(n))===1/0||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function eo(n){var t=to(n),e=t%1;return t==t?e?t-e:t:0}function ro(n){return n?He(eo(n),0,4294967295):0}function uo(n){if("number"==typeof n)return n;if(Qa(n))return NaN;if(Pa(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Pa(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(K,"");var e=an.test(n);return e||cn.test(n)?Gn(n.slice(2),e?2:8):un.test(n)?NaN:+n}function io(n){return _u(n,bo(n))}function ao(n){return null==n?"":Jr(n)}var oo=yu((function(n,t){if(si(t)||Sa(t))_u(t,yo(t),n);else for(var e in t)Cn.call(t,e)&&$e(n,e,t[e])})),co=yu((function(n,t){_u(t,bo(t),n)})),lo=yu((function(n,t,e,r){_u(t,bo(t),n,r)})),fo=yu((function(n,t,e,r){_u(t,yo(t),n,r)})),so=qu(Ke);var vo=Tr((function(n,t){n=Dn(n);var e=-1,r=t.length,u=r>2?t[2]:void 0;for(u&&oi(t[0],t[1],u)&&(r=1);++e1),t})),_u(n,Vu(n),e),r&&(e=Qe(e,7,Pu));for(var u=t.length;u--;)Xr(e,t[u]);return e}));var Co=qu((function(n,t){return null==n?{}:function(n,t){return Ir(n,t,(function(t,e){return Do(n,e)}))}(n,t)}));function ko(n,t){if(null==n)return{};var e=dt(Vu(n),(function(n){return[n]}));return t=Qu(t),Ir(n,e,(function(n,e){return t(n,e[0])}))}var Ao=Tu(yo),xo=Tu(bo);function jo(n){return null==n?[]:Bt(n,yo(n))}var Oo=Fu((function(n,t,e){return t=t.toLowerCase(),n+(e?No(t):t)}));function No(n){return Wo(ao(n).toLowerCase())}function Bo(n){return(n=ao(n))&&n.replace(fn,zt).replace(Sn,"")}var Io=Fu((function(n,t,e){return n+(e?"-":"")+t.toLowerCase()})),So=Fu((function(n,t,e){return n+(e?" ":"")+t.toLowerCase()})),Lo=wu("toLowerCase");var Ro=Fu((function(n,t,e){return n+(e?"_":"")+t.toLowerCase()}));var zo=Fu((function(n,t,e){return n+(e?" ":"")+Wo(t)}));var To=Fu((function(n,t,e){return n+(e?" ":"")+t.toUpperCase()})),Wo=wu("toUpperCase");function Mo(n,t,e){return n=ao(n),void 0===(t=e?void 0:t)?function(n){return Tn.test(n)}(n)?function(n){return n.match(Rn)||[]}(n):function(n){return n.match(nn)||[]}(n):n.match(t)||[]}var Uo=Tr((function(n,t){try{return at(n,void 0,t)}catch(e){return Ta(e)?e:new hn(e)}})),Po=qu((function(n,t){return ct(t,(function(t){t=Ci(t),Ze(n,t,ga(n[t],n))})),n}));function $o(n){return function(){return n}}var qo=Au(),Go=Au(!0);function Vo(n){return n}function Zo(n){return wr("function"==typeof n?n:Qe(n,1))}var Ko=Tr((function(n,t){return function(e){return _r(e,n,t)}})),Ho=Tr((function(n,t){return function(e){return _r(n,e,t)}}));function Qo(n,t,e){var r=yo(t),u=fr(t,r);null!=e||Pa(t)&&(u.length||!r.length)||(e=t,t=n,n=this,u=fr(t,yo(t)));var i=!(Pa(e)&&"chain"in e&&!e.chain),a=Wa(n);return ct(u,(function(e){var r=t[e];n[e]=r,a&&(n.prototype[e]=function(){var t=this.__chain__;if(i||t){var e=n(this.__wrapped__),u=e.__actions__=gu(this.__actions__);return u.push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,pt([this.value()],arguments))})})),n}function Jo(){}var Yo=Nu(dt),Xo=Nu(ft),nc=Nu(_t);function tc(n){return ci(n)?kt(Ci(n)):function(n){return function(t){return sr(t,n)}}(n)}var ec=Iu(),rc=Iu(!0);function uc(){return[]}function ic(){return!1}var ac=Ou((function(n,t){return n+t}),0),oc=Ru("ceil"),cc=Ou((function(n,t){return n/t}),1),lc=Ru("floor");var fc,sc=Ou((function(n,t){return n*t}),1),vc=Ru("round"),hc=Ou((function(n,t){return n-t}),0);return xe.after=function(n,t){if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){if(--n<1)return t.apply(this,arguments)}},xe.ary=pa,xe.assign=oo,xe.assignIn=co,xe.assignInWith=lo,xe.assignWith=fo,xe.at=so,xe.before=Da,xe.bind=ga,xe.bindAll=Po,xe.bindKey=_a,xe.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Ba(n)?n:[n]},xe.chain=na,xe.chunk=function(n,t,e){t=(e?oi(n,t,e):void 0===t)?1:ae(eo(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,a=0,o=r(Xt(u/t));iu?0:u+e),(r=void 0===r||r>u?u:eo(r))<0&&(r+=u),r=e>r?0:ro(r);e>>0)?(n=ao(n))&&("string"==typeof t||null!=t&&!Za(t))&&!(t=Jr(t))&&Mt(n)?lu(Zt(n),0,e):n.split(t,e):[]},xe.spread=function(n,t){if("function"!=typeof n)throw new mn(i);return t=null==t?0:ae(eo(t),0),Tr((function(e){var r=e[t],u=lu(e,0,t);return r&&pt(u,r),at(n,this,u)}))},xe.tail=function(n){var t=null==n?0:n.length;return t?Gr(n,1,t):[]},xe.take=function(n,t,e){return n&&n.length?Gr(n,0,(t=e||void 0===t?1:eo(t))<0?0:t):[]},xe.takeRight=function(n,t,e){var r=null==n?0:n.length;return r?Gr(n,(t=r-(t=e||void 0===t?1:eo(t)))<0?0:t,r):[]},xe.takeRightWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3),!1,!0):[]},xe.takeWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3)):[]},xe.tap=function(n,t){return t(n),n},xe.throttle=function(n,t,e){var r=!0,u=!0;if("function"!=typeof n)throw new mn(i);return Pa(e)&&(r="leading"in e?!!e.leading:r,u="trailing"in e?!!e.trailing:u),ma(n,t,{leading:r,maxWait:t,trailing:u})},xe.thru=ta,xe.toArray=no,xe.toPairs=Ao,xe.toPairsIn=xo,xe.toPath=function(n){return Ba(n)?dt(n,Ci):Qa(n)?[n]:gu(Fi(ao(n)))},xe.toPlainObject=io,xe.transform=function(n,t,e){var r=Ba(n),u=r||Ra(n)||Ja(n);if(t=Qu(t,4),null==e){var i=n&&n.constructor;e=u?r?new i:[]:Pa(n)&&Wa(i)?je(Vn(n)):{}}return(u?ct:cr)(n,(function(n,r,u){return t(e,n,r,u)})),e},xe.unary=function(n){return pa(n,1)},xe.union=$i,xe.unionBy=qi,xe.unionWith=Gi,xe.uniq=function(n){return n&&n.length?Yr(n):[]},xe.uniqBy=function(n,t){return n&&n.length?Yr(n,Qu(t,2)):[]},xe.uniqWith=function(n,t){return t="function"==typeof t?t:void 0,n&&n.length?Yr(n,void 0,t):[]},xe.unset=function(n,t){return null==n||Xr(n,t)},xe.unzip=Vi,xe.unzipWith=Zi,xe.update=function(n,t,e){return null==n?n:nu(n,t,au(e))},xe.updateWith=function(n,t,e,r){return r="function"==typeof r?r:void 0,null==n?n:nu(n,t,au(e),r)},xe.values=jo,xe.valuesIn=function(n){return null==n?[]:Bt(n,bo(n))},xe.without=Ki,xe.words=Mo,xe.wrap=function(n,t){return Ca(au(t),n)},xe.xor=Hi,xe.xorBy=Qi,xe.xorWith=Ji,xe.zip=Yi,xe.zipObject=function(n,t){return uu(n||[],t||[],$e)},xe.zipObjectDeep=function(n,t){return uu(n||[],t||[],Ur)},xe.zipWith=Xi,xe.entries=Ao,xe.entriesIn=xo,xe.extend=co,xe.extendWith=lo,Qo(xe,xe),xe.add=ac,xe.attempt=Uo,xe.camelCase=Oo,xe.capitalize=No,xe.ceil=oc,xe.clamp=function(n,t,e){return void 0===e&&(e=t,t=void 0),void 0!==e&&(e=(e=uo(e))==e?e:0),void 0!==t&&(t=(t=uo(t))==t?t:0),He(uo(n),t,e)},xe.clone=function(n){return Qe(n,4)},xe.cloneDeep=function(n){return Qe(n,5)},xe.cloneDeepWith=function(n,t){return Qe(n,5,t="function"==typeof t?t:void 0)},xe.cloneWith=function(n,t){return Qe(n,4,t="function"==typeof t?t:void 0)},xe.conformsTo=function(n,t){return null==t||Je(n,t,yo(t))},xe.deburr=Bo,xe.defaultTo=function(n,t){return null==n||n!=n?t:n},xe.divide=cc,xe.endsWith=function(n,t,e){n=ao(n),t=Jr(t);var r=n.length,u=e=void 0===e?r:He(eo(e),0,r);return(e-=t.length)>=0&&n.slice(e,u)==t},xe.eq=xa,xe.escape=function(n){return(n=ao(n))&&W.test(n)?n.replace(z,Tt):n},xe.escapeRegExp=function(n){return(n=ao(n))&&Z.test(n)?n.replace(V,"\\$&"):n},xe.every=function(n,t,e){var r=Ba(n)?ft:er;return e&&oi(n,t,e)&&(t=void 0),r(n,Qu(t,3))},xe.find=ua,xe.findIndex=Ni,xe.findKey=function(n,t){return yt(n,Qu(t,3),cr)},xe.findLast=ia,xe.findLastIndex=Bi,xe.findLastKey=function(n,t){return yt(n,Qu(t,3),lr)},xe.floor=lc,xe.forEach=aa,xe.forEachRight=oa,xe.forIn=function(n,t){return null==n?n:ar(n,Qu(t,3),bo)},xe.forInRight=function(n,t){return null==n?n:or(n,Qu(t,3),bo)},xe.forOwn=function(n,t){return n&&cr(n,Qu(t,3))},xe.forOwnRight=function(n,t){return n&&lr(n,Qu(t,3))},xe.get=po,xe.gt=ja,xe.gte=Oa,xe.has=function(n,t){return null!=n&&ri(n,t,pr)},xe.hasIn=Do,xe.head=Si,xe.identity=Vo,xe.includes=function(n,t,e,r){n=Sa(n)?n:jo(n),e=e&&!r?eo(e):0;var u=n.length;return e<0&&(e=ae(u+e,0)),Ha(n)?e<=u&&n.indexOf(t,e)>-1:!!u&&Et(n,t,e)>-1},xe.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=null==e?0:eo(e);return u<0&&(u=ae(r+u,0)),Et(n,t,u)},xe.inRange=function(n,t,e){return t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e){return n>=oe(t,e)&&n=-9007199254740991&&n<=9007199254740991},xe.isSet=Ka,xe.isString=Ha,xe.isSymbol=Qa,xe.isTypedArray=Ja,xe.isUndefined=function(n){return void 0===n},xe.isWeakMap=function(n){return $a(n)&&ei(n)==E},xe.isWeakSet=function(n){return $a(n)&&"[object WeakSet]"==hr(n)},xe.join=function(n,t){return null==n?"":ue.call(n,t)},xe.kebabCase=Io,xe.last=Ti,xe.lastIndexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=r;return void 0!==e&&(u=(u=eo(e))<0?ae(r+u,0):oe(u,r-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,u):bt(n,Ft,u,!0)},xe.lowerCase=So,xe.lowerFirst=Lo,xe.lt=Ya,xe.lte=Xa,xe.max=function(n){return n&&n.length?rr(n,Vo,dr):void 0},xe.maxBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),dr):void 0},xe.mean=function(n){return Ct(n,Vo)},xe.meanBy=function(n,t){return Ct(n,Qu(t,2))},xe.min=function(n){return n&&n.length?rr(n,Vo,kr):void 0},xe.minBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),kr):void 0},xe.stubArray=uc,xe.stubFalse=ic,xe.stubObject=function(){return{}},xe.stubString=function(){return""},xe.stubTrue=function(){return!0},xe.multiply=sc,xe.nth=function(n,t){return n&&n.length?Nr(n,eo(t)):void 0},xe.noConflict=function(){return Kn._===this&&(Kn._=On),this},xe.noop=Jo,xe.now=da,xe.pad=function(n,t,e){n=ao(n);var r=(t=eo(t))?Vt(n):0;if(!t||r>=t)return n;var u=(t-r)/2;return Bu(ne(u),e)+n+Bu(Xt(u),e)},xe.padEnd=function(n,t,e){n=ao(n);var r=(t=eo(t))?Vt(n):0;return t&&rt){var r=n;n=t,t=r}if(e||n%1||t%1){var u=fe();return oe(n+u*(t-n+qn("1e-"+((u+"").length-1))),t)}return Rr(n,t)},xe.reduce=function(n,t,e){var r=Ba(n)?Dt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,nr)},xe.reduceRight=function(n,t,e){var r=Ba(n)?gt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,tr)},xe.repeat=function(n,t,e){return t=(e?oi(n,t,e):void 0===t)?1:eo(t),zr(ao(n),t)},xe.replace=function(){var n=arguments,t=ao(n[0]);return n.length<3?t:t.replace(n[1],n[2])},xe.result=function(n,t,e){var r=-1,u=(t=ou(t,n)).length;for(u||(u=1,n=void 0);++r9007199254740991)return[];var e=4294967295,r=oe(n,4294967295);n-=4294967295;for(var u=Ot(r,t=Qu(t));++e=i)return n;var o=e-Vt(r);if(o<1)return r;var c=a?lu(a,0,o).join(""):n.slice(0,o);if(void 0===u)return c+r;if(a&&(o+=c.length-o),Za(u)){if(n.slice(o).search(u)){var l,f=c;for(u.global||(u=gn(u.source,ao(rn.exec(u))+"g")),u.lastIndex=0;l=u.exec(f);)var s=l.index;c=c.slice(0,void 0===s?o:s)}}else if(n.indexOf(Jr(u),o)!=o){var v=c.lastIndexOf(u);v>-1&&(c=c.slice(0,v))}return c+r},xe.unescape=function(n){return(n=ao(n))&&T.test(n)?n.replace(R,Kt):n},xe.uniqueId=function(n){var t=++kn;return ao(n)+t},xe.upperCase=To,xe.upperFirst=Wo,xe.each=aa,xe.eachRight=oa,xe.first=Si,Qo(xe,(fc={},cr(xe,(function(n,t){Cn.call(xe.prototype,t)||(fc[t]=n)})),fc),{chain:!1}),xe.VERSION="4.17.15",ct(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){xe[n].placeholder=xe})),ct(["drop","take"],(function(n,t){Be.prototype[n]=function(e){e=void 0===e?1:ae(eo(e),0);var r=this.__filtered__&&!t?new Be(this):this.clone();return r.__filtered__?r.__takeCount__=oe(e,r.__takeCount__):r.__views__.push({size:oe(e,4294967295),type:n+(r.__dir__<0?"Right":"")}),r},Be.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),ct(["filter","map","takeWhile"],(function(n,t){var e=t+1,r=1==e||3==e;Be.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Qu(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}})),ct(["head","last"],(function(n,t){var e="take"+(t?"Right":"");Be.prototype[n]=function(){return this[e](1).value()[0]}})),ct(["initial","tail"],(function(n,t){var e="drop"+(t?"":"Right");Be.prototype[n]=function(){return this.__filtered__?new Be(this):this[e](1)}})),Be.prototype.compact=function(){return this.filter(Vo)},Be.prototype.find=function(n){return this.filter(n).head()},Be.prototype.findLast=function(n){return this.reverse().find(n)},Be.prototype.invokeMap=Tr((function(n,t){return"function"==typeof n?new Be(this):this.map((function(e){return _r(e,n,t)}))})),Be.prototype.reject=function(n){return this.filter(wa(Qu(n)))},Be.prototype.slice=function(n,t){n=eo(n);var e=this;return e.__filtered__&&(n>0||t<0)?new Be(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),void 0!==t&&(e=(t=eo(t))<0?e.dropRight(-t):e.take(t-n)),e)},Be.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Be.prototype.toArray=function(){return this.take(4294967295)},cr(Be.prototype,(function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),u=xe[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);u&&(xe.prototype[t]=function(){var t=this.__wrapped__,a=r?[1]:arguments,o=t instanceof Be,c=a[0],l=o||Ba(t),f=function(n){var t=u.apply(xe,pt([n],a));return r&&s?t[0]:t};l&&e&&"function"==typeof c&&1!=c.length&&(o=l=!1);var s=this.__chain__,v=!!this.__actions__.length,h=i&&!s,d=o&&!v;if(!i&&l){t=d?t:new Be(this);var p=n.apply(t,a);return p.__actions__.push({func:ta,args:[f],thisArg:void 0}),new Ne(p,s)}return h&&d?n.apply(this,a):(p=this.thru(f),h?r?p.value()[0]:p.value():p)})})),ct(["pop","push","shift","sort","splice","unshift"],(function(n){var t=yn[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);xe.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var u=this.value();return t.apply(Ba(u)?u:[],n)}return this[e]((function(e){return t.apply(Ba(e)?e:[],n)}))}})),cr(Be.prototype,(function(n,t){var e=xe[t];if(e){var r=e.name+"";Cn.call(me,r)||(me[r]=[]),me[r].push({name:t,func:e})}})),me[xu(void 0,2).name]=[{name:"wrapper",func:void 0}],Be.prototype.clone=function(){var n=new Be(this.__wrapped__);return n.__actions__=gu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=gu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=gu(this.__views__),n},Be.prototype.reverse=function(){if(this.__filtered__){var n=new Be(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Be.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Ba(n),r=t<0,u=e?n.length:0,i=function(n,t,e){var r=-1,u=e.length;for(;++r=this.__values__.length;return{done:n,value:n?void 0:this.__values__[this.__index__++]}},xe.prototype.plant=function(n){for(var t,e=this;e instanceof Oe;){var r=Ai(e);r.__index__=0,r.__values__=void 0,t?u.__wrapped__=r:t=r;var u=r;e=e.__wrapped__}return u.__wrapped__=n,t},xe.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Be){var t=n;return this.__actions__.length&&(t=new Be(this)),(t=t.reverse()).__actions__.push({func:ta,args:[Pi],thisArg:void 0}),new Ne(t,this.__chain__)}return this.thru(Pi)},xe.prototype.toJSON=xe.prototype.valueOf=xe.prototype.value=function(){return eu(this.__wrapped__,this.__actions__)},xe.prototype.first=xe.prototype.head,Xn&&(xe.prototype[Xn]=function(){return this}),xe}();Kn._=Ht,void 0===(u=function(){return Ht}.call(t,e,t,r))||(r.exports=u)}).call(this)}).call(this,e(76),e(448)(n))},446:function(n,t,e){"use strict";var r=e(0),u=Object(r.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=u},447:function(n,t,e){"use strict";e.d(t,"a",(function(){return i}));e(77),e(465),e(431),e(78);var r=e(467),u=e.n(r);function i(n,t){var e=new u.a;return n.map((function(n){var r=n;return"string"==typeof n&&(r={label:n,permalink:"/blog/tags/"+e.slug(n)}),function(n,t){var e=n.label.split(": ",2),r=e[0],u=e[1],i="primary";switch(t){case"blog":case"guides":i=function(n){switch(n){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(r)}return{category:r,count:n.count,label:n.label,permalink:n.permalink,style:i,value:u}}(r,t)}))}},448:function(n,t){n.exports=function(n){return n.webpackPolyfill||(n.deprecate=function(){},n.paths=[],n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),n.webpackPolyfill=1),n}},457:function(n,t,e){var r=e(30),u=e(54),i=e(27),a=e(26),o=e(458);n.exports=function(n,t){var e=1==n,c=2==n,l=3==n,f=4==n,s=6==n,v=5==n||s,h=t||o;return function(t,o,d){for(var p,D,g=i(t),_=u(g),m=r(o,d,3),y=a(_.length),b=0,E=e?h(t,y):c?h(t,0):void 0;y>b;b++)if((v||b in _)&&(D=m(p=_[b],b,g),n))if(e)E[b]=D;else if(D)switch(n){case 3:return!0;case 5:return p;case 6:return b;case 2:E.push(p)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(n,t,e){var r=e(459);n.exports=function(n,t){return new(r(n))(t)}},459:function(n,t,e){var r=e(13),u=e(460),i=e(2)("species");n.exports=function(n){var t;return u(n)&&("function"!=typeof(t=n.constructor)||t!==Array&&!u(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(n,t,e){var r=e(23);n.exports=Array.isArray||function(n){return"Array"==r(n)}},466:function(n,t,e){"use strict";var r=e(0),u=e.n(r),i=e(422),a=e(415),o=e.n(a);t.a=function(n){var t=n.count,e=n.label,r=n.permalink,a=n.style,c=n.value,l=n.valueOnly;return u.a.createElement(i.a,{to:r+"/",className:o()("badge","badge--rounded","badge--"+a)},l?c:e,t&&u.a.createElement(u.a.Fragment,null," (",t,")"))}},467:function(n,t,e){var r=e(468);n.exports=o;var u=Object.hasOwnProperty,i=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function c(n,t){return"string"!=typeof n?"":(t||(n=n.toLowerCase()),n.trim().replace(a,"").replace(r(),"").replace(i,"-"))}o.prototype.slug=function(n,t){for(var e=c(n,!0===t),r=e;u.call(this.occurrences,e);)this.occurrences[r]++,e=r+"-"+this.occurrences[r];return this.occurrences[e]=0,e},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=c},468:function(n,t){n.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},472:function(n,t,e){"use strict";var r=e(1),u=e(0),i=e.n(u),a=(e(422),e(466)),o=e(415),c=e.n(o),l=e(447),f=e(141),s=e.n(f);t.a=function(n){var t,e=n.block,u=n.colorProfile,o=n.tags,f=n.valuesOnly,v=Object(l.a)(o,u);return i.a.createElement("div",{className:c()(s.a.tags,(t={},t[s.a.tagsBlock]=e,t))},v.map((function(n,t){return i.a.createElement(a.a,Object(r.a)({key:t,valueOnly:f},n))})))}},508:function(n,t,e){"use strict";e(29),e(22),e(21),e(52);var r=e(0),u=e.n(r),i=(e(420),e(431),e(422)),a=e(432),o=e.n(a),c=e(472),l=e(447),f=e(428),s=e(433);e(142);var v=function(n){var t=n.frontMatter,e=n.metadata,r=(n.isGuidePage,Object(s.a)().isDarkTheme),a=e.categories,v=(e.description,e.permalink),h=(e.readingTime,e.seriesPosition),d=e.tags,p=(t.author_github,t.cover_label),D=(t.last_modified_on,t.title),g=Object(l.a)(d,"guides"),_=g.find((function(n){return"domain"==n.category})),m=_?_.value:"default",y=g.find((function(n){return"language"==n.category})),b=y?y.value:null,E=g.find((function(n){return"framework"==n.category})),w=E?E.value:null,F=g.find((function(n){return"technology"==n.category})),C=F?F.value:null,k=g.find((function(n){return"cloud_provider"==n.category})),A=k?k.value:null,x=g.find((function(n){return"platform"==n.category})),j=x?x.value:null,O=g.find((function(n){return"source"==n.category})),N=O?O.value:null,B=g.find((function(n){return"sink"==n.category})),I=B?B.value:null,S=Object(f.a)().siteConfig.customFields.metadata,L=S.installation,R=S.sources,z=S.sinks,T=S.languages,W=S.frameworks,M=S.technologies,U=S.cloud_providers,P=L.platforms,$=j&&P[j],q=N&&R[N],G=I&&z[I],V=b&&T.find((function(n){return n.name===b})),Z=w&&W.find((function(n){return n.name===w})),K=C&&M.find((function(n){return n.name===C})),H=A&&U.find((function(n){return n.name===A})),Q=null!==($||q),J=null!=G,Y=null;Z?Y=r?Z.dark_logo_path:Z.logo_path:K?Y=r?K.dark_logo_path:K.logo_path:H?Y=r?H.dark_logo_path:H.logo_path:V?Y=r?V.dark_logo_path:V.logo_path:$?Y=$.logo_path:q&&(Y=q.logo_path);var X=null;return G&&(X=G.logo_path),u.a.createElement(i.a,{to:v+"/",className:"guide-item"},u.a.createElement("article",null,u.a.createElement("div",{className:"domain-bg domain-bg--"+m+" domain-bg--hover"},u.a.createElement("header",null,u.a.createElement("div",{className:"category"},a[0].name),u.a.createElement("h2",{title:D},h&&h+". ",p||D)),u.a.createElement("footer",null,Y&&u.a.createElement(o.a,{src:Y,className:"logo"}),!Y&&Q&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),X&&u.a.createElement(o.a,{src:X,className:"logo"}),!X&&J&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),!Y&&!X&&!Q&&!J&&u.a.createElement(c.a,{colorProfile:"guides",tags:d}),u.a.createElement("div",{className:"action"},"read now")))))},h=e(442),d=e(443),p=e.n(d),D=e(415),g=e.n(D);e(143);function _(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered,a=p()(e).map((function(n){return n.content.metadata.categories[t-1]})).uniqBy("permalink").sortBy("title").keyBy("permalink").value(),o=p.a.groupBy(e,(function(n){return n.content.metadata.categories[t-1].permalink})),c=Object(h.a)("h"+(t+1));return Object.keys(a).map((function(n,t){var e=o[n],l=a[n];return u.a.createElement("section",{key:t},u.a.createElement(c,{id:n},l.title),l.description&&u.a.createElement("div",{className:"sub-title"},l.description),u.a.createElement(m,{items:e,large:r,staggered:i}))}))}function m(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered;if(t)return u.a.createElement(_,{groupLevel:t,items:e});var a,o=(a=e,p.a.sortBy(a,["content.metadata.seriesPosition",function(n){return n.content.metadata.coverLabel.toLowerCase()}]));return u.a.createElement("div",{className:"guides"},u.a.createElement("div",{className:g()("guide-items",{"guide-items--l":r,"guide-items--staggered":i})},o.map((function(n){var t=n.content;return u.a.createElement(v,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:t.metadata.truncated},u.a.createElement(t,null))}))))}t.a=m}}]); \ No newline at end of file diff --git a/d9deea5f.de33b141.js.LICENSE.txt b/d9deea5f.47c2d25b.js.LICENSE.txt similarity index 100% rename from d9deea5f.de33b141.js.LICENSE.txt rename to d9deea5f.47c2d25b.js.LICENSE.txt diff --git a/d9deea5f.de33b141.js b/d9deea5f.de33b141.js deleted file mode 100644 index 37eaa0962c..0000000000 --- a/d9deea5f.de33b141.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see d9deea5f.de33b141.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[220],{372:function(n,t,e){"use strict";e.r(t);var r=e(0),u=e.n(r),i=e(437),a=e(508),o=e(422);t.default=function(n){var t=n.metadata.category,e=n.items;return u.a.createElement(i.a,{title:t.title+" Guides",description:"All "+t.title+" guides"},u.a.createElement("header",{className:"hero hero--clean"},u.a.createElement("div",{className:"container"},u.a.createElement("h1",null,t.title," Guides"),t.description&&u.a.createElement("div",{className:"hero--subtitle"},t.description),u.a.createElement("div",null,u.a.createElement(o.a,{to:"/guides"},"View All Guides")))),u.a.createElement("main",{className:"container container--s"},u.a.createElement(a.a,{items:e,staggered:null!=e[0].content.metadata.seriesPosition})))}},415:function(n,t,e){var r;!function(){"use strict";var e={}.hasOwnProperty;function u(){for(var n=[],t=0;t1?arguments[1]:void 0)}}),e(74)("find")},437:function(n,t,e){"use strict";e(449);var r=e(0),u=e.n(r),i=e(450),a=e(435),o=e(1),c=(e(438),e(439),e(451),e(422)),l=e(452),f=e(432),s=e.n(f),v=e(453),h=e.n(v),d=e(428),p=e(415),D=e.n(p),g=e(135),_=e.n(g),m=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.moon)})},y=function(){return u.a.createElement("span",{className:D()(_.a.toggle,_.a.sun)})},b=function(n){var t=Object(d.a)().isClient;return u.a.createElement(h.a,Object(o.a)({disabled:!t,icons:{checked:u.a.createElement(m,null),unchecked:u.a.createElement(y,null)}},n))};function E(){var n=Object(d.a)().siteConfig,t=(void 0===n?{}:n).customFields.metadata.latest_post,e=Date.parse(t.date),r=new Date,u=Math.abs(r-e),i=Math.ceil(u/864e5),a=null;return"undefined"!=typeof window&&(a=new Date(parseInt(window.localStorage.getItem("blogViewedAt")||"0"))),i<30&&(!a||a0&&u.a.createElement("div",{className:"row footer__links"},u.a.createElement("div",{className:"col col--5 footer__col"},u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement(s.a,{className:"navbar__logo",src:h,alt:"Qovery",width:"150",height:"auto"})),u.a.createElement("div",{className:"margin-bottom--md"},u.a.createElement("p",null,"Qovery is a Self-Service Infrastructure Platform Helping Ops and Engineers To Ship Faster.")),u.a.createElement("div",null,u.a.createElement("a",{href:"https://github.com/qovery",target:"_blank"},u.a.createElement("i",{className:"feather icon-github",alt:"Qovery's Github Repo"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://www.linkedin.com/company/qovery/",target:"_blank"},u.a.createElement("i",{className:"feather icon-rss",alt:"Qovery's Linkedin"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://twitter.com/qovery_",target:"_blank"},u.a.createElement("i",{className:"feather icon-twitter",alt:"Qovery's Twitter"})),"\xa0\xa0\xa0\xa0",u.a.createElement("a",{href:"https://discord.qovery.com",target:"_blank"},u.a.createElement("i",{className:"feather icon-message-circle",alt:"Qovery's Discord"})))),c.map((function(n,t){return u.a.createElement("div",{key:t,className:"col footer__col"},null!=n.title?u.a.createElement("h4",{className:"footer__title"},n.title):null,null!=n.items&&Array.isArray(n.items)&&n.items.length>0?u.a.createElement("ul",{className:"footer__items"},n.items.map((function(n,t){return n.html?u.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):u.a.createElement("li",{key:n.href||n.to,className:"footer__item"},u.a.createElement(R,n))}))):null)}))),(f||a)&&u.a.createElement("div",{className:"text--center"},f&&f.src&&u.a.createElement("div",{className:"margin-bottom--sm"},f.href?u.a.createElement("a",{href:f.href,target:"_blank",rel:"noopener noreferrer",className:L.a.footerLogoLink},u.a.createElement(z,{alt:f.alt,url:v})):u.a.createElement(z,{alt:f.alt,url:v})),u.a.createElement("small",null,a),u.a.createElement("br",null))))},W=e(454),M=e(455),U=e(3);e(138);t.a=function(n){var t=Object(d.a)().siteConfig,e=void 0===t?{}:t,r=e.favicon,o=(e.tagline,e.title),c=e.themeConfig.image,l=e.url,f=n.children,s=n.title,v=n.noFooter,h=n.description,p=n.image,D=n.keywords,g=(n.permalink,n.version),_=s?s+" | "+o:o,m=p||c,y=l+Object(F.a)(m),b=Object(F.a)(r),E=Object(U.h)(),w=E?"https://docs.qovery.com"+(E.pathname.endsWith("/")?E.pathname:E.pathname+"/"):null;return u.a.createElement(M.a,null,u.a.createElement(W.a,null,u.a.createElement(a.a,null,u.a.createElement("html",{lang:"en"}),u.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),_&&u.a.createElement("title",null,_),_&&u.a.createElement("meta",{property:"og:title",content:_}),r&&u.a.createElement("link",{rel:"shortcut icon",href:b}),h&&u.a.createElement("meta",{name:"description",content:h}),h&&u.a.createElement("meta",{property:"og:description",content:h}),g&&u.a.createElement("meta",{name:"docsearch:version",content:g}),D&&D.length&&u.a.createElement("meta",{name:"keywords",content:D.join(",")}),m&&u.a.createElement("meta",{property:"og:image",content:y}),m&&u.a.createElement("meta",{property:"twitter:image",content:y}),m&&u.a.createElement("meta",{name:"twitter:image:alt",content:"Image for "+_}),w&&u.a.createElement("meta",{property:"og:url",content:w}),u.a.createElement("meta",{name:"twitter:card",content:"summary"}),w&&u.a.createElement("link",{rel:"canonical",href:w})),u.a.createElement(i.a,null),u.a.createElement(B,null),u.a.createElement("div",{className:"main-wrapper"},f),!v&&u.a.createElement(T,null)))}},442:function(n,t,e){"use strict";var r=e(9),u=e(0),i=e.n(u),a=e(415),o=e.n(a),c=e(428),l=(e(139),e(140)),f=e.n(l);t.a=function(n){return function(t){var e,u=t.id,a=Object(r.a)(t,["id"]),l=Object(c.a)().siteConfig,s=(l=void 0===l?{}:l).themeConfig,v=(s=void 0===s?{}:s).navbar,h=(v=void 0===v?{}:v).hideOnScroll,d=void 0!==h&&h;return u?i.a.createElement(n,a,i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:o()("anchor",(e={},e[f.a.enhancedAnchor]=!d,e)),id:u}),i.a.createElement("a",{"aria-hidden":"true",tabIndex:"-1",className:"hash-link",href:"#"+u,title:"Direct link to heading"},"#"),a.children):i.a.createElement(n,a)}}},443:function(n,t,e){(function(n,r){var u;(function(){var i="Expected a function",a="__lodash_placeholder__",o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],c="[object Arguments]",l="[object Array]",f="[object Boolean]",s="[object Date]",v="[object Error]",h="[object Function]",d="[object GeneratorFunction]",p="[object Map]",D="[object Number]",g="[object Object]",_="[object RegExp]",m="[object Set]",y="[object String]",b="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",F="[object DataView]",C="[object Float32Array]",k="[object Float64Array]",A="[object Int8Array]",x="[object Int16Array]",j="[object Int32Array]",O="[object Uint8Array]",N="[object Uint16Array]",B="[object Uint32Array]",I=/\b__p \+= '';/g,S=/\b(__p \+=) '' \+/g,L=/(__e\(.*?\)|\b__t\)) \+\n'';/g,R=/&(?:amp|lt|gt|quot|#39);/g,z=/[&<>"']/g,T=RegExp(R.source),W=RegExp(z.source),M=/<%-([\s\S]+?)%>/g,U=/<%([\s\S]+?)%>/g,P=/<%=([\s\S]+?)%>/g,$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,G=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,V=/[\\^$.*+?()[\]{}|]/g,Z=RegExp(V.source),K=/^\s+|\s+$/g,H=/^\s+/,Q=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,nn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tn=/\\(\\)?/g,en=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,rn=/\w*$/,un=/^[-+]0x[0-9a-f]+$/i,an=/^0b[01]+$/i,on=/^\[object .+?Constructor\]$/,cn=/^0o[0-7]+$/i,ln=/^(?:0|[1-9]\d*)$/,fn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,sn=/($^)/,vn=/['\n\r\u2028\u2029\\]/g,hn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",dn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pn="[\\ud800-\\udfff]",Dn="["+dn+"]",gn="["+hn+"]",_n="\\d+",mn="[\\u2700-\\u27bf]",yn="[a-z\\xdf-\\xf6\\xf8-\\xff]",bn="[^\\ud800-\\udfff"+dn+_n+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",En="\\ud83c[\\udffb-\\udfff]",wn="[^\\ud800-\\udfff]",Fn="(?:\\ud83c[\\udde6-\\uddff]){2}",Cn="[\\ud800-\\udbff][\\udc00-\\udfff]",kn="[A-Z\\xc0-\\xd6\\xd8-\\xde]",An="(?:"+yn+"|"+bn+")",xn="(?:"+kn+"|"+bn+")",jn="(?:"+gn+"|"+En+")"+"?",On="[\\ufe0e\\ufe0f]?"+jn+("(?:\\u200d(?:"+[wn,Fn,Cn].join("|")+")[\\ufe0e\\ufe0f]?"+jn+")*"),Nn="(?:"+[mn,Fn,Cn].join("|")+")"+On,Bn="(?:"+[wn+gn+"?",gn,Fn,Cn,pn].join("|")+")",In=RegExp("['\u2019]","g"),Sn=RegExp(gn,"g"),Ln=RegExp(En+"(?="+En+")|"+Bn+On,"g"),Rn=RegExp([kn+"?"+yn+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?="+[Dn,kn,"$"].join("|")+")",xn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?="+[Dn,kn+An,"$"].join("|")+")",kn+"?"+An+"+(?:['\u2019](?:d|ll|m|re|s|t|ve))?",kn+"+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_n,Nn].join("|"),"g"),zn=RegExp("[\\u200d\\ud800-\\udfff"+hn+"\\ufe0e\\ufe0f]"),Tn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,Un={};Un[C]=Un[k]=Un[A]=Un[x]=Un[j]=Un[O]=Un["[object Uint8ClampedArray]"]=Un[N]=Un[B]=!0,Un[c]=Un[l]=Un[w]=Un[f]=Un[F]=Un[s]=Un[v]=Un[h]=Un[p]=Un[D]=Un[g]=Un[_]=Un[m]=Un[y]=Un[E]=!1;var Pn={};Pn[c]=Pn[l]=Pn[w]=Pn[F]=Pn[f]=Pn[s]=Pn[C]=Pn[k]=Pn[A]=Pn[x]=Pn[j]=Pn[p]=Pn[D]=Pn[g]=Pn[_]=Pn[m]=Pn[y]=Pn[b]=Pn[O]=Pn["[object Uint8ClampedArray]"]=Pn[N]=Pn[B]=!0,Pn[v]=Pn[h]=Pn[E]=!1;var $n={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},qn=parseFloat,Gn=parseInt,Vn="object"==typeof n&&n&&n.Object===Object&&n,Zn="object"==typeof self&&self&&self.Object===Object&&self,Kn=Vn||Zn||Function("return this")(),Hn=t&&!t.nodeType&&t,Qn=Hn&&"object"==typeof r&&r&&!r.nodeType&&r,Jn=Qn&&Qn.exports===Hn,Yn=Jn&&Vn.process,Xn=function(){try{var n=Qn&&Qn.require&&Qn.require("util").types;return n||Yn&&Yn.binding&&Yn.binding("util")}catch(t){}}(),nt=Xn&&Xn.isArrayBuffer,tt=Xn&&Xn.isDate,et=Xn&&Xn.isMap,rt=Xn&&Xn.isRegExp,ut=Xn&&Xn.isSet,it=Xn&&Xn.isTypedArray;function at(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}function ot(n,t,e,r){for(var u=-1,i=null==n?0:n.length;++u-1}function ht(n,t,e){for(var r=-1,u=null==n?0:n.length;++r-1;);return e}function Lt(n,t){for(var e=n.length;e--&&Et(t,n[e],0)>-1;);return e}function Rt(n,t){for(var e=n.length,r=0;e--;)n[e]===t&&++r;return r}var zt=At({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),Tt=At({"&":"&","<":"<",">":">",'"':""","'":"'"});function Wt(n){return"\\"+$n[n]}function Mt(n){return zn.test(n)}function Ut(n){var t=-1,e=Array(n.size);return n.forEach((function(n,r){e[++t]=[r,n]})),e}function Pt(n,t){return function(e){return n(t(e))}}function $t(n,t){for(var e=-1,r=n.length,u=0,i=[];++e",""":'"',"'":"'"});var Ht=function n(t){var e,r=(t=null==t?Kn:Ht.defaults(Kn.Object(),t,Ht.pick(Kn,Wn))).Array,u=t.Date,hn=t.Error,dn=t.Function,pn=t.Math,Dn=t.Object,gn=t.RegExp,_n=t.String,mn=t.TypeError,yn=r.prototype,bn=dn.prototype,En=Dn.prototype,wn=t["__core-js_shared__"],Fn=bn.toString,Cn=En.hasOwnProperty,kn=0,An=(e=/[^.]+$/.exec(wn&&wn.keys&&wn.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",xn=En.toString,jn=Fn.call(Dn),On=Kn._,Nn=gn("^"+Fn.call(Cn).replace(V,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Bn=Jn?t.Buffer:void 0,Ln=t.Symbol,zn=t.Uint8Array,$n=Bn?Bn.allocUnsafe:void 0,Vn=Pt(Dn.getPrototypeOf,Dn),Zn=Dn.create,Hn=En.propertyIsEnumerable,Qn=yn.splice,Yn=Ln?Ln.isConcatSpreadable:void 0,Xn=Ln?Ln.iterator:void 0,mt=Ln?Ln.toStringTag:void 0,At=function(){try{var n=Xu(Dn,"defineProperty");return n({},"",{}),n}catch(t){}}(),Qt=t.clearTimeout!==Kn.clearTimeout&&t.clearTimeout,Jt=u&&u.now!==Kn.Date.now&&u.now,Yt=t.setTimeout!==Kn.setTimeout&&t.setTimeout,Xt=pn.ceil,ne=pn.floor,te=Dn.getOwnPropertySymbols,ee=Bn?Bn.isBuffer:void 0,re=t.isFinite,ue=yn.join,ie=Pt(Dn.keys,Dn),ae=pn.max,oe=pn.min,ce=u.now,le=t.parseInt,fe=pn.random,se=yn.reverse,ve=Xu(t,"DataView"),he=Xu(t,"Map"),de=Xu(t,"Promise"),pe=Xu(t,"Set"),De=Xu(t,"WeakMap"),ge=Xu(Dn,"create"),_e=De&&new De,me={},ye=ki(ve),be=ki(he),Ee=ki(de),we=ki(pe),Fe=ki(De),Ce=Ln?Ln.prototype:void 0,ke=Ce?Ce.valueOf:void 0,Ae=Ce?Ce.toString:void 0;function xe(n){if($a(n)&&!Ba(n)&&!(n instanceof Be)){if(n instanceof Ne)return n;if(Cn.call(n,"__wrapped__"))return Ai(n)}return new Ne(n)}var je=function(){function n(){}return function(t){if(!Pa(t))return{};if(Zn)return Zn(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}();function Oe(){}function Ne(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}function Be(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Ie(n){var t=-1,e=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Qe(n,t,e,r,u,i){var a,o=1&t,l=2&t,v=4&t;if(e&&(a=u?e(n,r,u,i):e(n)),void 0!==a)return a;if(!Pa(n))return n;var E=Ba(n);if(E){if(a=function(n){var t=n.length,e=new n.constructor(t);t&&"string"==typeof n[0]&&Cn.call(n,"index")&&(e.index=n.index,e.input=n.input);return e}(n),!o)return gu(n,a)}else{var I=ei(n),S=I==h||I==d;if(Ra(n))return su(n,o);if(I==g||I==c||S&&!u){if(a=l||S?{}:ui(n),!o)return l?function(n,t){return _u(n,ti(n),t)}(n,function(n,t){return n&&_u(t,bo(t),n)}(a,n)):function(n,t){return _u(n,ni(n),t)}(n,Ve(a,n))}else{if(!Pn[I])return u?n:{};a=function(n,t,e){var r=n.constructor;switch(t){case w:return vu(n);case f:case s:return new r(+n);case F:return function(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}(n,e);case C:case k:case A:case x:case j:case O:case"[object Uint8ClampedArray]":case N:case B:return hu(n,e);case p:return new r;case D:case y:return new r(n);case _:return function(n){var t=new n.constructor(n.source,rn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case m:return new r;case b:return u=n,ke?Dn(ke.call(u)):{}}var u}(n,I,o)}}i||(i=new ze);var L=i.get(n);if(L)return L;i.set(n,a),Ka(n)?n.forEach((function(r){a.add(Qe(r,t,e,r,n,i))})):qa(n)&&n.forEach((function(r,u){a.set(u,Qe(r,t,e,u,n,i))}));var R=E?void 0:(v?l?Vu:Gu:l?bo:yo)(n);return ct(R||n,(function(r,u){R&&(r=n[u=r]),$e(a,u,Qe(r,t,e,u,n,i))})),a}function Je(n,t,e){var r=e.length;if(null==n)return!r;for(n=Dn(n);r--;){var u=e[r],i=t[u],a=n[u];if(void 0===a&&!(u in n)||!i(a))return!1}return!0}function Ye(n,t,e){if("function"!=typeof n)throw new mn(i);return mi((function(){n.apply(void 0,e)}),t)}function Xe(n,t,e,r){var u=-1,i=vt,a=!0,o=n.length,c=[],l=t.length;if(!o)return c;e&&(t=dt(t,Nt(e))),r?(i=ht,a=!1):t.length>=200&&(i=It,a=!1,t=new Re(t));n:for(;++u-1},Se.prototype.set=function(n,t){var e=this.__data__,r=qe(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this},Le.prototype.clear=function(){this.size=0,this.__data__={hash:new Ie,map:new(he||Se),string:new Ie}},Le.prototype.delete=function(n){var t=Ju(this,n).delete(n);return this.size-=t?1:0,t},Le.prototype.get=function(n){return Ju(this,n).get(n)},Le.prototype.has=function(n){return Ju(this,n).has(n)},Le.prototype.set=function(n,t){var e=Ju(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this},Re.prototype.add=Re.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Re.prototype.has=function(n){return this.__data__.has(n)},ze.prototype.clear=function(){this.__data__=new Se,this.size=0},ze.prototype.delete=function(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e},ze.prototype.get=function(n){return this.__data__.get(n)},ze.prototype.has=function(n){return this.__data__.has(n)},ze.prototype.set=function(n,t){var e=this.__data__;if(e instanceof Se){var r=e.__data__;if(!he||r.length<199)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new Le(r)}return e.set(n,t),this.size=e.size,this};var nr=bu(cr),tr=bu(lr,!0);function er(n,t){var e=!0;return nr(n,(function(n,r,u){return e=!!t(n,r,u)})),e}function rr(n,t,e){for(var r=-1,u=n.length;++r0&&e(o)?t>1?ir(o,t-1,e,r,u):pt(u,o):r||(u[u.length]=o)}return u}var ar=Eu(),or=Eu(!0);function cr(n,t){return n&&ar(n,t,yo)}function lr(n,t){return n&&or(n,t,yo)}function fr(n,t){return st(t,(function(t){return Wa(n[t])}))}function sr(n,t){for(var e=0,r=(t=ou(t,n)).length;null!=n&&et}function pr(n,t){return null!=n&&Cn.call(n,t)}function Dr(n,t){return null!=n&&t in Dn(n)}function gr(n,t,e){for(var u=e?ht:vt,i=n[0].length,a=n.length,o=a,c=r(a),l=1/0,f=[];o--;){var s=n[o];o&&t&&(s=dt(s,Nt(t))),l=oe(s.length,l),c[o]=!e&&(t||i>=120&&s.length>=120)?new Re(o&&s):void 0}s=n[0];var v=-1,h=c[0];n:for(;++v=o)return c;var l=e[r];return c*("desc"==l?-1:1)}}return n.index-t.index}(n,t,e)}))}function Ir(n,t,e){for(var r=-1,u=t.length,i={};++r-1;)o!==n&&Qn.call(o,c,1),Qn.call(n,c,1);return n}function Lr(n,t){for(var e=n?t.length:0,r=e-1;e--;){var u=t[e];if(e==r||u!==i){var i=u;ai(u)?Qn.call(n,u,1):Xr(n,u)}}return n}function Rr(n,t){return n+ne(fe()*(t-n+1))}function zr(n,t){var e="";if(!n||t<1||t>9007199254740991)return e;do{t%2&&(e+=n),(t=ne(t/2))&&(n+=n)}while(t);return e}function Tr(n,t){return yi(di(n,t,Vo),n+"")}function Wr(n){return We(jo(n))}function Mr(n,t){var e=jo(n);return wi(e,He(t,0,e.length))}function Ur(n,t,e,r){if(!Pa(n))return n;for(var u=-1,i=(t=ou(t,n)).length,a=i-1,o=n;null!=o&&++ui?0:i+t),(e=e>i?i:e)<0&&(e+=i),i=t>e?0:e-t>>>0,t>>>=0;for(var a=r(i);++u>>1,a=n[i];null!==a&&!Qa(a)&&(e?a<=t:a=200){var l=t?null:zu(n);if(l)return qt(l);a=!1,u=It,c=new Re}else c=t?[]:o;n:for(;++r=r?n:Gr(n,t,e)}var fu=Qt||function(n){return Kn.clearTimeout(n)};function su(n,t){if(t)return n.slice();var e=n.length,r=$n?$n(e):new n.constructor(e);return n.copy(r),r}function vu(n){var t=new n.constructor(n.byteLength);return new zn(t).set(new zn(n)),t}function hu(n,t){var e=t?vu(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}function du(n,t){if(n!==t){var e=void 0!==n,r=null===n,u=n==n,i=Qa(n),a=void 0!==t,o=null===t,c=t==t,l=Qa(t);if(!o&&!l&&!i&&n>t||i&&a&&c&&!o&&!l||r&&a&&c||!e&&c||!u)return 1;if(!r&&!i&&!l&&n1?e[u-1]:void 0,a=u>2?e[2]:void 0;for(i=n.length>3&&"function"==typeof i?(u--,i):void 0,a&&oi(e[0],e[1],a)&&(i=u<3?void 0:i,u=1),t=Dn(t);++r-1?u[i?t[a]:a]:void 0}}function Au(n){return qu((function(t){var e=t.length,r=e,u=Ne.prototype.thru;for(n&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new mn(i);if(u&&!o&&"wrapper"==Ku(a))var o=new Ne([],!0)}for(r=o?r:e;++r1&&m.reverse(),s&&l<_&&(m.length=l),this&&this!==Kn&&this instanceof g&&(C=D||Cu(C)),C.apply(F,m)}}function ju(n,t){return function(e,r){return function(n,t,e,r){return cr(n,(function(n,u,i){t(r,e(n),u,i)})),r}(e,n,t(r),{})}}function Ou(n,t){return function(e,r){var u;if(void 0===e&&void 0===r)return t;if(void 0!==e&&(u=e),void 0!==r){if(void 0===u)return r;"string"==typeof e||"string"==typeof r?(e=Jr(e),r=Jr(r)):(e=Qr(e),r=Qr(r)),u=n(e,r)}return u}}function Nu(n){return qu((function(t){return t=dt(t,Nt(Qu())),Tr((function(e){var r=this;return n(t,(function(n){return at(n,r,e)}))}))}))}function Bu(n,t){var e=(t=void 0===t?" ":Jr(t)).length;if(e<2)return e?zr(t,n):t;var r=zr(t,Xt(n/Vt(t)));return Mt(t)?lu(Zt(r),0,n).join(""):r.slice(0,n)}function Iu(n){return function(t,e,u){return u&&"number"!=typeof u&&oi(t,e,u)&&(e=u=void 0),t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e,u){for(var i=-1,a=ae(Xt((t-n)/(e||1)),0),o=r(a);a--;)o[u?a:++i]=n,n+=e;return o}(t,e,u=void 0===u?to))return!1;var l=i.get(n);if(l&&i.get(t))return l==t;var f=-1,s=!0,v=2&e?new Re:void 0;for(i.set(n,t),i.set(t,n);++f-1&&n%1==0&&n1?"& ":"")+t[r],t=t.join(e>2?", ":" "),n.replace(J,"{\n/* [wrapped with "+t+"] */\n")}(r,function(n,t){return ct(o,(function(e){var r="_."+e[0];t&e[1]&&!vt(n,r)&&n.push(r)})),n.sort()}(function(n){var t=n.match(Y);return t?t[1].split(X):[]}(r),e)))}function Ei(n){var t=0,e=0;return function(){var r=ce(),u=16-(r-e);if(e=r,u>0){if(++t>=800)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}function wi(n,t){var e=-1,r=n.length,u=r-1;for(t=void 0===t?r:t;++e1?n[t-1]:void 0;return e="function"==typeof e?(n.pop(),e):void 0,Zi(n,e)}));function na(n){var t=xe(n);return t.__chain__=!0,t}function ta(n,t){return t(n)}var ea=qu((function(n){var t=n.length,e=t?n[0]:0,r=this.__wrapped__,u=function(t){return Ke(t,n)};return!(t>1||this.__actions__.length)&&r instanceof Be&&ai(e)?((r=r.slice(e,+e+(t?1:0))).__actions__.push({func:ta,args:[u],thisArg:void 0}),new Ne(r,this.__chain__).thru((function(n){return t&&!n.length&&n.push(void 0),n}))):this.thru(u)}));var ra=mu((function(n,t,e){Cn.call(n,e)?++n[e]:Ze(n,e,1)}));var ua=ku(Ni),ia=ku(Bi);function aa(n,t){return(Ba(n)?ct:nr)(n,Qu(t,3))}function oa(n,t){return(Ba(n)?lt:tr)(n,Qu(t,3))}var ca=mu((function(n,t,e){Cn.call(n,e)?n[e].push(t):Ze(n,e,[t])}));var la=Tr((function(n,t,e){var u=-1,i="function"==typeof t,a=Sa(n)?r(n.length):[];return nr(n,(function(n){a[++u]=i?at(t,n,e):_r(n,t,e)})),a})),fa=mu((function(n,t,e){Ze(n,e,t)}));function sa(n,t){return(Ba(n)?dt:Ar)(n,Qu(t,3))}var va=mu((function(n,t,e){n[e?0:1].push(t)}),(function(){return[[],[]]}));var ha=Tr((function(n,t){if(null==n)return[];var e=t.length;return e>1&&oi(n,t[0],t[1])?t=[]:e>2&&oi(t[0],t[1],t[2])&&(t=[t[0]]),Br(n,ir(t,1),[])})),da=Jt||function(){return Kn.Date.now()};function pa(n,t,e){return t=e?void 0:t,Wu(n,128,void 0,void 0,void 0,void 0,t=n&&null==t?n.length:t)}function Da(n,t){var e;if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){return--n>0&&(e=t.apply(this,arguments)),n<=1&&(t=void 0),e}}var ga=Tr((function(n,t,e){var r=1;if(e.length){var u=$t(e,Hu(ga));r|=32}return Wu(n,r,t,e,u)})),_a=Tr((function(n,t,e){var r=3;if(e.length){var u=$t(e,Hu(_a));r|=32}return Wu(t,r,n,e,u)}));function ma(n,t,e){var r,u,a,o,c,l,f=0,s=!1,v=!1,h=!0;if("function"!=typeof n)throw new mn(i);function d(t){var e=r,i=u;return r=u=void 0,f=t,o=n.apply(i,e)}function p(n){return f=n,c=mi(g,t),s?d(n):o}function D(n){var e=n-l;return void 0===l||e>=t||e<0||v&&n-f>=a}function g(){var n=da();if(D(n))return _(n);c=mi(g,function(n){var e=t-(n-l);return v?oe(e,a-(n-f)):e}(n))}function _(n){return c=void 0,h&&r?d(n):(r=u=void 0,o)}function m(){var n=da(),e=D(n);if(r=arguments,u=this,l=n,e){if(void 0===c)return p(l);if(v)return fu(c),c=mi(g,t),d(l)}return void 0===c&&(c=mi(g,t)),o}return t=uo(t)||0,Pa(e)&&(s=!!e.leading,a=(v="maxWait"in e)?ae(uo(e.maxWait)||0,t):a,h="trailing"in e?!!e.trailing:h),m.cancel=function(){void 0!==c&&fu(c),f=0,r=l=u=c=void 0},m.flush=function(){return void 0===c?o:_(da())},m}var ya=Tr((function(n,t){return Ye(n,1,t)})),ba=Tr((function(n,t,e){return Ye(n,uo(t)||0,e)}));function Ea(n,t){if("function"!=typeof n||null!=t&&"function"!=typeof t)throw new mn(i);var e=function(){var r=arguments,u=t?t.apply(this,r):r[0],i=e.cache;if(i.has(u))return i.get(u);var a=n.apply(this,r);return e.cache=i.set(u,a)||i,a};return e.cache=new(Ea.Cache||Le),e}function wa(n){if("function"!=typeof n)throw new mn(i);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Ea.Cache=Le;var Fa=cu((function(n,t){var e=(t=1==t.length&&Ba(t[0])?dt(t[0],Nt(Qu())):dt(ir(t,1),Nt(Qu()))).length;return Tr((function(r){for(var u=-1,i=oe(r.length,e);++u=t})),Na=mr(function(){return arguments}())?mr:function(n){return $a(n)&&Cn.call(n,"callee")&&!Hn.call(n,"callee")},Ba=r.isArray,Ia=nt?Nt(nt):function(n){return $a(n)&&hr(n)==w};function Sa(n){return null!=n&&Ua(n.length)&&!Wa(n)}function La(n){return $a(n)&&Sa(n)}var Ra=ee||ic,za=tt?Nt(tt):function(n){return $a(n)&&hr(n)==s};function Ta(n){if(!$a(n))return!1;var t=hr(n);return t==v||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!Va(n)}function Wa(n){if(!Pa(n))return!1;var t=hr(n);return t==h||t==d||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Ma(n){return"number"==typeof n&&n==eo(n)}function Ua(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=9007199254740991}function Pa(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function $a(n){return null!=n&&"object"==typeof n}var qa=et?Nt(et):function(n){return $a(n)&&ei(n)==p};function Ga(n){return"number"==typeof n||$a(n)&&hr(n)==D}function Va(n){if(!$a(n)||hr(n)!=g)return!1;var t=Vn(n);if(null===t)return!0;var e=Cn.call(t,"constructor")&&t.constructor;return"function"==typeof e&&e instanceof e&&Fn.call(e)==jn}var Za=rt?Nt(rt):function(n){return $a(n)&&hr(n)==_};var Ka=ut?Nt(ut):function(n){return $a(n)&&ei(n)==m};function Ha(n){return"string"==typeof n||!Ba(n)&&$a(n)&&hr(n)==y}function Qa(n){return"symbol"==typeof n||$a(n)&&hr(n)==b}var Ja=it?Nt(it):function(n){return $a(n)&&Ua(n.length)&&!!Un[hr(n)]};var Ya=Su(kr),Xa=Su((function(n,t){return n<=t}));function no(n){if(!n)return[];if(Sa(n))return Ha(n)?Zt(n):gu(n);if(Xn&&n[Xn])return function(n){for(var t,e=[];!(t=n.next()).done;)e.push(t.value);return e}(n[Xn]());var t=ei(n);return(t==p?Ut:t==m?qt:jo)(n)}function to(n){return n?(n=uo(n))===1/0||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function eo(n){var t=to(n),e=t%1;return t==t?e?t-e:t:0}function ro(n){return n?He(eo(n),0,4294967295):0}function uo(n){if("number"==typeof n)return n;if(Qa(n))return NaN;if(Pa(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=Pa(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=n.replace(K,"");var e=an.test(n);return e||cn.test(n)?Gn(n.slice(2),e?2:8):un.test(n)?NaN:+n}function io(n){return _u(n,bo(n))}function ao(n){return null==n?"":Jr(n)}var oo=yu((function(n,t){if(si(t)||Sa(t))_u(t,yo(t),n);else for(var e in t)Cn.call(t,e)&&$e(n,e,t[e])})),co=yu((function(n,t){_u(t,bo(t),n)})),lo=yu((function(n,t,e,r){_u(t,bo(t),n,r)})),fo=yu((function(n,t,e,r){_u(t,yo(t),n,r)})),so=qu(Ke);var vo=Tr((function(n,t){n=Dn(n);var e=-1,r=t.length,u=r>2?t[2]:void 0;for(u&&oi(t[0],t[1],u)&&(r=1);++e1),t})),_u(n,Vu(n),e),r&&(e=Qe(e,7,Pu));for(var u=t.length;u--;)Xr(e,t[u]);return e}));var Co=qu((function(n,t){return null==n?{}:function(n,t){return Ir(n,t,(function(t,e){return Do(n,e)}))}(n,t)}));function ko(n,t){if(null==n)return{};var e=dt(Vu(n),(function(n){return[n]}));return t=Qu(t),Ir(n,e,(function(n,e){return t(n,e[0])}))}var Ao=Tu(yo),xo=Tu(bo);function jo(n){return null==n?[]:Bt(n,yo(n))}var Oo=Fu((function(n,t,e){return t=t.toLowerCase(),n+(e?No(t):t)}));function No(n){return Wo(ao(n).toLowerCase())}function Bo(n){return(n=ao(n))&&n.replace(fn,zt).replace(Sn,"")}var Io=Fu((function(n,t,e){return n+(e?"-":"")+t.toLowerCase()})),So=Fu((function(n,t,e){return n+(e?" ":"")+t.toLowerCase()})),Lo=wu("toLowerCase");var Ro=Fu((function(n,t,e){return n+(e?"_":"")+t.toLowerCase()}));var zo=Fu((function(n,t,e){return n+(e?" ":"")+Wo(t)}));var To=Fu((function(n,t,e){return n+(e?" ":"")+t.toUpperCase()})),Wo=wu("toUpperCase");function Mo(n,t,e){return n=ao(n),void 0===(t=e?void 0:t)?function(n){return Tn.test(n)}(n)?function(n){return n.match(Rn)||[]}(n):function(n){return n.match(nn)||[]}(n):n.match(t)||[]}var Uo=Tr((function(n,t){try{return at(n,void 0,t)}catch(e){return Ta(e)?e:new hn(e)}})),Po=qu((function(n,t){return ct(t,(function(t){t=Ci(t),Ze(n,t,ga(n[t],n))})),n}));function $o(n){return function(){return n}}var qo=Au(),Go=Au(!0);function Vo(n){return n}function Zo(n){return wr("function"==typeof n?n:Qe(n,1))}var Ko=Tr((function(n,t){return function(e){return _r(e,n,t)}})),Ho=Tr((function(n,t){return function(e){return _r(n,e,t)}}));function Qo(n,t,e){var r=yo(t),u=fr(t,r);null!=e||Pa(t)&&(u.length||!r.length)||(e=t,t=n,n=this,u=fr(t,yo(t)));var i=!(Pa(e)&&"chain"in e&&!e.chain),a=Wa(n);return ct(u,(function(e){var r=t[e];n[e]=r,a&&(n.prototype[e]=function(){var t=this.__chain__;if(i||t){var e=n(this.__wrapped__),u=e.__actions__=gu(this.__actions__);return u.push({func:r,args:arguments,thisArg:n}),e.__chain__=t,e}return r.apply(n,pt([this.value()],arguments))})})),n}function Jo(){}var Yo=Nu(dt),Xo=Nu(ft),nc=Nu(_t);function tc(n){return ci(n)?kt(Ci(n)):function(n){return function(t){return sr(t,n)}}(n)}var ec=Iu(),rc=Iu(!0);function uc(){return[]}function ic(){return!1}var ac=Ou((function(n,t){return n+t}),0),oc=Ru("ceil"),cc=Ou((function(n,t){return n/t}),1),lc=Ru("floor");var fc,sc=Ou((function(n,t){return n*t}),1),vc=Ru("round"),hc=Ou((function(n,t){return n-t}),0);return xe.after=function(n,t){if("function"!=typeof t)throw new mn(i);return n=eo(n),function(){if(--n<1)return t.apply(this,arguments)}},xe.ary=pa,xe.assign=oo,xe.assignIn=co,xe.assignInWith=lo,xe.assignWith=fo,xe.at=so,xe.before=Da,xe.bind=ga,xe.bindAll=Po,xe.bindKey=_a,xe.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return Ba(n)?n:[n]},xe.chain=na,xe.chunk=function(n,t,e){t=(e?oi(n,t,e):void 0===t)?1:ae(eo(t),0);var u=null==n?0:n.length;if(!u||t<1)return[];for(var i=0,a=0,o=r(Xt(u/t));iu?0:u+e),(r=void 0===r||r>u?u:eo(r))<0&&(r+=u),r=e>r?0:ro(r);e>>0)?(n=ao(n))&&("string"==typeof t||null!=t&&!Za(t))&&!(t=Jr(t))&&Mt(n)?lu(Zt(n),0,e):n.split(t,e):[]},xe.spread=function(n,t){if("function"!=typeof n)throw new mn(i);return t=null==t?0:ae(eo(t),0),Tr((function(e){var r=e[t],u=lu(e,0,t);return r&&pt(u,r),at(n,this,u)}))},xe.tail=function(n){var t=null==n?0:n.length;return t?Gr(n,1,t):[]},xe.take=function(n,t,e){return n&&n.length?Gr(n,0,(t=e||void 0===t?1:eo(t))<0?0:t):[]},xe.takeRight=function(n,t,e){var r=null==n?0:n.length;return r?Gr(n,(t=r-(t=e||void 0===t?1:eo(t)))<0?0:t,r):[]},xe.takeRightWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3),!1,!0):[]},xe.takeWhile=function(n,t){return n&&n.length?tu(n,Qu(t,3)):[]},xe.tap=function(n,t){return t(n),n},xe.throttle=function(n,t,e){var r=!0,u=!0;if("function"!=typeof n)throw new mn(i);return Pa(e)&&(r="leading"in e?!!e.leading:r,u="trailing"in e?!!e.trailing:u),ma(n,t,{leading:r,maxWait:t,trailing:u})},xe.thru=ta,xe.toArray=no,xe.toPairs=Ao,xe.toPairsIn=xo,xe.toPath=function(n){return Ba(n)?dt(n,Ci):Qa(n)?[n]:gu(Fi(ao(n)))},xe.toPlainObject=io,xe.transform=function(n,t,e){var r=Ba(n),u=r||Ra(n)||Ja(n);if(t=Qu(t,4),null==e){var i=n&&n.constructor;e=u?r?new i:[]:Pa(n)&&Wa(i)?je(Vn(n)):{}}return(u?ct:cr)(n,(function(n,r,u){return t(e,n,r,u)})),e},xe.unary=function(n){return pa(n,1)},xe.union=$i,xe.unionBy=qi,xe.unionWith=Gi,xe.uniq=function(n){return n&&n.length?Yr(n):[]},xe.uniqBy=function(n,t){return n&&n.length?Yr(n,Qu(t,2)):[]},xe.uniqWith=function(n,t){return t="function"==typeof t?t:void 0,n&&n.length?Yr(n,void 0,t):[]},xe.unset=function(n,t){return null==n||Xr(n,t)},xe.unzip=Vi,xe.unzipWith=Zi,xe.update=function(n,t,e){return null==n?n:nu(n,t,au(e))},xe.updateWith=function(n,t,e,r){return r="function"==typeof r?r:void 0,null==n?n:nu(n,t,au(e),r)},xe.values=jo,xe.valuesIn=function(n){return null==n?[]:Bt(n,bo(n))},xe.without=Ki,xe.words=Mo,xe.wrap=function(n,t){return Ca(au(t),n)},xe.xor=Hi,xe.xorBy=Qi,xe.xorWith=Ji,xe.zip=Yi,xe.zipObject=function(n,t){return uu(n||[],t||[],$e)},xe.zipObjectDeep=function(n,t){return uu(n||[],t||[],Ur)},xe.zipWith=Xi,xe.entries=Ao,xe.entriesIn=xo,xe.extend=co,xe.extendWith=lo,Qo(xe,xe),xe.add=ac,xe.attempt=Uo,xe.camelCase=Oo,xe.capitalize=No,xe.ceil=oc,xe.clamp=function(n,t,e){return void 0===e&&(e=t,t=void 0),void 0!==e&&(e=(e=uo(e))==e?e:0),void 0!==t&&(t=(t=uo(t))==t?t:0),He(uo(n),t,e)},xe.clone=function(n){return Qe(n,4)},xe.cloneDeep=function(n){return Qe(n,5)},xe.cloneDeepWith=function(n,t){return Qe(n,5,t="function"==typeof t?t:void 0)},xe.cloneWith=function(n,t){return Qe(n,4,t="function"==typeof t?t:void 0)},xe.conformsTo=function(n,t){return null==t||Je(n,t,yo(t))},xe.deburr=Bo,xe.defaultTo=function(n,t){return null==n||n!=n?t:n},xe.divide=cc,xe.endsWith=function(n,t,e){n=ao(n),t=Jr(t);var r=n.length,u=e=void 0===e?r:He(eo(e),0,r);return(e-=t.length)>=0&&n.slice(e,u)==t},xe.eq=xa,xe.escape=function(n){return(n=ao(n))&&W.test(n)?n.replace(z,Tt):n},xe.escapeRegExp=function(n){return(n=ao(n))&&Z.test(n)?n.replace(V,"\\$&"):n},xe.every=function(n,t,e){var r=Ba(n)?ft:er;return e&&oi(n,t,e)&&(t=void 0),r(n,Qu(t,3))},xe.find=ua,xe.findIndex=Ni,xe.findKey=function(n,t){return yt(n,Qu(t,3),cr)},xe.findLast=ia,xe.findLastIndex=Bi,xe.findLastKey=function(n,t){return yt(n,Qu(t,3),lr)},xe.floor=lc,xe.forEach=aa,xe.forEachRight=oa,xe.forIn=function(n,t){return null==n?n:ar(n,Qu(t,3),bo)},xe.forInRight=function(n,t){return null==n?n:or(n,Qu(t,3),bo)},xe.forOwn=function(n,t){return n&&cr(n,Qu(t,3))},xe.forOwnRight=function(n,t){return n&&lr(n,Qu(t,3))},xe.get=po,xe.gt=ja,xe.gte=Oa,xe.has=function(n,t){return null!=n&&ri(n,t,pr)},xe.hasIn=Do,xe.head=Si,xe.identity=Vo,xe.includes=function(n,t,e,r){n=Sa(n)?n:jo(n),e=e&&!r?eo(e):0;var u=n.length;return e<0&&(e=ae(u+e,0)),Ha(n)?e<=u&&n.indexOf(t,e)>-1:!!u&&Et(n,t,e)>-1},xe.indexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=null==e?0:eo(e);return u<0&&(u=ae(r+u,0)),Et(n,t,u)},xe.inRange=function(n,t,e){return t=to(t),void 0===e?(e=t,t=0):e=to(e),function(n,t,e){return n>=oe(t,e)&&n=-9007199254740991&&n<=9007199254740991},xe.isSet=Ka,xe.isString=Ha,xe.isSymbol=Qa,xe.isTypedArray=Ja,xe.isUndefined=function(n){return void 0===n},xe.isWeakMap=function(n){return $a(n)&&ei(n)==E},xe.isWeakSet=function(n){return $a(n)&&"[object WeakSet]"==hr(n)},xe.join=function(n,t){return null==n?"":ue.call(n,t)},xe.kebabCase=Io,xe.last=Ti,xe.lastIndexOf=function(n,t,e){var r=null==n?0:n.length;if(!r)return-1;var u=r;return void 0!==e&&(u=(u=eo(e))<0?ae(r+u,0):oe(u,r-1)),t==t?function(n,t,e){for(var r=e+1;r--;)if(n[r]===t)return r;return r}(n,t,u):bt(n,Ft,u,!0)},xe.lowerCase=So,xe.lowerFirst=Lo,xe.lt=Ya,xe.lte=Xa,xe.max=function(n){return n&&n.length?rr(n,Vo,dr):void 0},xe.maxBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),dr):void 0},xe.mean=function(n){return Ct(n,Vo)},xe.meanBy=function(n,t){return Ct(n,Qu(t,2))},xe.min=function(n){return n&&n.length?rr(n,Vo,kr):void 0},xe.minBy=function(n,t){return n&&n.length?rr(n,Qu(t,2),kr):void 0},xe.stubArray=uc,xe.stubFalse=ic,xe.stubObject=function(){return{}},xe.stubString=function(){return""},xe.stubTrue=function(){return!0},xe.multiply=sc,xe.nth=function(n,t){return n&&n.length?Nr(n,eo(t)):void 0},xe.noConflict=function(){return Kn._===this&&(Kn._=On),this},xe.noop=Jo,xe.now=da,xe.pad=function(n,t,e){n=ao(n);var r=(t=eo(t))?Vt(n):0;if(!t||r>=t)return n;var u=(t-r)/2;return Bu(ne(u),e)+n+Bu(Xt(u),e)},xe.padEnd=function(n,t,e){n=ao(n);var r=(t=eo(t))?Vt(n):0;return t&&rt){var r=n;n=t,t=r}if(e||n%1||t%1){var u=fe();return oe(n+u*(t-n+qn("1e-"+((u+"").length-1))),t)}return Rr(n,t)},xe.reduce=function(n,t,e){var r=Ba(n)?Dt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,nr)},xe.reduceRight=function(n,t,e){var r=Ba(n)?gt:xt,u=arguments.length<3;return r(n,Qu(t,4),e,u,tr)},xe.repeat=function(n,t,e){return t=(e?oi(n,t,e):void 0===t)?1:eo(t),zr(ao(n),t)},xe.replace=function(){var n=arguments,t=ao(n[0]);return n.length<3?t:t.replace(n[1],n[2])},xe.result=function(n,t,e){var r=-1,u=(t=ou(t,n)).length;for(u||(u=1,n=void 0);++r9007199254740991)return[];var e=4294967295,r=oe(n,4294967295);n-=4294967295;for(var u=Ot(r,t=Qu(t));++e=i)return n;var o=e-Vt(r);if(o<1)return r;var c=a?lu(a,0,o).join(""):n.slice(0,o);if(void 0===u)return c+r;if(a&&(o+=c.length-o),Za(u)){if(n.slice(o).search(u)){var l,f=c;for(u.global||(u=gn(u.source,ao(rn.exec(u))+"g")),u.lastIndex=0;l=u.exec(f);)var s=l.index;c=c.slice(0,void 0===s?o:s)}}else if(n.indexOf(Jr(u),o)!=o){var v=c.lastIndexOf(u);v>-1&&(c=c.slice(0,v))}return c+r},xe.unescape=function(n){return(n=ao(n))&&T.test(n)?n.replace(R,Kt):n},xe.uniqueId=function(n){var t=++kn;return ao(n)+t},xe.upperCase=To,xe.upperFirst=Wo,xe.each=aa,xe.eachRight=oa,xe.first=Si,Qo(xe,(fc={},cr(xe,(function(n,t){Cn.call(xe.prototype,t)||(fc[t]=n)})),fc),{chain:!1}),xe.VERSION="4.17.15",ct(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){xe[n].placeholder=xe})),ct(["drop","take"],(function(n,t){Be.prototype[n]=function(e){e=void 0===e?1:ae(eo(e),0);var r=this.__filtered__&&!t?new Be(this):this.clone();return r.__filtered__?r.__takeCount__=oe(e,r.__takeCount__):r.__views__.push({size:oe(e,4294967295),type:n+(r.__dir__<0?"Right":"")}),r},Be.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}})),ct(["filter","map","takeWhile"],(function(n,t){var e=t+1,r=1==e||3==e;Be.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:Qu(n,3),type:e}),t.__filtered__=t.__filtered__||r,t}})),ct(["head","last"],(function(n,t){var e="take"+(t?"Right":"");Be.prototype[n]=function(){return this[e](1).value()[0]}})),ct(["initial","tail"],(function(n,t){var e="drop"+(t?"":"Right");Be.prototype[n]=function(){return this.__filtered__?new Be(this):this[e](1)}})),Be.prototype.compact=function(){return this.filter(Vo)},Be.prototype.find=function(n){return this.filter(n).head()},Be.prototype.findLast=function(n){return this.reverse().find(n)},Be.prototype.invokeMap=Tr((function(n,t){return"function"==typeof n?new Be(this):this.map((function(e){return _r(e,n,t)}))})),Be.prototype.reject=function(n){return this.filter(wa(Qu(n)))},Be.prototype.slice=function(n,t){n=eo(n);var e=this;return e.__filtered__&&(n>0||t<0)?new Be(e):(n<0?e=e.takeRight(-n):n&&(e=e.drop(n)),void 0!==t&&(e=(t=eo(t))<0?e.dropRight(-t):e.take(t-n)),e)},Be.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Be.prototype.toArray=function(){return this.take(4294967295)},cr(Be.prototype,(function(n,t){var e=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),u=xe[r?"take"+("last"==t?"Right":""):t],i=r||/^find/.test(t);u&&(xe.prototype[t]=function(){var t=this.__wrapped__,a=r?[1]:arguments,o=t instanceof Be,c=a[0],l=o||Ba(t),f=function(n){var t=u.apply(xe,pt([n],a));return r&&s?t[0]:t};l&&e&&"function"==typeof c&&1!=c.length&&(o=l=!1);var s=this.__chain__,v=!!this.__actions__.length,h=i&&!s,d=o&&!v;if(!i&&l){t=d?t:new Be(this);var p=n.apply(t,a);return p.__actions__.push({func:ta,args:[f],thisArg:void 0}),new Ne(p,s)}return h&&d?n.apply(this,a):(p=this.thru(f),h?r?p.value()[0]:p.value():p)})})),ct(["pop","push","shift","sort","splice","unshift"],(function(n){var t=yn[n],e=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",r=/^(?:pop|shift)$/.test(n);xe.prototype[n]=function(){var n=arguments;if(r&&!this.__chain__){var u=this.value();return t.apply(Ba(u)?u:[],n)}return this[e]((function(e){return t.apply(Ba(e)?e:[],n)}))}})),cr(Be.prototype,(function(n,t){var e=xe[t];if(e){var r=e.name+"";Cn.call(me,r)||(me[r]=[]),me[r].push({name:t,func:e})}})),me[xu(void 0,2).name]=[{name:"wrapper",func:void 0}],Be.prototype.clone=function(){var n=new Be(this.__wrapped__);return n.__actions__=gu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=gu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=gu(this.__views__),n},Be.prototype.reverse=function(){if(this.__filtered__){var n=new Be(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Be.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,e=Ba(n),r=t<0,u=e?n.length:0,i=function(n,t,e){var r=-1,u=e.length;for(;++r=this.__values__.length;return{done:n,value:n?void 0:this.__values__[this.__index__++]}},xe.prototype.plant=function(n){for(var t,e=this;e instanceof Oe;){var r=Ai(e);r.__index__=0,r.__values__=void 0,t?u.__wrapped__=r:t=r;var u=r;e=e.__wrapped__}return u.__wrapped__=n,t},xe.prototype.reverse=function(){var n=this.__wrapped__;if(n instanceof Be){var t=n;return this.__actions__.length&&(t=new Be(this)),(t=t.reverse()).__actions__.push({func:ta,args:[Pi],thisArg:void 0}),new Ne(t,this.__chain__)}return this.thru(Pi)},xe.prototype.toJSON=xe.prototype.valueOf=xe.prototype.value=function(){return eu(this.__wrapped__,this.__actions__)},xe.prototype.first=xe.prototype.head,Xn&&(xe.prototype[Xn]=function(){return this}),xe}();Kn._=Ht,void 0===(u=function(){return Ht}.call(t,e,t,r))||(r.exports=u)}).call(this)}).call(this,e(76),e(448)(n))},446:function(n,t,e){"use strict";var r=e(0),u=Object(r.createContext)({tabGroupChoices:{},setTabGroupChoices:function(){}});t.a=u},447:function(n,t,e){"use strict";e.d(t,"a",(function(){return i}));e(77),e(465),e(431),e(78);var r=e(467),u=e.n(r);function i(n,t){var e=new u.a;return n.map((function(n){var r=n;return"string"==typeof n&&(r={label:n,permalink:"/blog/tags/"+e.slug(n)}),function(n,t){var e=n.label.split(": ",2),r=e[0],u=e[1],i="primary";switch(t){case"blog":case"guides":i=function(n){switch(n){case"domain":return"blue";case"type":return"pink";default:return"primary"}}(r)}return{category:r,count:n.count,label:n.label,permalink:n.permalink,style:i,value:u}}(r,t)}))}},448:function(n,t){n.exports=function(n){return n.webpackPolyfill||(n.deprecate=function(){},n.paths=[],n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),n.webpackPolyfill=1),n}},457:function(n,t,e){var r=e(30),u=e(54),i=e(27),a=e(26),o=e(458);n.exports=function(n,t){var e=1==n,c=2==n,l=3==n,f=4==n,s=6==n,v=5==n||s,h=t||o;return function(t,o,d){for(var p,D,g=i(t),_=u(g),m=r(o,d,3),y=a(_.length),b=0,E=e?h(t,y):c?h(t,0):void 0;y>b;b++)if((v||b in _)&&(D=m(p=_[b],b,g),n))if(e)E[b]=D;else if(D)switch(n){case 3:return!0;case 5:return p;case 6:return b;case 2:E.push(p)}else if(f)return!1;return s?-1:l||f?f:E}}},458:function(n,t,e){var r=e(459);n.exports=function(n,t){return new(r(n))(t)}},459:function(n,t,e){var r=e(13),u=e(460),i=e(2)("species");n.exports=function(n){var t;return u(n)&&("function"!=typeof(t=n.constructor)||t!==Array&&!u(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},460:function(n,t,e){var r=e(23);n.exports=Array.isArray||function(n){return"Array"==r(n)}},466:function(n,t,e){"use strict";var r=e(0),u=e.n(r),i=e(422),a=e(415),o=e.n(a);t.a=function(n){var t=n.count,e=n.label,r=n.permalink,a=n.style,c=n.value,l=n.valueOnly;return u.a.createElement(i.a,{to:r+"/",className:o()("badge","badge--rounded","badge--"+a)},l?c:e,t&&u.a.createElement(u.a.Fragment,null," (",t,")"))}},467:function(n,t,e){var r=e(468);n.exports=o;var u=Object.hasOwnProperty,i=/\s/g,a=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~\u2019]/g;function o(){if(!(this instanceof o))return new o;this.reset()}function c(n,t){return"string"!=typeof n?"":(t||(n=n.toLowerCase()),n.trim().replace(a,"").replace(r(),"").replace(i,"-"))}o.prototype.slug=function(n,t){for(var e=c(n,!0===t),r=e;u.call(this.occurrences,e);)this.occurrences[r]++,e=r+"-"+this.occurrences[r];return this.occurrences[e]=0,e},o.prototype.reset=function(){this.occurrences=Object.create(null)},o.slug=c},468:function(n,t){n.exports=function(){return/[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD79\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED0\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3]|\uD83E[\uDD10-\uDD18\uDD80-\uDD84\uDDC0]|\uD83C\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uD83C\uDDFE\uD83C[\uDDEA\uDDF9]|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDFC\uD83C[\uDDEB\uDDF8]|\uD83C\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uD83C\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF8\uDDFE\uDDFF]|\uD83C\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uD83C\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uD83C\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uD83C\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uD83C\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uD83C\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uD83C\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uD83C\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uD83C\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uD83C\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uD83C\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uD83C\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uD83C\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uD83C\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uD83C\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uD83C\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|[#\*0-9]\u20E3/g}},472:function(n,t,e){"use strict";var r=e(1),u=e(0),i=e.n(u),a=(e(422),e(466)),o=e(415),c=e.n(o),l=e(447),f=e(141),s=e.n(f);t.a=function(n){var t,e=n.block,u=n.colorProfile,o=n.tags,f=n.valuesOnly,v=Object(l.a)(o,u);return i.a.createElement("div",{className:c()(s.a.tags,(t={},t[s.a.tagsBlock]=e,t))},v.map((function(n,t){return i.a.createElement(a.a,Object(r.a)({key:t,valueOnly:f},n))})))}},508:function(n,t,e){"use strict";e(29),e(22),e(21),e(52);var r=e(0),u=e.n(r),i=(e(420),e(431),e(422)),a=e(432),o=e.n(a),c=e(472),l=e(447),f=e(428),s=e(433);e(142);var v=function(n){var t=n.frontMatter,e=n.metadata,r=(n.isGuidePage,Object(s.a)().isDarkTheme),a=e.categories,v=(e.description,e.permalink),h=(e.readingTime,e.seriesPosition),d=e.tags,p=(t.author_github,t.cover_label),D=(t.last_modified_on,t.title),g=Object(l.a)(d,"guides"),_=g.find((function(n){return"domain"==n.category})),m=_?_.value:"default",y=g.find((function(n){return"language"==n.category})),b=y?y.value:null,E=g.find((function(n){return"framework"==n.category})),w=E?E.value:null,F=g.find((function(n){return"technology"==n.category})),C=F?F.value:null,k=g.find((function(n){return"cloud_provider"==n.category})),A=k?k.value:null,x=g.find((function(n){return"platform"==n.category})),j=x?x.value:null,O=g.find((function(n){return"source"==n.category})),N=O?O.value:null,B=g.find((function(n){return"sink"==n.category})),I=B?B.value:null,S=Object(f.a)().siteConfig.customFields.metadata,L=S.installation,R=S.sources,z=S.sinks,T=S.languages,W=S.frameworks,M=S.technologies,U=S.cloud_providers,P=L.platforms,$=j&&P[j],q=N&&R[N],G=I&&z[I],V=b&&T.find((function(n){return n.name===b})),Z=w&&W.find((function(n){return n.name===w})),K=C&&M.find((function(n){return n.name===C})),H=A&&U.find((function(n){return n.name===A})),Q=null!==($||q),J=null!=G,Y=null;Z?Y=r?Z.dark_logo_path:Z.logo_path:K?Y=r?K.dark_logo_path:K.logo_path:H?Y=r?H.dark_logo_path:H.logo_path:V?Y=r?V.dark_logo_path:V.logo_path:$?Y=$.logo_path:q&&(Y=q.logo_path);var X=null;return G&&(X=G.logo_path),u.a.createElement(i.a,{to:v+"/",className:"guide-item"},u.a.createElement("article",null,u.a.createElement("div",{className:"domain-bg domain-bg--"+m+" domain-bg--hover"},u.a.createElement("header",null,u.a.createElement("div",{className:"category"},a[0].name),u.a.createElement("h2",{title:D},h&&h+". ",p||D)),u.a.createElement("footer",null,Y&&u.a.createElement(o.a,{src:Y,className:"logo"}),!Y&&Q&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),X&&u.a.createElement(o.a,{src:X,className:"logo"}),!X&&J&&u.a.createElement("div",{className:"logo"},u.a.createElement("i",{className:"feather icon-server"})),!Y&&!X&&!Q&&!J&&u.a.createElement(c.a,{colorProfile:"guides",tags:d}),u.a.createElement("div",{className:"action"},"read now")))))},h=e(442),d=e(443),p=e.n(d),D=e(415),g=e.n(D);e(143);function _(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered,a=p()(e).map((function(n){return n.content.metadata.categories[t-1]})).uniqBy("permalink").sortBy("title").keyBy("permalink").value(),o=p.a.groupBy(e,(function(n){return n.content.metadata.categories[t-1].permalink})),c=Object(h.a)("h"+(t+1));return Object.keys(a).map((function(n,t){var e=o[n],l=a[n];return u.a.createElement("section",{key:t},u.a.createElement(c,{id:n},l.title),l.description&&u.a.createElement("div",{className:"sub-title"},l.description),u.a.createElement(m,{items:e,large:r,staggered:i}))}))}function m(n){var t=n.groupLevel,e=n.items,r=n.large,i=n.staggered;if(t)return u.a.createElement(_,{groupLevel:t,items:e});var a,o=(a=e,p.a.sortBy(a,["content.metadata.seriesPosition",function(n){return n.content.metadata.coverLabel.toLowerCase()}]));return u.a.createElement("div",{className:"guides"},u.a.createElement("div",{className:g()("guide-items",{"guide-items--l":r,"guide-items--staggered":i})},o.map((function(n){var t=n.content;return u.a.createElement(v,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:t.metadata.truncated},u.a.createElement(t,null))}))))}t.a=m}}]); \ No newline at end of file diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index 946f476e7a..69db11e8fe 100644 --- a/docs/getting-started/basic-concepts/index.html +++ b/docs/getting-started/basic-concepts/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
-

Basic Concepts

Organization

An Organization is the workspace where devops and developers can collaborate across many projects at once and it usually corresponds to your company. A user can have access to one or more organizations and have different roles & permissions assigned within it thanks to our RBAC system.

More information about Organization here.

Cluster

At Qovery, when we refer to Clusters, we mean Kubernetes clusters. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

Qovery creates and manage for you clusters on your cloud account, more than one cluster can be created to match your use case (production, staging, dev etc..).

A running cluster is necessary to deploy your application with Qovery.

More information about Cluster here.

Project

A Project allows you to group together a set of services interacting between each other to serve a common purpose. For example, you can have one project to run your main application (composed by a front-end, back-end and a db) and another project to manage your internal tools.

Services can be then organized into environments so that you can have different versions of the same service running within your project (production, staging, fix for issue X etc..)

One organization can have more than one project and you can customize the access to your project thanks to our RBAC system.

More information about Project here.

Environment

An Environment allows you to group together a set of services having a specific version, usually based on a branch of your repository. For example, you can have one Production environment (all the services pointing to the main branch), one Staging environment (all services pointing to the staging branch) etc..

Your production environment runs 24/7 while your other environments may not need to run all day long. By setting a Deployment Rule on your environment you can automatically start/stop your non-production environments and thus reduce your cloud provider bill.

Environments let's you chose on which cluster your services should be deployed.

More information about Environment here.

Preview Environment

A Preview Environment is an ephemeral environment allowing you to get early feedback on your application changes before the changes are merged into production. A dedicated preview environment can be automatically created at each new PR on your repository to validate the change. The environment is automatically deleted once the PR is merged or closed.

More information about Preview Environment here.

Service

A Service is the basic unit that you can add to an environment. Each service has an associated git repository (or registry) and a commit (or image_name:tag) that will be used to deploy the service on the cluster.

Four type of services exists:

  • Application: it allows you to run your long-running workloads. We usually call them "Containers" when the source code is stored on an image registry. More information about Applications here
  • Database: it allows you to deploy a database. Qovery allows you to deploy a container and a cloud provider managed version. More information about Databases here
  • CronJob: it allows you to deploy a cronjob on your cluster and execute it based on the selected schedule. More information about Cronjob here
  • Lifecycle: it allows you to execute your code based on the events happening on your environment (Start, Stop, Delete etc..). With the right code, it can be used to seed your database when the environment is created or manage the lifecycle of any external resource (via a terraform file, pulumi code etc..). More information about Lifecycle here

Deployment

A Deployment is the operation allowing you to gather your code and make it runs on your cluster. Qovery can pull your repository, generate a docker image and spawn the necessary resources on your clusters to make your application run. You can find more information within this section.

You can monitor the execution of the deployment via the Deployment Logs while you can monitor the execution of your application thanks to the streamed Live Logs directly from the Qovery interface.

High Level Schema

Basic Structure

+

Basic Concepts

Organization

An Organization is the workspace where devops and developers can collaborate across many projects at once and it usually corresponds to your company. A user can have access to one or more organizations and have different roles & permissions assigned within it thanks to our RBAC system.

More information about Organization here.

Cluster

At Qovery, when we refer to Clusters, we mean Kubernetes clusters. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications.

Qovery creates and manage for you clusters on your cloud account, more than one cluster can be created to match your use case (production, staging, dev etc..).

A running cluster is necessary to deploy your application with Qovery.

More information about Cluster here.

Project

A Project allows you to group together a set of services interacting between each other to serve a common purpose. For example, you can have one project to run your main application (composed by a front-end, back-end and a db) and another project to manage your internal tools.

Services can be then organized into environments so that you can have different versions of the same service running within your project (production, staging, fix for issue X etc..)

One organization can have more than one project and you can customize the access to your project thanks to our RBAC system.

More information about Project here.

Environment

An Environment allows you to group together a set of services having a specific version, usually based on a branch of your repository. For example, you can have one Production environment (all the services pointing to the main branch), one Staging environment (all services pointing to the staging branch) etc..

Your production environment runs 24/7 while your other environments may not need to run all day long. By setting a Deployment Rule on your environment you can automatically start/stop your non-production environments and thus reduce your cloud provider bill.

Environments let's you chose on which cluster your services should be deployed.

More information about Environment here.

Preview Environment

A Preview Environment is an ephemeral environment allowing you to get early feedback on your application changes before the changes are merged into production. A dedicated preview environment can be automatically created at each new PR on your repository to validate the change. The environment is automatically deleted once the PR is merged or closed.

More information about Preview Environment here.

Service

A Service is the basic unit that you can add to an environment. Each service has an associated git repository (or registry) and a commit (or image_name:tag) that will be used to deploy the service on the cluster.

Four type of services exists:

  • Application: it allows you to run your long-running workloads. We usually call them "Containers" when the source code is stored on an image registry. More information about Applications here
  • Database: it allows you to deploy a database. Qovery allows you to deploy a container and a cloud provider managed version. More information about Databases here
  • CronJob: it allows you to deploy a cronjob on your cluster and execute it based on the selected schedule. More information about Cronjob here
  • Lifecycle: it allows you to execute your code based on the events happening on your environment (Start, Stop, Delete etc..). With the right code, it can be used to seed your database when the environment is created or manage the lifecycle of any external resource (via a terraform file, pulumi code etc..). More information about Lifecycle here

Deployment

A Deployment is the operation allowing you to gather your code and make it runs on your cluster. Qovery can pull your repository, generate a docker image and spawn the necessary resources on your clusters to make your application run. You can find more information within this section.

You can monitor the execution of the deployment via the Deployment Logs while you can monitor the execution of your application thanks to the streamed Live Logs directly from the Qovery interface.

High Level Schema

Basic Structure

- + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/getting-started/deploy-my-app/index.html b/docs/getting-started/deploy-my-app/index.html index 97ca81eb4d..90f56164c7 100644 --- a/docs/getting-started/deploy-my-app/index.html +++ b/docs/getting-started/deploy-my-app/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
-

Deploy my application

Check our video tutorial to learn how to quickly deploy your application with Qovery!

Deploy your application

Advanced

Once you know how to deploy a simple application, take a look at how to go beyond with Qovery.

Advanced
Contents
Resources
    +

    Deploy my application

    Check our video tutorial to learn how to quickly deploy your application with Qovery!

    Deploy your application

    Advanced

    Once you know how to deploy a simple application, take a look at how to go beyond with Qovery.

    Advanced
    Contents
    Resources
      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/getting-started/how-qovery-works/index.html b/docs/getting-started/how-qovery-works/index.html index 8075af1ed9..ea11ba5245 100644 --- a/docs/getting-started/how-qovery-works/index.html +++ b/docs/getting-started/how-qovery-works/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
      -

      How Qovery Works

      Qovery is the state-of-the-art deployment platform that any DevOps would build for their company. Beyond application deployment, Qovery is tailored to run production workload with maximum uptime. It is the perfect solution to make your developers autonomous in deploying their applications and keeping flexibility and control.

      Qovery is the perfect product for DevOps who want to:

      • Build an internal Platform as a Service (PaaS) with outstanding experience for developers.
      • Build development, staging and production environments.
      • Make developers productive and autonomous, while keeping the control on what they do.
      • Get a production-ready infrastructure and save more than 18 months of work.

      Qovery is an abstraction layer on top of the most promising tools (Kubernetes, Terraform, Helm...) and cloud service providers (AWS, Digital Ocean, Scaleway...). The goal of Qovery is to provide production-ready platform layer to build on top of it.

      Qovery runs on top of Kubernetes, Terraform, Helm and many other tools

      Your cloud infrastructure with Qovery

      Qovery needs to install a few services on your cloud account to work. Some of them are required and others optional.

      Your infrastructure is completely isolated from the qovery control plane

      All your applications and your data run in your cloud account. The Qovery Engine, Qovery Agent, and Kubernetes are the three main services running on your infrastructure to run your applications. The Qovery Engine and the Qovery Agent receive remote instructions from the control plane via a secured gRPC/TLS connection initiated. Qovery infrastructure and your infrastructure are completely isolated from each other. Qovery has been designed to never impact your infrastructure in case of any outage and security breach.

      Qovery infrastructure services

      ServiceOpen-sourceOptionalDescription
      Qovery Control PlaneyesnoService to manage user authentication. authorization, and the whole Qovery business logic
      Qovery APInonoAPI to programmatically interact with Qovery
      Qovery Web InterfacesoonyesWeb application to interact with Qovery

      Services installed on your infrastructure

      ServiceOpen-sourceOptionalDescription
      Qovery EngineyesnoTransactional deployment service in charge of maintaining your infrastructure and deploying applications with all the dependencies
      Qovery AgentsoonnoService to forward application logs, services status and real-time metrics to the Qovery Control Plane
      KubernetesyesnoProduct to run and scale containers. Qovery runs your application on your cloud managed Kubernetes
      External DNSyesnoTool to configure external DNS for Kubernetes services
      Cert ManageryesnoTool to provision and manage TLS certificates on Kubernetes
      LokiyesyesTool to aggregate Kubernetes logs. Qovery Agent fetch logs from Loki in real-time
      GrafanayesyesProduct to visualize metrics and logs from infrastructure and app services
      NGINX ingressyesnoNGINX ingress controller for Kubernetes

      Check out the list of services installed on your infrastructure.

      Application and database deployment

      Here is an example of what happen in details when you deploy a NodeJS application with a PostgreSQL database in production on AWS with Qovery.

      Schema from build to scale with Qovery

      StageStepQovery serviceDescription
      AuthGit push receivedControl planeQovery receives your git commit via Github/Gitlab/Bitbucket webhooks
      AuthCheck permissionsControl planeQovery checks permissions to proceed app deployment or not
      BuildBuild containerEngineQovery builds your NodeJS app into container
      BuildPush containerEngineQovery push the container into your container registry
      DeployDeploy PostgreSQLEngineQovery match the PostgreSQL version with AWS RDS PostgreSQL and deploy it on your AWS account
      DeployConfigure PostgreSQL networkEngineQovery configure the network of your AWS RDS PostgreSQL to make it accessible from your application
      DeployCheck PostgreSQLEngineQovery checks your AWS RDS PostgreSQL is well deployed and running
      DeployDeploy containerEngineQovery deploys your container on your Kubernetes cluster
      DeployConfigure container networkEngineQovery configure the network of your container to make it accessible from outside
      DeployLoad balancerEngineQovery deploys a load balancer and bind it to your application
      DeployDNSEngineQovery assign a domain to your application
      DeployTLSEngineQovery request a TLS certificate and bind it to your domain and application
      DeployCheck containerEngineQovery checks your container is well deployed and accessible via internet
      RunRun databaseEngineQovery monitor your AWS RDS PostgreSQL database
      RunRun containerEngineQovery runs your container on Kubernetes and ensure it has the maximum uptime
      RunMetricsAgentQovery watch your application and database metrics and forward them to the Qovery Control Plane
      RunNotificationControl planeQovery notifies the user on the successful app and db deployment
      ScaleScale containerAgentQovery scale your containers depending on the CPU and custom metrics

      Integrations

      Qovery lets you integrates any tool that you already have or need. There is no limitations as Qovery runs on Kubernetes and your cloud service provider.

      What's next

      In the next section we explain how you can manage Qovery via Terraform and our REST API.

      +

      How Qovery Works

      Qovery is the state-of-the-art deployment platform that any DevOps would build for their company. Beyond application deployment, Qovery is tailored to run production workload with maximum uptime. It is the perfect solution to make your developers autonomous in deploying their applications and keeping flexibility and control.

      Qovery is the perfect product for DevOps who want to:

      • Build an internal Platform as a Service (PaaS) with outstanding experience for developers.
      • Build development, staging and production environments.
      • Make developers productive and autonomous, while keeping the control on what they do.
      • Get a production-ready infrastructure and save more than 18 months of work.

      Qovery is an abstraction layer on top of the most promising tools (Kubernetes, Terraform, Helm...) and cloud service providers (AWS, Digital Ocean, Scaleway...). The goal of Qovery is to provide production-ready platform layer to build on top of it.

      Qovery runs on top of Kubernetes, Terraform, Helm and many other tools

      Your cloud infrastructure with Qovery

      Qovery needs to install a few services on your cloud account to work. Some of them are required and others optional.

      Your infrastructure is completely isolated from the qovery control plane

      All your applications and your data run in your cloud account. The Qovery Engine, Qovery Agent, and Kubernetes are the three main services running on your infrastructure to run your applications. The Qovery Engine and the Qovery Agent receive remote instructions from the control plane via a secured gRPC/TLS connection initiated. Qovery infrastructure and your infrastructure are completely isolated from each other. Qovery has been designed to never impact your infrastructure in case of any outage and security breach.

      Qovery infrastructure services

      ServiceOpen-sourceOptionalDescription
      Qovery Control PlaneyesnoService to manage user authentication. authorization, and the whole Qovery business logic
      Qovery APInonoAPI to programmatically interact with Qovery
      Qovery Web InterfacesoonyesWeb application to interact with Qovery

      Services installed on your infrastructure

      ServiceOpen-sourceOptionalDescription
      Qovery EngineyesnoTransactional deployment service in charge of maintaining your infrastructure and deploying applications with all the dependencies
      Qovery AgentsoonnoService to forward application logs, services status and real-time metrics to the Qovery Control Plane
      KubernetesyesnoProduct to run and scale containers. Qovery runs your application on your cloud managed Kubernetes
      External DNSyesnoTool to configure external DNS for Kubernetes services
      Cert ManageryesnoTool to provision and manage TLS certificates on Kubernetes
      LokiyesyesTool to aggregate Kubernetes logs. Qovery Agent fetch logs from Loki in real-time
      GrafanayesyesProduct to visualize metrics and logs from infrastructure and app services
      NGINX ingressyesnoNGINX ingress controller for Kubernetes

      Check out the list of services installed on your infrastructure.

      Application and database deployment

      Here is an example of what happen in details when you deploy a NodeJS application with a PostgreSQL database in production on AWS with Qovery.

      Schema from build to scale with Qovery

      StageStepQovery serviceDescription
      AuthGit push receivedControl planeQovery receives your git commit via Github/Gitlab/Bitbucket webhooks
      AuthCheck permissionsControl planeQovery checks permissions to proceed app deployment or not
      BuildBuild containerEngineQovery builds your NodeJS app into container
      BuildPush containerEngineQovery push the container into your container registry
      DeployDeploy PostgreSQLEngineQovery match the PostgreSQL version with AWS RDS PostgreSQL and deploy it on your AWS account
      DeployConfigure PostgreSQL networkEngineQovery configure the network of your AWS RDS PostgreSQL to make it accessible from your application
      DeployCheck PostgreSQLEngineQovery checks your AWS RDS PostgreSQL is well deployed and running
      DeployDeploy containerEngineQovery deploys your container on your Kubernetes cluster
      DeployConfigure container networkEngineQovery configure the network of your container to make it accessible from outside
      DeployLoad balancerEngineQovery deploys a load balancer and bind it to your application
      DeployDNSEngineQovery assign a domain to your application
      DeployTLSEngineQovery request a TLS certificate and bind it to your domain and application
      DeployCheck containerEngineQovery checks your container is well deployed and accessible via internet
      RunRun databaseEngineQovery monitor your AWS RDS PostgreSQL database
      RunRun containerEngineQovery runs your container on Kubernetes and ensure it has the maximum uptime
      RunMetricsAgentQovery watch your application and database metrics and forward them to the Qovery Control Plane
      RunNotificationControl planeQovery notifies the user on the successful app and db deployment
      ScaleScale containerAgentQovery scale your containers depending on the CPU and custom metrics

      Integrations

      Qovery lets you integrates any tool that you already have or need. There is no limitations as Qovery runs on Kubernetes and your cloud service provider.

      What's next

      In the next section we explain how you can manage Qovery via Terraform and our REST API.

      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html index 6865604675..d2fb294622 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
      -
      Resources
        +
        Resources
          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/getting-started/install-qovery/index.html b/docs/getting-started/install-qovery/index.html index 6866fdb5e4..1314c45fc2 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
          -
          Resources
            +
            Resources
              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/getting-started/what-is-qovery/index.html b/docs/getting-started/what-is-qovery/index.html index f544323d77..9055b8336f 100644 --- a/docs/getting-started/what-is-qovery/index.html +++ b/docs/getting-started/what-is-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -44,20 +44,20 @@ - +
              -

              What is Qovery?

              Qovery is a modern infrastructure automation platform that simplifies the process of managing cloud infrastructure for DevOps, Platform and Engineering teams. It provides a set of tools and features that automate the provisioning, configuration, and management of infrastructure resources.

              Qovery For DevOps

              Qovery is helpful for DevOps teams as it allows them to automate the provisioning, configuration, and management of infrastructure resources. This can help to streamline the process of creating and destroying environments on demand and reduce the time and effort required to set up and manage environments. Additionally, Qovery provides features such as resource consumption optimization, which can help to reduce cloud costs and optimize infrastructure costs. This can help to free up resources and focus on delivering value to the business. Qovery also helps DevOps teams to maintain a high level of control, security and governance by providing a way to define, manage and monitor their infrastructure as code, thus reducing human error and ensuring compliance with best practices and security standards.

              Qovery For Developers

              For developers, Qovery is helpful as it allows them to easily spin up services with minimal effort. This allows developers to focus on writing code and delivering features, rather than worrying about infrastructure management. Additionally, Qovery provides a way to manage multiple environments and configurations, which can help to ensure that the development, staging, and production environments are consistent and up-to-date. This can help to reduce the risk of errors and inconsistencies and ensure that the application is always ready for deployment. Developers can also be assured that their environments are secure and compliant with best practices and security standards, thanks to the control and governance features provided by Qovery.

              How Qovery Works

              +

              What is Qovery?

              Qovery is the Internal Developer Platform (IDP) that cuts noise for developers with paved paths to production. Testing, ephemeral environments, and drive action to improve software.

              Developers and a Platform Engineer using Qovery as an IDP

              Qovery For Platform Engineers

              By using Qovery, Platform Engineering teams can provide an outstanding platform to their developers in less than a hour. Then Platform Engineering teams can tailor the experience of Qovery and even build on top of it to fit their own golden path. They keep the control and can audit what developers do.

              How Qovery Works

              Qovery runs on top of Kubernetes and provide a convenient layer with a set of features to build a platform that your developers love.

              Qovery - How it Works

              Notable features for Platform Engineers

              Qovery For Developers / Engineering Teams

              By using Qovery, developers are autonomous in deploying their applications, debugging, and scaling. They don't need any infrastructure knowledge. They can connect their git repository, pushing and deploying their apps.

              Qovery focus on providing an outstanding Developer Experience and never assume that developers know how underlying infrastructure work.

              Notable features for Developers

              • Self-Service Platform
              • Git Push And Deploy
              • Live Application Logs
              • Easy Variables Management
              • Easy Domain Management
              • No Infra Knowledge Needed
              • Ephemeral Environments

              Integrates Qovery in your technical stack

              1. Qovery is battery included! Get a State-of-the-Art Internal Developer Platform in 30 minutes.
              2. Qovery integrates perfectly well into an existing ecosystem.

              Qovery - Internal Developer Platform landscape

              - + - + @@ -65,7 +65,7 @@ - + @@ -73,7 +73,7 @@ - + diff --git a/docs/getting-started/whats-next/index.html b/docs/getting-started/whats-next/index.html index 60a476f492..04364a47c2 100644 --- a/docs/getting-started/whats-next/index.html +++ b/docs/getting-started/whats-next/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

              What's next?

              Before you go any further, make sure you have followed and finished the basic Getting Started Guide:

              Getting Started Guide

              After you have hands-on experience with Qovery, you can learn more about all the concepts and features in Using Qovery -subsections:

              Using Qovery
              Resources
                +subsections:

                Using Qovery
                Resources
                  - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/index.html b/docs/index.html index be5d9f2ff0..0998ed1748 100644 --- a/docs/index.html +++ b/docs/index.html @@ -22,9 +22,9 @@ - + - + @@ -37,9 +37,9 @@ - + - + diff --git a/docs/security-and-compliance/backup-and-restore/index.html b/docs/security-and-compliance/backup-and-restore/index.html index 7454ad05a6..20a6943b3c 100644 --- a/docs/security-and-compliance/backup-and-restore/index.html +++ b/docs/security-and-compliance/backup-and-restore/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                  -

                  Backup and Restore

                  Backups and restore are frequently a nightmare to setup. Especially for databases. Qovery helps you to get this part always automatically managed by the Cloud provider.

                  Backups

                  Applications

                  When containers' applications are successfully built, all containers are kept for possible future rollback.

                  Services

                  Take a look at the desired service to know how they are backed up.

                  Restore

                  Applications

                  As the Qovery configuration file is in your git repository and versioned, you can rollback any version when you want.

                  Services

                  Take a look at the desired service to know how you can restore it.

                  +

                  Backup and Restore

                  Backups and restore are frequently a nightmare to setup. Especially for databases. Qovery helps you to get this part always automatically managed by the Cloud provider.

                  Backups

                  Applications

                  When containers' applications are successfully built, all containers are kept for possible future rollback.

                  Services

                  Take a look at the desired service to know how they are backed up.

                  Restore

                  Applications

                  As the Qovery configuration file is in your git repository and versioned, you can rollback any version when you want.

                  Services

                  Take a look at the desired service to know how you can restore it.

                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/security-and-compliance/encryption/index.html b/docs/security-and-compliance/encryption/index.html index 1047cc1d06..2a660aad9e 100644 --- a/docs/security-and-compliance/encryption/index.html +++ b/docs/security-and-compliance/encryption/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                  -

                  Encryption

                  Data in transit

                  Data in transit between the World and Qovery is always encrypted, as all of the services which Qovery supports. Services include the Qovery CLI, management console, Documentation, Landing Page, and Back Office.

                  Data in transit between the World and customer applications is encrypted. By default, HTTPS connections use an automatically generated Let's Encrypt certificate, or users may provide their own TLS certificate (Enterprise only).

                  Data in transit on Qovery controlled networks (e.g., between the application and a database) use end-to-end encryption and private networking rules.

                  Data storage

                  All application data is encrypted by using encrypted storage (typically using an AES-256 block cipher). If you have specific audit requirements surrounding data at rest encryption, please contact us.

                  Secrets

                  All secrets data is encrypted by using salted AES-256.

                  +

                  Encryption

                  Data in transit

                  Data in transit between the World and Qovery is always encrypted, as all of the services which Qovery supports. Services include the Qovery CLI, management console, Documentation, Landing Page, and Back Office.

                  Data in transit between the World and customer applications is encrypted. By default, HTTPS connections use an automatically generated Let's Encrypt certificate, or users may provide their own TLS certificate (Enterprise only).

                  Data in transit on Qovery controlled networks (e.g., between the application and a database) use end-to-end encryption and private networking rules.

                  Data storage

                  All application data is encrypted by using encrypted storage (typically using an AES-256 block cipher). If you have specific audit requirements surrounding data at rest encryption, please contact us.

                  Secrets

                  All secrets data is encrypted by using salted AES-256.

                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/security-and-compliance/gdpr/index.html b/docs/security-and-compliance/gdpr/index.html index c99133d76e..d3dda3ef4c 100644 --- a/docs/security-and-compliance/gdpr/index.html +++ b/docs/security-and-compliance/gdpr/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                  -

                  GDPR

                  Qovery has taken numerous steps to ensure GDPR compliance. As part of our measures, we have implemented the following:

                  Data Protection by Design

                  We've implemented policies in the company to ensure all of our employees follow the necessary training and protocols around security. Besides, privacy protection is part of every project during instantiation.

                  Data Protection Officer

                  Appointment of a Security Officer, who also holds the Data Protection Officer (DPO) role. If you have any concern, contact us.

                  Consent

                  We've confirmed that all of our customer communication, both business-related and marketing-related, is opt-in, and no information is shared with us without a customer's consent.

                  Enhanced Rights

                  The GDPR provides rights to individuals, such as the right to portability, right of rectification, and the right to be forgotten. We've made sure we comply with these rights. Nearly all information can be edited through a user's account, and we can delete accounts upon request.

                  Data Collection

                  We've documented information about what data we collect.

                  Data Retention

                  We documented information about our data retention.

                  +

                  GDPR

                  Qovery has taken numerous steps to ensure GDPR compliance. As part of our measures, we have implemented the following:

                  Data Protection by Design

                  We've implemented policies in the company to ensure all of our employees follow the necessary training and protocols around security. Besides, privacy protection is part of every project during instantiation.

                  Data Protection Officer

                  Appointment of a Security Officer, who also holds the Data Protection Officer (DPO) role. If you have any concern, contact us.

                  Consent

                  We've confirmed that all of our customer communication, both business-related and marketing-related, is opt-in, and no information is shared with us without a customer's consent.

                  Enhanced Rights

                  The GDPR provides rights to individuals, such as the right to portability, right of rectification, and the right to be forgotten. We've made sure we comply with these rights. Nearly all information can be edited through a user's account, and we can delete accounts upon request.

                  Data Collection

                  We've documented information about what data we collect.

                  Data Retention

                  We documented information about our data retention.

                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/security-and-compliance/index.html b/docs/security-and-compliance/index.html index 0132a63dd2..aef84aeeee 100644 --- a/docs/security-and-compliance/index.html +++ b/docs/security-and-compliance/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                  -
                  Resources
                    +
                    Resources
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/security-and-compliance/soc2/index.html b/docs/security-and-compliance/soc2/index.html index 8be9e5527c..50f576c325 100644 --- a/docs/security-and-compliance/soc2/index.html +++ b/docs/security-and-compliance/soc2/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                      SOC2

                      Qovery infrastructure and process comply with SOC2 (Systems and Organizations Controls 2) best practices. Qovery also brings by default many security features to your applications, clusters, and databases to comply with the most stringent security standards of SOC2. -You can find additional information on the Qovery trust page.

                      All customers using Qovery, requiring to be SOC2 compliant, save a lot of time as the deployed infrastructure is SOC2 ready!

                      In this documentation, you will find settings to update to comply with SOC2 and even more.

                      Cluster advanced settings

                      In the cluster advanced settings, you will find several options to update based on your wishes and to comply with SOC2. Here are the most important ones:

                      Log retention days

                      • AWS Cloudwatch retention days (aws.cloudwatch.eks_logs_retention_days): 365 days is what SOC2 requests at least
                      • Enable VPC flow logs (aws.vpc.enable_s3_flow_logs and aws.vpc.flow_logs_retention_days): Enable it and set the retention days to 365 days
                      • Allowed databases CIDR: you have to disable or restrict public access, but not let them open to the world
                      +You can find additional information on the Qovery trust page.

                      All customers using Qovery, requiring to be SOC2 compliant, save a lot of time as the deployed infrastructure is SOC2 ready!

                      In this documentation, you will find settings to update to comply with SOC2 and even more.

                      Cluster advanced settings

                      In the cluster advanced settings, you will find several options to update based on your wishes and to comply with SOC2. Here are the most important ones:

                      Log retention days

                      • AWS Cloudwatch retention days (aws.cloudwatch.eks_logs_retention_days): 365 days is what SOC2 requests at least
                      • Enable VPC flow logs (aws.vpc.enable_s3_flow_logs and aws.vpc.flow_logs_retention_days): Enable it and set the retention days to 365 days
                      • Allowed databases CIDR: you have to disable or restrict public access, but not let them open to the world
                      - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/useful-resources/faq/index.html b/docs/useful-resources/faq/index.html index 3a30ffdd5e..a16cdc0132 100644 --- a/docs/useful-resources/faq/index.html +++ b/docs/useful-resources/faq/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                      FAQ

                      What is the difference between a Project, an Application, and an Environment?

                      A project is the site that you're working on. Each project can contain multiple applications and be deployed in multiple environments. An environment is a standalone copy of your site, including apps, databases, storage, data, and all other services. By default, main branch is the production environment, while all other branches can be set up as identical copies of the prod environment for testing purposes.

                      How does application build works?

                      Basically, Qovery deploys your application as a container. Check out the detailed explanation of what is going on behind the scene here

                      How does Qovery manage databases?

                      Qovery provides managed and container modes for your databases. Basically, managed mode relies on the managed database provided by the cloud provider. E.g. if you choose Postgres with the managed mode while your environment is running on AWS, then Qovery provides an AWS RDS instance. Please check out our database section for further details.

                      Does Qovery replace Kubernetes?

                      Behind the scene, Qovery uses Kubernetes. Qovery extends Kubernetes to make it accessible to any developer teams. Important: Qovery does not modify Kubernetes. It only deploys his services in a qovery Kubernetes namespace.

                      Does Qovery support mono repository?

                      Yes, absolutely! Check out our monorepo guide.

                      Does Qovery support microservices?

                      Yes, absolutely! Check out our microservices guide.

                      What Git providers do you support?

                      GitHub, GitLab, BitBucket.

                      Do you support GitHub Enterprise or Gitlab Self-hosted?

                      Not at the moment, but you can upvote for this feature in our roadmap.

                      Does Qovery support private Git repository?

                      Yes, absolutely!

                      Which IP address does my cluster use to communicate externally over the Internet?

                      There isn't just one public cluster IP adress dedicated to external communication. However, worker nodes inside your cluster each have a public IP automatically attached to them. You can view those default public IPs in the details of your worker nodes (EC2 instances for AWS users) which belong to the node group in your cluster.

                      For improved security and control, the Static IP feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses. For more information on the Static IP feature and how to enable it at cluster creation, see Static IP.

                      If I have N custom domains under the same root domain, do I need to create N CNAME records, or just creating one for the root domain is enough ?

                      You have to create N CNAME, one per custom domain

                      How do you support new Kubernetes version?

                      The Qovery team manages your Kubernetes cluster's upgrade, and you don't have to think about it. Upgrades from one minor Kubernetes version to another require a good amount of tests to make sure everything goes smoothly with zero interruptions for your app. This is why Qovery always provides 1 or 2 minor versions below the last one offered by the cloud provider. Our goal is to guarantee you the maximum uptime.

                      More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                      Can I upgrade my cluster myself

                      NO and you SHOULDN'T ! -More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                      Can I have access to my Kubernetes cluster?

                      Absolutely, you can follow this guide.

                      Can I have access to my application with a shell?

                      Absolutely, check out our CLI and the qovery shell command.

                      How application auto-scaling works?

                      Take a look at our application documentation.

                      Why you should use Qovery?

                      The power of Kubernetes

                      Under the hood, Qovery uses containers and Kubernetes to run applications. With us, your applications scale accordingly to your traffic and needs. We rely on major cloud providers to provide reliable infrastructure to make your applications highly available.

                      Reliable infrastructure

                      What's more, we took on our shoulders the complexity of providing and managing other infrastructure requirements you need (like databases or message brokers), so you can focus merely on developing business features.

                      Simple and Powerful

                      With Qovery, the cloud is simple again. Get all the benefits of using cloud and Kubernetes without dealing with its complexity. You don't need to hire infrastructure experts - configuring continuous integration, deployment, databases, message brokers, storage, DNS, SSL/TLS, VPCs, and many others - we do it all for you. On Qovery, you can spin up a set of microservices, databases, and other cloud services in minutes with a single Git push!

                      Built for all developers

                      Qovery is designed by developers for developers. Our goal is to make your life easier and allow you to move faster. Developer experience is at our heart. Building cloud-native applications was never that fast and simple!

                      Fully customizable for advanced business use cases

                      Create teams, split responsibilities, manage privileges, enforce company-wide rules, deploy to multiple clouds, plug in your own CI solutions. Qovery Business allows you to bring your organization to the next level with ease.

                      How Qovery works under the hood?

                      Here is a detailed explanation on how Qovery works under the hood.

                      What is an Active User?

                      An Active User is someone who made a code change on git or deployed an application in the last 30 days. We do not count contributions to public (open-source) repositories.

                      How can I contact you?

                      Feel free to join our Discord server or contact us by email at hello (at) qovery.com.

                      +More details on this dedicated section: how-does-qovery-handle-cluster-updates-and-upgrades

                      Can I have access to my Kubernetes cluster?

                      Absolutely, you can follow this guide.

                      Can I have access to my application with a shell?

                      Absolutely, check out our CLI and the qovery shell command.

                      How application auto-scaling works?

                      Take a look at our application documentation.

                      Why you should use Qovery?

                      The power of Kubernetes

                      Under the hood, Qovery uses containers and Kubernetes to run applications. With us, your applications scale accordingly to your traffic and needs. We rely on major cloud providers to provide reliable infrastructure to make your applications highly available.

                      Reliable infrastructure

                      What's more, we took on our shoulders the complexity of providing and managing other infrastructure requirements you need (like databases or message brokers), so you can focus merely on developing business features.

                      Simple and Powerful

                      With Qovery, the cloud is simple again. Get all the benefits of using cloud and Kubernetes without dealing with its complexity. You don't need to hire infrastructure experts - configuring continuous integration, deployment, databases, message brokers, storage, DNS, SSL/TLS, VPCs, and many others - we do it all for you. On Qovery, you can spin up a set of microservices, databases, and other cloud services in minutes with a single Git push!

                      Built for all developers

                      Qovery is designed by developers for developers. Our goal is to make your life easier and allow you to move faster. Developer experience is at our heart. Building cloud-native applications was never that fast and simple!

                      Fully customizable for advanced business use cases

                      Create teams, split responsibilities, manage privileges, enforce company-wide rules, deploy to multiple clouds, plug in your own CI solutions. Qovery Business allows you to bring your organization to the next level with ease.

                      How Qovery works under the hood?

                      Here is a detailed explanation on how Qovery works under the hood.

                      What is an Active User?

                      An Active User is someone who made a code change on git or deployed an application in the last 30 days. We do not count contributions to public (open-source) repositories.

                      How can I contact you?

                      Feel free to join our Discord server or contact us by email at hello (at) qovery.com.

                      - + - + @@ -67,7 +67,7 @@ - + diff --git a/docs/useful-resources/help-and-support/index.html b/docs/useful-resources/help-and-support/index.html index 27e5b117af..16e1530061 100644 --- a/docs/useful-resources/help-and-support/index.html +++ b/docs/useful-resources/help-and-support/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Help and Support

                      Qovery support

                      If you need any help, you can:

                      1. Most common issues and solutions are listed in the troubleshooting section.
                      2. Qovery Community Forum is the first place to tool at. You will find a lot of qualitative questions and answers.
                      3. Finally, if you did not receive answers on the forum or if you have a big outage, you can contact us from the product on Intercom.

                      There, you can discuss directly with our fantastic team as well as our wonderful community!

                      Cloud provider support

                      Qovery is responsible for deployed elements on your cloud provider made and maintained by Qovery. We are not responsible for the cloud provider itself.

                      +

                      Help and Support

                      Qovery support

                      If you need any help, you can:

                      1. Most common issues and solutions are listed in the troubleshooting section.
                      2. Qovery Community Forum is the first place to tool at. You will find a lot of qualitative questions and answers.
                      3. Finally, if you did not receive answers on the forum or if you have a big outage, you can contact us from the product on Intercom.

                      There, you can discuss directly with our fantastic team as well as our wonderful community!

                      Cloud provider support

                      Qovery is responsible for deployed elements on your cloud provider made and maintained by Qovery. We are not responsible for the cloud provider itself.

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/audit-logs/index.html b/docs/using-qovery/audit-logs/index.html index 7a5ec2f0e2..d7bd5aaa7c 100644 --- a/docs/using-qovery/audit-logs/index.html +++ b/docs/using-qovery/audit-logs/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Audit Logs

                      Qovery allows you to monitor any action happened within your organization thanks to the audit logs section. This section provides you with a complete view on any change happened within your organization configuration, providing you the answer to "who did what, where, and when?".

                      This is extremely useful when debugging complex issues and trying to understand what happened in a specific timeframe or monitor the actions done by your users within your organization.

                      You can access this section by opening the Audit logs section from the nav bar on the left

                      Audit Logs Access

                      Once entered this section, you will find here the list of events happened within your organization over the past 30 days (this is the maximum retention time).

                      Event information

                      Each event in the list is composed by the following information:

                      • Timestamp: it tells you when the event happened
                      • Event Type: it describe the type of event (Create, Update, Delete, Trigger Deployment etc..)
                      • Target Type: it defines the type of object that has been modified (Environment, Cluster, Role, Image registry etc..)
                      • Target: it defines the object that has been modified. You can get additional information on the target by hovering on it.
                      • Change: it describes what has been modified (high level information: its config, a deployment rule etc..)
                      • User: it describes who modified the object. If the change has been done via API, you will find the API token name that has changed it.
                      • Tool: it describes how the object has been changed (via the console, the qovery terraform provider, via a git push etc..)

                      Since the audit logs are based on the calls done on our API, Qovery provides you with the JSON sent in the API response for each API call (and thus, for each event). This JSON represents the status of the target object after the event has happened. You can access the JSON by clicking on the event and might be useful to get a more granular information of what has changed between two events of the same type by comparing their JSON.

                      Example: if an update happened on the configuration of an application , the stored UPDATE event will provide you access to the JSON returned by the API when the /application endpoint was called. This JSON will thus contain the configuration of the application after the update.

                      Filters

                      To simplify the research within the audit logs, you can filter the events by:

                      • Time range
                      • Target: you will have to specify a target type (cluster, environment, service etc..) and then specify the name of the target. For example, if you want to look for the changes happened on the cluster Production, you will have to select Cluster as Target type and then you will have to select Production from within the cluster list.

                      Quick Filters

                      While navigating within the console, a few quick filters allow you to jump on the audit logs and get the events happened on that specific object. For example, you can quickly get the events happened on a specific environment, by clicking on the See Events button available within the 3 dots sub-menu

                      See Events Quick Filter

                      Export

                      Not yet available, feature coming soon!

                      +

                      Audit Logs

                      Qovery allows you to monitor any action happened within your organization thanks to the audit logs section. This section provides you with a complete view on any change happened within your organization configuration, providing you the answer to "who did what, where, and when?".

                      This is extremely useful when debugging complex issues and trying to understand what happened in a specific timeframe or monitor the actions done by your users within your organization.

                      You can access this section by opening the Audit logs section from the nav bar on the left

                      Audit Logs Access

                      Once entered this section, you will find here the list of events happened within your organization over the past 30 days (this is the maximum retention time).

                      Event information

                      Each event in the list is composed by the following information:

                      • Timestamp: it tells you when the event happened
                      • Event Type: it describe the type of event (Create, Update, Delete, Trigger Deployment etc..)
                      • Target Type: it defines the type of object that has been modified (Environment, Cluster, Role, Image registry etc..)
                      • Target: it defines the object that has been modified. You can get additional information on the target by hovering on it.
                      • Change: it describes what has been modified (high level information: its config, a deployment rule etc..)
                      • User: it describes who modified the object. If the change has been done via API, you will find the API token name that has changed it.
                      • Tool: it describes how the object has been changed (via the console, the qovery terraform provider, via a git push etc..)

                      Since the audit logs are based on the calls done on our API, Qovery provides you with the JSON sent in the API response for each API call (and thus, for each event). This JSON represents the status of the target object after the event has happened. You can access the JSON by clicking on the event and might be useful to get a more granular information of what has changed between two events of the same type by comparing their JSON.

                      Example: if an update happened on the configuration of an application , the stored UPDATE event will provide you access to the JSON returned by the API when the /application endpoint was called. This JSON will thus contain the configuration of the application after the update.

                      Filters

                      To simplify the research within the audit logs, you can filter the events by:

                      • Time range
                      • Target: you will have to specify a target type (cluster, environment, service etc..) and then specify the name of the target. For example, if you want to look for the changes happened on the cluster Production, you will have to select Cluster as Target type and then you will have to select Production from within the cluster list.

                      Quick Filters

                      While navigating within the console, a few quick filters allow you to jump on the audit logs and get the events happened on that specific object. For example, you can quickly get the events happened on a specific environment, by clicking on the See Events button available within the 3 dots sub-menu

                      See Events Quick Filter

                      Export

                      Not yet available, feature coming soon!

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/advanced-settings/index.html b/docs/using-qovery/configuration/advanced-settings/index.html index 2690fa15bd..a4d58d70e9 100644 --- a/docs/using-qovery/configuration/advanced-settings/index.html +++ b/docs/using-qovery/configuration/advanced-settings/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Service Advanced Settings

                      To further fine-tune your Qovery infrastructure, you can set advanced settings through the Advanced Settings section of your service.

                      To access the Advanced Settings section:

                      1. Select the service where you want to modify the advanced settings

                        Settings

                      2. Open the advanced settings section from the left menu

                        Advanced Settings

                      The screen shows you the list of available advanced settings and for each of them:

                      • The default value
                      • The value configured right now

                      You can show only the modified values by activating the "Show only overridden settings" feature toggle.

                      All services have access to advanced settings, you can find where they are available in the documentation below with those badges:

                      Application Deployment

                      build.timeout_max_sec

                      TypeDescriptionDefault Value
                      integerAllows you to specify an interval, in seconds, after which the application build times out.1800

                      build.cpu_max_in_milli

                      TypeDescriptionDefault Value
                      integerCPU allocated to your build process4000

                      build.ram_max_in_gib

                      TypeDescriptionDefault Value
                      integerGB RAM allocated to your build process8

                      deployment.custom_domain_check_enabled

                      TypeDescriptionUse CaseDefault Value
                      booleanQovery allows you to set custom domains for your applications through the addition of a CNAME record to your domain's DNS settings. By default, when an application is deployed, Qovery checks that the CNAME record is set up correctly. This advanced setting allows you to disable this check.If you are using a Content Delivery Network (CDN), checking the CNAME setup for any custom domains you may have set up is likely to stall the deployment of your application.

                      Therefore, if you are using a CDN behind your application, we recommend disabling this feature to save time during your application deployments.
                      true

                      deployment.termination_grace_period_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDecide how many times in seconds the application is supposed to stop at maximum. After this time, the application will be forced to stop (killed)An application requiring several tasks to be stopped properly should have a higher grace period. If the application finishes early, then it will not wait until the end of the grace period60

                      deployment.affinity.node.required

                      TypeDescriptionUse CaseDefault Value
                      Map<String, String>Set pod placement on specific Kubernetes nodes labels.Can be useful to send pods on GPU nodes or any other specific workload based on node lablels (Eg. {"eks.amazonaws.com/nodegroup": "gpu"})``

                      deployment.antiaffinity.pod

                      TypeDescriptionDefault Value
                      stringDefine how you want pods affinity to behave.
                      Preferred: allows, but does not require, pods of a given service are not co-located (or co-hosted) on a single node
                      Required: ensures that the pods of a given service are not co-located (or co-hosted) on a single node (safer in term of availability but can be expensive depending on the number of replicas)
                      Preferred

                      Deployment strategy

                      deployment.update_strategy.type

                      TypeDescriptionUse CaseDefault Value
                      stringSet deployment strategy type (RollingUpdate or Recreate)Rolling update strategy will gracefully rollout new versions, while Recreate will stop all current versions and create new ones once all old ones have been shutdown (more info)RollingUpdate

                      deployment.update_strategy.rolling_update.max_unavailable_percent

                      TypeDescriptionDefault Value
                      integerDefine the percentage of a maximum number of pods that can be unavailable during the update process (more info).25

                      deployment.update_strategy.rolling_update.max_surge_percent

                      TypeDescriptionDefault Value
                      integerDefine the percentage of the maximum number of pods that can be created over the desired number of pods (more info)25

                      Network Settings

                      network.ingress.cors_allow_headers

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which set of headers can be present in the client request.For security purposes, you can indicate which HTTP headers can be used during a CORS preflight request which includes the Access-Control-Request-Headers request header. For more information, see CORS HTTP Response Headers."DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization"

                      network.ingress.cors_allow_methods

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which set of methods can be used for the client request.For security purposes, you can indicate which HTTP methods are permitted while accessing a resource in response to cross-origin requests. For more information, see CORS HTTP Response Headers."GET, PUT, POST, DELETE, PATCH, OPTIONS"

                      network.ingress.cors_allow_origin

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which origin(s) (domain, scheme, port) can access a resource.For security purposes, you can allow only one or a short list of origins to access your resources. For more information, see CORS HTTP Response Headers."*"

                      network.ingress.enable_cors

                      TypeDescriptionUse CaseDefault Value
                      booleanAllows you to enable Cross-Origin Resource Sharing (CORS).The CORS mechanism supports secure cross-origin requests and data transfers between browsers and servers. For more information on CORS and when to enable it, see Cross-Origin Resources Sharing.false

                      network.ingress.enable_sticky_session

                      TypeDescriptionUse CaseDefault Value
                      booleanAllows you to enable Sticky session.Enable the load balancer to bind a user's session to a specific target. This ensures that all requests from the user during the session are sent to the same targetfalse

                      network.ingress.keepalive_time_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerLimits the maximum time (in seconds) during which requests can be processed through one keepalive connection. After this time is reached, the connection is closed following the subsequent request processing.Useful to tune your gRPC application3600

                      network.ingress.keepalive_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) during which an idle keepalive connection to an upstream server will stay open.Useful to tune your gRPC application60

                      network.ingress.proxy_body_size_mb

                      TypeDescriptionUse CaseDefault Value
                      integerAllows you to set, in megabytes, a maximum size for resources that can be downloaded from your server.By default, users can download resources (files, images, videos...) of up to 100 MB. You can use this advanced setting to lower or increase this limitation.100

                      network.ingress.proxy_buffer_size_kb

                      TypeDescriptionUse CaseDefault Value
                      integerAllows you to set, in kilobytes, a header buffer size used while reading the response header from upstream.E.g. You are using Auth0 with NextJS, you will need to set a bigger header size4

                      network.ingress.proxy_connect_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDefines a timeout (in seconds) for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.E.g. You can use it to define the maximum time to wait for your application to establish the connexion.60

                      network.ingress.proxy_read_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDefines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                      network.ingress.proxy_send_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                      network.ingress.proxy_buffering

                      TypeDescriptionDefault Value
                      stringAllows you to enable or disable nginx proxy-buffering. Valid values are on or offon

                      network.ingress.proxy_request_buffering

                      TypeDescriptionDefault Value
                      stringAllows you to enable or disable nginx proxy-request_buffering. Valid values are on or offon

                      network.ingress.send_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.Useful to define the maximum timeout to wait for client connection.60

                      network.ingress.whitelist_source_range

                      TypeDescriptionUse CaseDefault Value
                      stringAllows you to specify which IP ranges are allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1By default, any IP can access your application if it's exposed publicly and the users know the URL. You can limit its access by specifying the IPs you want to reach the app (e.g. the IP of your office)0.0.0.0/0 (any IP)

                      network.ingress.denylist_source_range

                      TypeDescriptionDefault Value
                      stringAllows you to specify which IP ranges are not allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1``

                      network.ingress.basic_auth_env_var

                      TypeDescriptionDefault Value
                      stringSet the name of an environment variable to use as a basic authentication (login:crypted_password) from htpasswd command.``

                      Here is an example where you can create a secret environment variable on Qovery and set a name like BASIC_AUTH_CREDENTIALS. The content should be the result of the htpasswd command:

                      $ htpasswd -n <username>
                      New password:
                      Re-type new password:
                      username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20

                      The content of the BASIC_AUTH_CREDENTIALS environment variable should be: username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. To finish, set the network.ingress.basic_auth_env_var advanced settings to BASIC_AUTH_CREDENTIALS.

                      You can pass set credentials by separating them with a comma. For example: username1:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20,username2:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. However, the total length of the environment variable should not exceed 1MB.

                      network.ingress.extra_headers

                      TypeDescriptionDefault Value
                      stringAllows you to specify response headers with values separated by comma (e.g. {"X-Frame-Options":"DENY","X-Content-Type-Options":"nosniff"}{}

                      Auto-scaling

                      hpa.cpu.average_utilization_percent

                      TypeDescriptionDefault Value
                      integerAuto-scaling is triggered when a specific CPU utilization metric is reached (for instance, 40%). This advanced setting allows you to set this metric.60

                      Job Settings

                      job.delete_ttl_seconds_after_finished

                      TypeDescriptionDefault Value
                      integerBy default terminated jobs in a completed or failure state are not deleted. if this parameter is set, Kubernetes will automatically cleanup completed jobs after the ttlnull

                      cronjob.concurrency_policy

                      TypeDescriptionDefault Value
                      stringIt defines if it is allowed to start another instance of the same job if the previous execution didn't finish yet: Allow/Forbid/Replace)Forbidden

                      cronjob.failed_job_history_limit

                      TypeDescriptionDefault Value
                      stringAllows you to define the maximum number of failed job executions that should be returned in the job execution history1

                      cronjob.success_job_history_limit

                      TypeDescriptionDefault Value
                      stringAllows you to define the maximum number of succeeded job executions that should be returned in the job execution history1

                      Security

                      security.service_account_name

                      TypeDescriptionUse CaseDefault Value
                      stringAllows you to set an existing Kubernetes service account nameE.g. On AWS, you can assume a role on an application to give it specific AWS permissions without having to specify AWS credentials``
                      +

                      Service Advanced Settings

                      To further fine-tune your Qovery infrastructure, you can set advanced settings through the Advanced Settings section of your service.

                      To access the Advanced Settings section:

                      1. Select the service where you want to modify the advanced settings

                        Settings

                      2. Open the advanced settings section from the left menu

                        Advanced Settings

                      The screen shows you the list of available advanced settings and for each of them:

                      • The default value
                      • The value configured right now

                      You can show only the modified values by activating the "Show only overridden settings" feature toggle.

                      All services have access to advanced settings, you can find where they are available in the documentation below with those badges:

                      Application Deployment

                      build.timeout_max_sec

                      TypeDescriptionDefault Value
                      integerAllows you to specify an interval, in seconds, after which the application build times out.1800

                      build.cpu_max_in_milli

                      TypeDescriptionDefault Value
                      integerCPU allocated to your build process4000

                      build.ram_max_in_gib

                      TypeDescriptionDefault Value
                      integerGB RAM allocated to your build process8

                      deployment.custom_domain_check_enabled

                      TypeDescriptionUse CaseDefault Value
                      booleanQovery allows you to set custom domains for your applications through the addition of a CNAME record to your domain's DNS settings. By default, when an application is deployed, Qovery checks that the CNAME record is set up correctly. This advanced setting allows you to disable this check.If you are using a Content Delivery Network (CDN), checking the CNAME setup for any custom domains you may have set up is likely to stall the deployment of your application.

                      Therefore, if you are using a CDN behind your application, we recommend disabling this feature to save time during your application deployments.
                      true

                      deployment.termination_grace_period_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDecide how many times in seconds the application is supposed to stop at maximum. After this time, the application will be forced to stop (killed)An application requiring several tasks to be stopped properly should have a higher grace period. If the application finishes early, then it will not wait until the end of the grace period60

                      deployment.affinity.node.required

                      TypeDescriptionUse CaseDefault Value
                      Map<String, String>Set pod placement on specific Kubernetes nodes labels.Can be useful to send pods on GPU nodes or any other specific workload based on node lablels (Eg. {"eks.amazonaws.com/nodegroup": "gpu"})``

                      deployment.antiaffinity.pod

                      TypeDescriptionDefault Value
                      stringDefine how you want pods affinity to behave.
                      Preferred: allows, but does not require, pods of a given service are not co-located (or co-hosted) on a single node
                      Required: ensures that the pods of a given service are not co-located (or co-hosted) on a single node (safer in term of availability but can be expensive depending on the number of replicas)
                      Preferred

                      Deployment strategy

                      deployment.update_strategy.type

                      TypeDescriptionUse CaseDefault Value
                      stringSet deployment strategy type (RollingUpdate or Recreate)Rolling update strategy will gracefully rollout new versions, while Recreate will stop all current versions and create new ones once all old ones have been shutdown (more info)RollingUpdate

                      deployment.update_strategy.rolling_update.max_unavailable_percent

                      TypeDescriptionDefault Value
                      integerDefine the percentage of a maximum number of pods that can be unavailable during the update process (more info).25

                      deployment.update_strategy.rolling_update.max_surge_percent

                      TypeDescriptionDefault Value
                      integerDefine the percentage of the maximum number of pods that can be created over the desired number of pods (more info)25

                      Network Settings

                      network.ingress.cors_allow_headers

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which set of headers can be present in the client request.For security purposes, you can indicate which HTTP headers can be used during a CORS preflight request which includes the Access-Control-Request-Headers request header. For more information, see CORS HTTP Response Headers."DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization"

                      network.ingress.cors_allow_methods

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which set of methods can be used for the client request.For security purposes, you can indicate which HTTP methods are permitted while accessing a resource in response to cross-origin requests. For more information, see CORS HTTP Response Headers."GET, PUT, POST, DELETE, PATCH, OPTIONS"

                      network.ingress.cors_allow_origin

                      TypeDescriptionUse CaseDefault Value
                      string(For CORS users) Allows you to specify which origin(s) (domain, scheme, port) can access a resource.For security purposes, you can allow only one or a short list of origins to access your resources. For more information, see CORS HTTP Response Headers."*"

                      network.ingress.enable_cors

                      TypeDescriptionUse CaseDefault Value
                      booleanAllows you to enable Cross-Origin Resource Sharing (CORS).The CORS mechanism supports secure cross-origin requests and data transfers between browsers and servers. For more information on CORS and when to enable it, see Cross-Origin Resources Sharing.false

                      network.ingress.enable_sticky_session

                      TypeDescriptionUse CaseDefault Value
                      booleanAllows you to enable Sticky session.Enable the load balancer to bind a user's session to a specific target. This ensures that all requests from the user during the session are sent to the same targetfalse

                      network.ingress.keepalive_time_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerLimits the maximum time (in seconds) during which requests can be processed through one keepalive connection. After this time is reached, the connection is closed following the subsequent request processing.Useful to tune your gRPC application3600

                      network.ingress.keepalive_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) during which an idle keepalive connection to an upstream server will stay open.Useful to tune your gRPC application60

                      network.ingress.proxy_body_size_mb

                      TypeDescriptionUse CaseDefault Value
                      integerAllows you to set, in megabytes, a maximum size for resources that can be downloaded from your server.By default, users can download resources (files, images, videos...) of up to 100 MB. You can use this advanced setting to lower or increase this limitation.100

                      network.ingress.proxy_buffer_size_kb

                      TypeDescriptionUse CaseDefault Value
                      integerAllows you to set, in kilobytes, a header buffer size used while reading the response header from upstream.E.g. You are using Auth0 with NextJS, you will need to set a bigger header size4

                      network.ingress.proxy_connect_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDefines a timeout (in seconds) for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.E.g. You can use it to define the maximum time to wait for your application to establish the connexion.60

                      network.ingress.proxy_read_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerDefines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response. If the proxied server does not transmit anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                      network.ingress.proxy_send_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) for transmitting a request to the proxied server. The timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.E.g. You can use it to fine-tune your WebSocket application.60

                      network.ingress.proxy_buffering

                      TypeDescriptionDefault Value
                      stringAllows you to enable or disable nginx proxy-buffering. Valid values are on or offon

                      network.ingress.proxy_request_buffering

                      TypeDescriptionDefault Value
                      stringAllows you to enable or disable nginx proxy-request_buffering. Valid values are on or offon

                      network.ingress.send_timeout_seconds

                      TypeDescriptionUse CaseDefault Value
                      integerSets a timeout (in seconds) for transmitting a response to the client. The timeout is set only between two successive write operations, not for the transmission of the whole response. If the client does not receive anything within this time, the connection is closed.Useful to define the maximum timeout to wait for client connection.60

                      network.ingress.whitelist_source_range

                      TypeDescriptionUse CaseDefault Value
                      stringAllows you to specify which IP ranges are allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1By default, any IP can access your application if it's exposed publicly and the users know the URL. You can limit its access by specifying the IPs you want to reach the app (e.g. the IP of your office)0.0.0.0/0 (any IP)

                      network.ingress.denylist_source_range

                      TypeDescriptionDefault Value
                      stringAllows you to specify which IP ranges are not allowed to access your application. The value is a comma-separated list of CIDRs, e.g. 10.0.0.0/24,172.10.0.1``

                      network.ingress.basic_auth_env_var

                      TypeDescriptionDefault Value
                      stringSet the name of an environment variable to use as a basic authentication (login:crypted_password) from htpasswd command.``

                      Here is an example where you can create a secret environment variable on Qovery and set a name like BASIC_AUTH_CREDENTIALS. The content should be the result of the htpasswd command:

                      $ htpasswd -n <username>
                      New password:
                      Re-type new password:
                      username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20

                      The content of the BASIC_AUTH_CREDENTIALS environment variable should be: username:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. To finish, set the network.ingress.basic_auth_env_var advanced settings to BASIC_AUTH_CREDENTIALS.

                      You can pass set credentials by separating them with a comma. For example: username1:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20,username2:$apr1$jpwW4vG9$fwbzWBgRqARzNX93plDq20. However, the total length of the environment variable should not exceed 1MB.

                      network.ingress.extra_headers

                      TypeDescriptionDefault Value
                      stringAllows you to specify response headers with values separated by comma (e.g. {"X-Frame-Options":"DENY","X-Content-Type-Options":"nosniff"}{}

                      Auto-scaling

                      hpa.cpu.average_utilization_percent

                      TypeDescriptionDefault Value
                      integerAuto-scaling is triggered when a specific CPU utilization metric is reached (for instance, 40%). This advanced setting allows you to set this metric.60

                      Job Settings

                      job.delete_ttl_seconds_after_finished

                      TypeDescriptionDefault Value
                      integerBy default terminated jobs in a completed or failure state are not deleted. if this parameter is set, Kubernetes will automatically cleanup completed jobs after the ttlnull

                      cronjob.concurrency_policy

                      TypeDescriptionDefault Value
                      stringIt defines if it is allowed to start another instance of the same job if the previous execution didn't finish yet: Allow/Forbid/Replace)Forbidden

                      cronjob.failed_job_history_limit

                      TypeDescriptionDefault Value
                      stringAllows you to define the maximum number of failed job executions that should be returned in the job execution history1

                      cronjob.success_job_history_limit

                      TypeDescriptionDefault Value
                      stringAllows you to define the maximum number of succeeded job executions that should be returned in the job execution history1

                      Security

                      security.service_account_name

                      TypeDescriptionUse CaseDefault Value
                      stringAllows you to set an existing Kubernetes service account nameE.g. On AWS, you can assume a role on an application to give it specific AWS permissions without having to specify AWS credentials``
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/application-health-checks/index.html b/docs/using-qovery/configuration/application-health-checks/index.html index 171349ee0c..34fe8a9945 100644 --- a/docs/using-qovery/configuration/application-health-checks/index.html +++ b/docs/using-qovery/configuration/application-health-checks/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@ You have a liveness probe configured on port 80 of your application. If during the deployment of your application the probes can't connect to port 80 and we reach a timeout, the deployment fails.

                      Qovery allows you to manage these probes directly from within the Qovery console during the setup of your application, letting you decide their activation, configuration and check frequency.

                      Probes can be configured for:

                      • Applications
                      • Cronjobs
                      • Lifecycle Jobs

                      Probes Configuration

                      The following configuration parameters are valid for both the Liveness and the Readiness probes.

                      Type

                      Allows you to specify the type of probe you want to run against your application:

                      • NONE if NONE is selected, the probe is disabled and thus Kubernetes won't be able to verify the state of your application and take the right corrective actions.
                      • HTTP probes are the most common probe type. You can use them if your application is a HTTP server, or if you create a lightweight HTTP server inside your application specifically to respond to such probes. When using a HTTP probe, you need to configure:

                        • a port
                        • a path Once configured, Kubernetes pings a path (for example: /healthz ) at a given port. If it gets a response in the 200 or 300 range, the check is passed. Otherwise, it is considered as failed and Kubernetes takes the necessary corrective actions.
                      • TCP probes are most often used when HTTP or command probes aren't an option. When using a TCP Liveness probe, Kubernetes tries to establish a connection on the specified port. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                      • gRPC probes When using a gRCP Liveness probe, Kubernetes tries to establish a connection on the specified port and service. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                      • EXEC probes -Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                      Initial Delay (in seconds)

                      Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                      Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                      Period (in seconds)

                      Allows you to specify an interval, in seconds, between each probe.

                      Timeout (in seconds)

                      Allows you to specify the interval, in seconds, after which the probe times out.

                      Success Threshold

                      Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                      Failure Threshold

                      Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                      Configuiration for Long-starting application

                      If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                      If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                      +Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                      Initial Delay (in seconds)

                      Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                      Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                      Period (in seconds)

                      Allows you to specify an interval, in seconds, between each probe.

                      Timeout (in seconds)

                      Allows you to specify the interval, in seconds, after which the probe times out.

                      Success Threshold

                      Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                      Failure Threshold

                      Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                      Configuiration for Long-starting application

                      If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                      If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                      - + - + @@ -69,7 +69,7 @@ - + diff --git a/docs/using-qovery/configuration/application/index.html b/docs/using-qovery/configuration/application/index.html index f6d6a5c9bd..33d49702b6 100644 --- a/docs/using-qovery/configuration/application/index.html +++ b/docs/using-qovery/configuration/application/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -57,14 +57,14 @@ You can adjust the minimum and maximum of instances you need in your application settings. Qovery runs your application on Kubernetes and relies on metrics-server service to auto-scale your app.

                      Storage

                      Block Storage

                      The default filesystem for applications running on Qovery is ephemeral. Application data isn’t persisted across deploys and restarts, which works just fine for most apps because they use managed databases to persist data.

                      However, many applications need persistent disk storage that isn’t ephemeral. These include:

                      • Blogging platforms and CMSs like WordPress, Ghost, and Strapi.
                      • Collaboration apps like Mattermost, GitLab, and Discourse.

                      This is where Qovery block Storage comes in. Qovery applications can use storage to store data that persists across deploys and restarts, making it easy to deploy stateful applications.

                      Use cases
                      ✅ Good use cases
                      • For I/O intensive applications (E.g. database)
                      • To store temporary files
                      ❌ Bad use cases
                      • To store file > 1 TB
                      • To expose files from an application (E.g. images)
                      Types of Block Storage

                      Qovery Storage supports:

                      TypeMax IOPSMax ThroughputMin SizeMax SizeUse cases
                      fast_ssd640001GB/s5GB10GB Community / 1TB paid plansCritical business applications that require sustained IOPS like databases
                      Configuration

                      You can set up your Block Storage in Storage section of your application configuration.

                      Application Storage

                      Ports

                      Within this section you can define the port exposed by your application to the other services or even over the internet. You can edit the existing ports or declare new ones by specifying:

                      • Application port: this is the port exposed internally by your application for the other services.
                      • Protocol: you can select the protocol used by your application : HTTP (for both standard HTTP or websocket communications), gRPC, TCP, UDP.
                      • Publicly exposed: it allows you to expose over the public network your service. A public domain will be assigned to your application during the deployment (see Connectin from the internet section)
                      • If Publicly Exposed is selected:
                        • External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443.
                        • Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is p<portNumber> (see Qovery Provided Domain section for more information)

                      Application Ports

                      Important Informations

                      • Most of the Kubernetes Health Checks]docs.using-qovery.configuration.service-health-checks are based on the port declared in this section. Make sure you declare the right port and that you configure the health checks properly.
                      • Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the advanced settings section
                      • Exposing publicly TCP/UDP ports requires to create a dedicated load balancer and it takes a few minutes before having it ready (~15 minutes). Note also that this has a direct impact on your cloud provider bill.
                      • You can configure your application to use the PORT environment variable by adding the PORT on your application env variables page.
                      • A Note on Listening IPs: It's best for your application to listen on 0.0.0.0:$PORT. While most things work with 127.0.0.1 and localhost, some do not (NodeJS for example)

                      Health Checks

                      To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                      Domains

                      Within this section you can customize the domain used to reach your application.

                      You can customize the domain of your application in different ways, depending on what you want to achieve:

                      • You want to use your own domain for this application
                      • You want to modify the subdomain assigned to your application by Qovery (i.e. change p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh into my-app-domain.za8ad0657.bool.sh).

                      In both cases, you can assign the new custom domain to your application press the Add Domain button.

                      Application Domains

                      Configuring your own domain

                      Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two CNAME records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud).

                      Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If wildcard is not supported by your DNS provider, you will have to configure each subdomain manually.

                      If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the “Port Name” value within the port settings.

                      From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain.

                      Custom Domain

                      Special case - CDN in proxy mode

                      If your service is behind a CDN using a proxy mode (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won't be able to do that for you and it will raise warnings on your application status.

                      CDN Proxy

                      Change the auto assigned sub-domain

                      You can specify a different sub-domain for your application as long as it belongs to the assigned cluster domain (see Qovery provided domains). Example:

                      • your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is za8ad0659.bool.sh)
                      • you can enter a new custom domain myfrontend.za8ad0659.bool.sh (since it is a subdomain of the cluster domain)

                      The application will now be accessible from both the default and the new custom domain.

                      Connecting from the internet

                      Your application can be reached from the internet by publicly exposing at least one of its ports (See the Ports section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the Domain section.

                      Qovery provided domains

                      For each port publicly exposed, a domain is automatically assigned by Qovery to your application. Qovery will manage for you the networking and the TLS configuration for these domains.

                      Example: p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh

                      Note:

                      • each service deployed on the same cluster will have the same root domain assigned (example: za8ad0657.bool.sh)
                      • the first characters of the domain (before the -) is based on the portName given to the port associated with this domain (See the port section)
                      • a default domain (without the portName) is assigned to the default port(See the port section). Example zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh

                      Special Case - Preview Environment -For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                      • portName: is the port name, as explained above
                      • prID: is the id of the PR that has generated the preview environment
                      • srvName: is the name of the service
                      • envSourceName: is the name of the blueprint environment that has created the current preview environment

                      domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                      Custom domains

                      If you prefer to assign your own domain to the application have a look at the Domain section to know more.

                      Connecting to a database

                      To know how to access your database from your application, have a look at the database section.

                      Connecting to another application

                      To know how to access your database from your application, have a look at the database section.

                      Environment Variable

                      To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                      Secrets

                      To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                      Logs

                      To learn how to display your application logs, navigate to logs section

                      SSH

                      To connect to your application via SSH, please use the via the Qovery SSH command available on our CLI.

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete an Application

                      1. Choose your application

                      2. In the application overview, click on the 3 dots button and remove the application.

                        Application

                      +For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

                      • portName: is the port name, as explained above
                      • prID: is the id of the PR that has generated the preview environment
                      • srvName: is the name of the service
                      • envSourceName: is the name of the blueprint environment that has created the current preview environment

                      domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

                      Custom domains

                      If you prefer to assign your own domain to the application have a look at the Domain section to know more.

                      Connecting to a database

                      To know how to access your database from your application, have a look at the database section.

                      Connecting to another application

                      To know how to access your database from your application, have a look at the database section.

                      Environment Variable

                      To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                      Secrets

                      To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                      Logs

                      To learn how to display your application logs, navigate to logs section

                      SSH

                      To connect to your application via SSH, please use the via the Qovery SSH command available on our CLI.

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete an Application

                      1. Choose your application

                      2. In the application overview, click on the 3 dots button and remove the application.

                        Application

                      - + - + @@ -72,7 +72,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html index d1a4f867d8..0ce178dccb 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                      Amazon Web Services (AWS)

                      Qovery lets you quickly deploy applications to your Amazon Web Services (AWS) account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account.

                      Getting started

                      Connect your AWS account

                      To link your AWS account to Qovery you need to provide an AWS access key id and secret access key with the required IAM permissions.

                      Create your AWS credentials - access key id and secret access key

                      1. Connect to your AWS console

                      2. Go to IAM

                      3. Create Admins group without any permissions

                      4. Create one IAM user called qovery.

                      5. Setup IAM permissions to the qovery user.

                        Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:

                      6. To create an access key id and secret access key, go to the Security Credentials tab of the Qovery user and press Create access key

                        You can now save the access key id and secret access key

                      Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.

                      Install a new cluster on Qovery

                      You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow this documentation to create a new cluster on your organization.

                      Deployed AWS components

                      Network ServicesOptionalDescription
                      A dedicated multi AZ VPCnoEverything Qovery will deploy, will be deployed inside this VPC
                      Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)noDedicated network fand security rules for RDS
                      Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)noDedicated network fand security rules for DocumentDB
                      Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)noDedicated network fand security rules for Elasticache
                      An internet gateway for the VPCnoRequired to let containers having access to Internet
                      Dedicated NLB to redirect 443 traffic to Nginx IngressnoHigh Availability network load balancer, pointing to Nginx Ingress inside EKS
                      NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing tableyesUseful to get outgoing static IP
                      Dedicated VPC routes for VPC peeringyesUseful to perform VPC peering with others VPC on the same or different account
                      Kubernetes ServicesOptionalDescription
                      A dedicated EKS cluster (multi AZ) for this VPCnoDedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer
                      IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policynoRequired to allow EKS cluster having access to volume and mount them to containers
                      IAM dedicated user for AWS IAM User Sync + a dedicated policynoRequired to sync desired IAM account to EKS to let them connect directly ot Kubernetes
                      IAM dedicated user for a Cluster Autoscaler+ a dedicated policynoRequired to let autoscaler having access to EC2 autoscaling groups
                      IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodesnoRequired to let EKS having access to container registry and configure the Kubernetes network
                      Security group for EKS remote access (dual authentication: TLS + IAM authenticator)noRequired to have a secure remote access on the Kubernetes cluster
                      Security group for 443 port pointing to Nginx ingress inside EKSnoExternal access to web services inside the Kubernetes cluster
                      Other ServicesOptionalDescription
                      Cloudwatch log groups for the EKS clusternoKubernetes logs, useful for the AWS and EKS support to diagnose an issue
                      Dedicated S3 bucket for application's logs + a dedicated IAM accountnoApplication's logs are stored in an KMS encrypted S3 pivate bucket
                      Dedicated S3 bucket to store the kubeconfignoKubernetes Kubeconfig is stored in an KMS encrypted, private and versionned bucket, used by Qovery for application's deployment

                      Remove Qovery from your AWS account

                      To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:

                      • Environments
                      • Clusters

                      IAM permissions

                      Qovery required IAM permissions to create, update and managed the infrastructure.

                      • IAM is used to create IAM roles
                      • S3 is used to store our generated configuration files
                      • Cloudwatch, for creating a group stream for each Kubernetes clusters
                      • Autoscaling for RDS and autoscaling rules for the Kubernetes cluster
                      • Elastic load-balancing for ELB / ALB / NLB.
                      • DynamoDB to have a distributed lock on infrastructure deployment.
                      • ECR for managing the container registry, create/update/delete repository.
                      • KMS to load and store keys (RDS, SSH, …)
                      • EKS to create and update the Kubernetes cluster.
                      Minimum IAM permission set
                      Last update: 2023-06-08

                      Below you can find the minimum permission set required by Qovery to run and deploy your applications.

                      Policies lengths are limited regarding which object they’re attached to but the one Qovery needs represent more than the maximum (~6000 characters).

                      In order to setup it up, you need to create two IAM groups, each one with one of the following policies.

                      Then we must create a user added to each of the previously created groups.

                      Once it’s done, the user’s access key and secret key can be used in Qovery.

                      {
                      "Version": "2012-10-17",
                      "Statement": [
                      {
                      "Effect": "Allow",
                      "Action": [
                      "autoscaling:SuspendProcesses",
                      "ec2:AllocateAddress",
                      "ec2:AssociateAddress",
                      "ec2:AssociateRouteTable",
                      "ec2:AttachVolume",
                      "ec2:AttachInternetGateway",
                      "ec2:AuthorizeSecurityGroupEgress",
                      "ec2:AuthorizeSecurityGroupIngress",
                      "ec2:CreateInternetGateway",
                      "ec2:CreateKeyPair",
                      "ec2:CreateLaunchTemplate",
                      "ec2:CreateLaunchTemplateVersion",
                      "ec2:CreateNatGateway",
                      "ec2:CreateRoute",
                      "ec2:CreateRouteTable",
                      "ec2:CreateSecurityGroup",
                      "ec2:CreateSubnet",
                      "ec2:CreateTags",
                      "ec2:CreateVolume",
                      "ec2:CreateVpc",
                      "ec2:DeleteInternetGateway",
                      "ec2:DeleteKeyPair",
                      "ec2:DeleteLaunchTemplate",
                      "ec2:DeleteNatGateway",
                      "ec2:DeleteRouteTable",
                      "ec2:DeleteSecurityGroup",
                      "ec2:DeleteSubnet",
                      "ec2:DeleteVolume",
                      "ec2:DeleteVpc",
                      "ec2:DescribeAddresses",
                      "ec2:DescribeAvailabilityZones",
                      "ec2:DescribeImages",
                      "ec2:DescribeInstanceAttribute",
                      "ec2:DescribeInstanceCreditSpecifications",
                      "ec2:DescribeInstances",
                      "ec2:DescribeInstanceTypes",
                      "ec2:DescribeInternetGateways",
                      "ec2:DescribeKeyPairs",
                      "ec2:DescribeLaunchTemplateVersions",
                      "ec2:DescribeLaunchTemplates",
                      "ec2:DescribeNatGateways",
                      "ec2:DescribeNetworkAcls",
                      "ec2:DescribeNetworkInterfaces",
                      "ec2:DescribeRouteTables",
                      "ec2:DescribeSecurityGroupRules",
                      "ec2:DescribeSecurityGroups",
                      "ec2:DescribeSubnets",
                      "ec2:DescribeTags",
                      "ec2:DescribeVolumes",
                      "ec2:DescribeVpcAttribute",
                      "ec2:DescribeVpcClassicLink",
                      "ec2:DescribeVpcClassicLinkDnsSupport",
                      "ec2:DescribeVpcs",
                      "ec2:DetachInternetGateway",
                      "ec2:DetachVolume",
                      "ec2:DisassociateAddress",
                      "ec2:DisassociateRouteTable",
                      "ec2:ImportKeyPair",
                      "ec2:ModifySubnetAttribute",
                      "ec2:ModifyVpcAttribute",
                      "ec2:ReleaseAddress",
                      "ec2:RevokeSecurityGroupEgress",
                      "ec2:RevokeSecurityGroupIngress",
                      "ec2:RunInstances",
                      "ec2:StopInstances",
                      "ec2:TerminateInstances",
                      "ecr:BatchCheckLayerAvailability",
                      "ecr:BatchGetImage",
                      "ecr:CompleteLayerUpload",
                      "ecr:CreateRepository",
                      "ecr:DeleteRepository",
                      "ecr:DescribeImages",
                      "ecr:DescribeRepositories",
                      "ecr:GetAuthorizationToken",
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:InitiateLayerUpload",
                      "ecr:PutImage",
                      "ecr:PutLifecyclePolicy",
                      "ecr:TagResource",
                      "ecr:UploadLayerPart",
                      "eks:CreateAddon",
                      "eks:CreateCluster",
                      "eks:CreateNodegroup",
                      "eks:DeleteAddon",
                      "eks:DeleteCluster",
                      "eks:DeleteNodegroup",
                      "eks:DescribeAddon",
                      "eks:DescribeCluster",
                      "eks:DescribeNodegroup",
                      "eks:DescribeUpdate",
                      "eks:ListClusters",
                      "eks:ListNodegroups",
                      "eks:TagResource",
                      "eks:UpdateAddon",
                      "eks:UpdateClusterConfig",
                      "eks:UpdateClusterVersion",
                      "eks:UpdateNodegroupConfig",
                      "eks:UpdateNodegroupVersion",
                      "elasticache:AddTagsToResource",
                      "elasticache:CreateCacheSubnetGroup",
                      "elasticache:CreateReplicationGroup",
                      "elasticache:DeleteCacheSubnetGroup",
                      "elasticache:DeleteReplicationGroup",
                      "elasticache:DescribeCacheClusters",
                      "elasticache:DescribeCacheSubnetGroups",
                      "elasticache:DescribeReplicationGroups",
                      "elasticache:ListTagsForResource",
                      "elasticloadbalancing:DescribeLoadBalancers",
                      "elasticloadbalancing:DescribeTags"
                      ],
                      "Resource": "*"
                      }
                      ]
                      }
                      {
                      "Version": "2012-10-17",
                      "Statement": [
                      {
                      "Effect": "Allow",
                      "Action": [
                      "iam:AddRoleToInstanceProfile",
                      "iam:AttachRolePolicy",
                      "iam:AttachUserPolicy",
                      "iam:CreateAccessKey",
                      "iam:CreateInstanceProfile",
                      "iam:CreateOpenIDConnectProvider",
                      "iam:CreatePolicy",
                      "iam:CreateRole",
                      "iam:CreateServiceLinkedRole",
                      "iam:CreateUser",
                      "iam:DeleteAccessKey",
                      "iam:DeleteInstanceProfile",
                      "iam:DeleteOpenIDConnectProvider",
                      "iam:DeletePolicy",
                      "iam:DeleteRole",
                      "iam:DeleteRolePolicy",
                      "iam:DeleteUser",
                      "iam:DeleteUserPolicy",
                      "iam:DetachRolePolicy",
                      "iam:DetachUserPolicy",
                      "iam:GetInstanceProfile",
                      "iam:GetOpenIDConnectProvider",
                      "iam:GetPolicy",
                      "iam:GetPolicyVersion",
                      "iam:GetRole",
                      "iam:GetRolePolicy",
                      "iam:GetUser",
                      "iam:GetUserPolicy",
                      "iam:ListAccessKeys",
                      "iam:ListAttachedRolePolicies",
                      "iam:ListAttachedUserPolicies",
                      "iam:ListGroupsForUser",
                      "iam:ListInstanceProfilesForRole",
                      "iam:ListPolicyVersions",
                      "iam:ListRolePolicies",
                      "iam:PassRole",
                      "iam:PutRolePolicy",
                      "iam:PutUserPolicy",
                      "iam:RemoveRoleFromInstanceProfile",
                      "iam:TagInstanceProfile",
                      "iam:TagOpenIDConnectProvider",
                      "iam:TagRole",
                      "iam:TagUser",
                      "kms:CreateGrant",
                      "kms:CreateKey",
                      "kms:Decrypt",
                      "kms:DescribeKey",
                      "kms:GenerateDataKey",
                      "kms:GetKeyPolicy",
                      "kms:GetKeyRotationStatus",
                      "kms:ListResourceTags",
                      "kms:PutKeyPolicy",
                      "kms:ScheduleKeyDeletion",
                      "kms:TagResource",
                      "logs:CreateLogGroup",
                      "logs:DeleteLogGroup",
                      "logs:DescribeLogGroups",
                      "logs:ListTagsLogGroup",
                      "logs:PutRetentionPolicy",
                      "logs:TagLogGroup",
                      "rds:AddTagsToResource",
                      "rds:CreateDBCluster",
                      "rds:CreateDBInstance",
                      "rds:CreateDBParameterGroup",
                      "rds:CreateDBSubnetGroup",
                      "rds:DeleteDBCluster",
                      "rds:DeleteDBInstance",
                      "rds:DeleteDBParameterGroup",
                      "rds:DeleteDBSubnetGroup",
                      "rds:DescribeDBClusters",
                      "rds:DescribeDBInstances",
                      "rds:DescribeDBParameterGroups",
                      "rds:DescribeDBParameters",
                      "rds:DescribeDBSubnetGroups",
                      "rds:DescribeGlobalClusters",
                      "rds:ListTagsForResource",
                      "rds:ModifyDBInstance",
                      "rds:ModifyDBParameterGroup",
                      "rds:StartDBCluster",
                      "rds:StartDBInstance",
                      "rds:StopDBCluster",
                      "rds:StopDBInstance",
                      "s3:CreateBucket",
                      "s3:DeleteBucket",
                      "s3:DeleteObject",
                      "s3:DeleteObjectVersion",
                      "s3:DeleteBucketPolicy",
                      "s3:GetAccelerateConfiguration",
                      "s3:GetBucketAcl",
                      "s3:GetBucketCORS",
                      "s3:GetBucketLogging",
                      "s3:GetBucketObjectLockConfiguration",
                      "s3:GetBucketOwnershipControls",
                      "s3:GetBucketPolicy",
                      "s3:GetBucketPublicAccessBlock",
                      "s3:GetBucketRequestPayment",
                      "s3:GetBucketTagging",
                      "s3:GetBucketVersioning",
                      "s3:GetBucketWebsite",
                      "s3:GetEncryptionConfiguration",
                      "s3:GetLifecycleConfiguration",
                      "s3:GetObject",
                      "s3:GetReplicationConfiguration",
                      "s3:ListAccessPoints",
                      "s3:ListAllMyBuckets",
                      "s3:ListBucket",
                      "s3:ListBucketMultipartUploads",
                      "s3:ListBucketVersions",
                      "s3:ListMultiRegionAccessPoints",
                      "s3:ListMultipartUploadParts",
                      "s3:ListStorageLensConfigurations",
                      "s3:PutBucketAcl",
                      "s3:PutBucketOwnershipControls",
                      "s3:PutBucketPolicy",
                      "s3:PutBucketPublicAccessBlock",
                      "s3:PutBucketTagging",
                      "s3:PutBucketVersioning",
                      "s3:PutEncryptionConfiguration",
                      "s3:PutLifecycleConfiguration",
                      "s3:PutObject",
                      "s3:PutObjectRetention",
                      "secretsmanager:CreateSecret",
                      "secretsmanager:TagResource",
                      "sts:GetCallerIdentity"
                      ],
                      "Resource": "*"
                      }
                      ]
                      }

                      Regions

                      Qovery supports the following AWS regions:

                      namedescriptionsupported
                      🇺🇸us-west-2US West (Oregon)Yes
                      🇺🇸us-east-2US East (Ohio)Yes
                      🇺🇸us-east-1US East (N. Virginia)Yes
                      🇺🇸us-west-1US West (N. California)No (Only 2 Availability Zone)
                      🇿🇦af-south-1Africa (Cape Town)Yes
                      🇭🇰ap-east-1Asia Pacific (Hong Kong)Yes
                      🇮🇳ap-south-1Asia Pacific (Mumbai)Yes
                      🇯🇵ap-northeast-1Asia Pacific (Tokyo)Yes
                      🇰🇷ap-northeast-2Asia Pacific (Seoul)Yes
                      🇯🇵ap-northeast-3Asia Pacific (Osaka)Yes
                      🇸🇬ap-southeast-1Asia Pacific (Singapore)Yes
                      🇦🇺ap-southeast-2Asia Pacific (Sydney)Yes
                      🇨🇦ca-central-1Canada (Toronto)Yes
                      🇨🇳cn-north-1China (Beijing)Yes
                      🇨🇳cn-northwest-1China (Ningxia)Yes
                      🇩🇪eu-central-1Europe (Frankfurt)Yes
                      🇮🇪eu-west-1Europe (Ireland)Yes
                      🏴󠁧󠁢󠁥󠁮󠁧󠁿eu-west-2Europe (London)Yes
                      🇫🇷eu-west-3Europe (Paris)Yes
                      🇮🇹eu-south-1Europe (Milan)Yes
                      🇸🇪eu-north-1Europe (Stockholm)Yes
                      🇧🇭me-south-1Middle East (Bahrain)Yes
                      🇧🇷sa-east-1South America (São Paulo)Yes

                      Qovery supports regions where Amazon EKS is supported.

                      Manually configure VPC subnet

                      VPC subnet is automatically defined by Qovery on cluster creation. However, you may want to choose your own VPC subnet, for example to perform VPC Peering.

                      Have a look at [this section][docs.using-qovery.configuration.clusters#custom-vpc-subnet]] to know more on how to set the VPC Subnet.

                      Configure routing table

                      You may want to create and edit a network routing table to perform VPC peering. This can be done by accessing to the parameters of a cluster, in the settings of your organization.

                      Have a look at [this section][docs.using-qovery.configuration.clusters#network]] to know more on how to set the routing table.

                      How Qovery works on AWS

                      Qovery is an abstraction layer on top of AWS and Kubernetes. Qovery manages the configuration of AWS account, and helps you to deploy production ready apps in seconds. -To make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      AWS provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your AWS account.
                      • Your configuration is encrypted on your AWS account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by AWS

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      +To make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      AWS provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your AWS account.
                      • Your configuration is encrypted on your AWS account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by AWS

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      - + - + @@ -67,7 +67,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html index c24e6890f1..807b782ada 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@

                      Digital Ocean (DO)

                      Qovery lets you quickly deploy applications to your Digital Ocean (DO) account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your Digital Ocean account.

                      Getting started

                      Connect your Digital Ocean account

                      To link your Digital Ocean account to Qovery you need to provide a Digital Ocean access key id, secret access key and a personal access token.

                      Create your Digital Ocean credentials - access key id, secret access key and personal access token.

                      1. Connect to your Digital Ocean console

                      2. Go to API

                      3. Copy the generated personal access token.

                      4. Copy the generated access key id and secret access key.

                      Well done!! You now have your Digital Ocean access key id, secret access key and personal token; It is time to connect Qovery to your Digital Ocean account.

                      Install a new cluster on Qovery

                      You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow these steps to create a new cluster.

                      1. Go to your organizations settings.

                      2. On this page, you will be able to see the information and status or your clusters.

                        Click on Add cluster button.

                      3. A modal is displayed, where you can specify the name of your cluster and the Cloud Provider.

                        Select the following Cloud Provider: Digital Ocean.

                        Once you have selected the cloud provider, you will be able to define the Region of your Cluster.

                      4. Here you can choose to set your cluster credentials straight away or later. To set them now, select the Do you want to set credentials? option.

                        If you have already set credentials on another cluster, they have been linked to your Qovery account and can be reused here. Just click on the one you want to use in the drop-down list.

                        If you want to use other credentials (or if you do not have any defined), click + new credentials in the drop-down list.

                      5. A new modal pops up where you can specify the Name of the certificate, the Spaces Access Key, the Spaces Secret Key and the Token.

                        Click on Saveto save the new credential and then Next.

                      6. On this step, you can select specific features you want to activate or deactivate on the cluster.

                      7. Once your new cluster is created, it will be listed in the cluster list. If you have finished configuring your cluster, click on the ... and Install menu to start the cluster installation.

                      8. Your cluster is now installing!

                      Remove your Digital Ocean account

                      this section is under development - join us and be part of the first to try it

                      Delete Qovery from your Digital Ocean account

                      To delete Qovery from your Digital Ocean account you must be the owner of the Organization. Once your Digital Ocean account removed from Qovery, everything configured (VPC, Kubernetes, ...) by Qovery will be deleted forever.

                      Regions

                      Qovery supports the following Digital Ocean regions:

                      namedescription
                      🇺🇸nyc-1New York DC1 (USA)
                      🇺🇸nyc-3New York DC3 (USA)
                      🇺🇸sfo-2San Francisco DC2 (USA)
                      🇺🇸sfo-3San Francisco DC3 (USA)
                      🇳🇱ams-3Amsterdam DC3 (Netherlands)
                      🇸🇬sgp-1Singapore DC1 (Asia)
                      🇬🇧lon-1London DC1 (UK)
                      🇩🇪fra-1Frankfurt DC1 (Germany)
                      🇨🇦tor-1Toronto DC1 (Canada)
                      🇮🇳blr-1Bangalore DC1 (India)

                      Qovery supports regions where Digital Ocean Kubernetes is supported.

                      How Qovery works on Digital Ocean

                      Qovery is an abstraction layer on top of Digital Ocean and Kubernetes. Qovery manages the configuration of Digital Ocean account, and helps you to deploy production ready apps in seconds. -To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Digital Ocean for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your Digital Ocean account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      Digital Ocean provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your Digital Ocean account.
                      • Your configuration is encrypted on your Digital Ocean account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by Digital Ocean

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      +To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Digital Ocean for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your Digital Ocean account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      Digital Ocean provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your Digital Ocean account.
                      • Your configuration is encrypted on your Digital Ocean account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by Digital Ocean

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      - + - + @@ -68,7 +68,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html index 2a7972f182..e845975213 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -
                      +
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index 2f2094dc2c..74863be8b4 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -
                      +
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html index a71df6f857..74c43c288e 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -
                      +
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html index 3b0c9fce72..94f39cbb82 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@ "Hello, I am going to deploy my applications on Scaleway with Qovery. Can you increase my quota for current Kubernetes nodes type, to 10 please? Thanks"

                      Create your Scaleway credentials - access key id, secret access key and project id.

                      1. Connect to your Scaleway console

                      2. Go to IAM

                      3. Go to Applications

                      4. Create a new application for your project

                      5. Generate your new API key from your application view

                        Set up the the preferred `Project` for `Object Storage` with your Scaleway Project
                      6. Save the generated access key id and secret access key.

                      7. Go to Policies

                      8. Create a new policy with Principal linked to the application you just created.

                      9. Set the scope of the policy to your project

                      10. Select the following rules for your policy

                        • Containers permissions
                        • Network Service permissions
                        • Compute permissions
                        • Storage permissions
                        • VPC permissions
                      11. Create your policy

                      12. Get you project id on your project dashboard

                      Well done!! You now have your Scaleway access key id, secret access key and project id; It is time to connect Qovery to your Scaleway account.

                      Install a new cluster on Qovery

                      You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow this documentation to create a new cluster on your organization.

                      Remove your Scaleway account

                      this section is under development - join us and be part of the first to try it

                      Delete Qovery from your Scaleway account

                      To delete Qovery from your Scaleway account you must be the owner of the Organization. Once your Scaleway account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever.

                      Regions

                      Qovery supports the following Scalewav regions:

                      namedescription
                      🇫🇷fr-par-1Paris DC1 (France)
                      🇫🇷fr-par-2Paris DC2 (France)
                      🇫🇷fr-par-3Paris DC3 (France)
                      🇳🇱nl-ams-1Amsterdam DC1 (Netherlands)
                      🇵🇱pl-waw-1Warsaw DC1 (Poland)

                      Qovery supports regions where Scaleway Kubernetes (Kapsule) is supported.

                      How Qovery works on Scaleway

                      Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds. -To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      Scaleway provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your Scaleway account.
                      • Your configuration is encrypted on your Scaleway account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by Scaleway

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      +To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).

                      Read more on how Qovery works behind the scene.

                      Kubernetes

                      The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

                      Managed services

                      Scaleway provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

                      Security and compliance

                      Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

                      • Your configuration are stored on your Scaleway account.
                      • Your configuration is encrypted on your Scaleway account.
                      • Qovery can't access to your data.
                      • Suppose Qovery stops to run, your applications are not impacted.

                      FAQ

                      How to choose a region?

                      Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

                      I don't find a region that is provided by Scaleway

                      We are probably testing the support of this region, please contact us to know what's the status

                      Migrate between Cloud providers and regions

                      Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

                      - + - + @@ -69,7 +69,7 @@ - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index 4d7207cb4e..dabdc6575c 100644 --- a/docs/using-qovery/configuration/cluster-advanced-settings/index.html +++ b/docs/using-qovery/configuration/cluster-advanced-settings/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Cluster Advanced Settings

                      To further fine-tune your Qovery infrastructure, you can set advanced settings through the Qovery API endpoint.

                      All clusters have access to advanced settings, you can find where they are available in the documentation below with those badges mentioning for which Cloud provider they are available:

                      You will also find badges mentioning for which components it will be applied:

                      Below is the list of advanced settings currently available for clusters.

                      Logs

                      aws.cloudwatch.eks_logs_retention_days

                      TypeDescriptionDefault Value
                      integerMaximum retention days in Cloudwatch for EKS logs.
                      (possible values: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 2192, 2557, 2922, 3288, 3653)
                      90

                      aws.vpc.enable_s3_flow_logs

                      TypeDescriptionDefault Value
                      booleanEnable flow logs on the cluster VPC and store them in an s3 bucket.false

                      aws.vpc.flow_logs_retention_days

                      TypeDescriptionDefault Value
                      integerSet the number of retention days for flow logs. Unlimited retention with value 0365

                      loki.log_retention_in_week

                      TypeDescriptionDefault Value
                      integerMaximum Kubernetes pods (containers/application/jobs/cronjob) retention logs in weeks.12 (84 days)

                      Image registry

                      registry.image_retention_time

                      TypeDescriptionDefault Value
                      integerAllows you to specify an amount in seconds after which images in the default registry are deleted.31536000 (1 year)

                      registry.mirroring_mode

                      TypeDescriptionDefault Value
                      stringAllows you to specify the image mirroring mode to be used for each image deployed on this cluster. (possible values: Service or Cluster)Service

                      cloud_provider.container_registry.tags

                      TypeDescriptionDefault Value
                      Map<String, String>Add additional tags on the cluster dedicated registry

                      Network

                      Load balancer

                      load_balancer.size

                      TypeDescriptionDefault Value
                      stringAllows you to specify the load balancer size in front of your cluster. Possible values are:
                      - lb-s: 200 Mbps
                      - lb-gp-m: 500 Mbps
                      - lb-gp-l: 1 Gbps
                      - lb-gp-xl: 4 Gbps
                      lb-s

                      Nginx

                      nginx.vcpu.request_in_milli_cpu

                      TypeDescriptionDefault Value
                      integerVcpu request value in millicores assigned to Nginx pods200

                      nginx.vcpu.limit_in_milli_cpu

                      TypeDescriptionDefault Value
                      integerVcpu limit value in millicores assigned to Nginx pods700

                      nginx.memory.request_in_mib

                      TypeDescriptionDefault Value
                      integerMemory limit value in MiB assigned to Nginx pods768

                      nginx.memory.limit_in_mib

                      TypeDescriptionDefault Value
                      integerMemory limit value in MiB assigned to Nginx pods768

                      nginx.hpa.cpu_utilization_percentage_threshold

                      TypeDescriptionDefault Value
                      integerHpa (horizontal pod autoscaler) cpu threshold in percentage assigned to Nginx deployment50

                      nginx.hpa.min_number_instances

                      TypeDescriptionDefault Value
                      integerMinimum number of Nginx instances running2

                      nginx.hpa.max_number_instances

                      TypeDescriptionDefault Value
                      integerMaximum number of Nginx instances running25

                      Database access

                      database.postgresql.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all PostgreSQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.postgresql.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.postgresql.deny_public_access is set to true["0.0.0.0/0"]

                      database.mysql.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all MySQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.mysql.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.mysql.deny_public_access is set to true["0.0.0.0/0"]

                      database.mongodb.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all MongoDB databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.mongodb.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.mongodb.deny_public_access is set to true["0.0.0.0/0"]

                      database.redis.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all Redis databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "anyone").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.redis.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.redis.deny_public_access is set to true["0.0.0.0/0"]

                      IAM

                      aws.iam.enable_admin_group_sync

                      TypeDescriptionDefault Value
                      booleanEnable IAM admin group sync IAM permissions setup.
                      ⚠️ aws.iam.admin_group should be set.
                      true

                      aws.iam.admin_group

                      TypeDescriptionDefault Value
                      stringAllows you to specify the IAM group name associated with the Qovery user in the AWS console during the IAM permissions setup to be able to connect to the Kubernetes clusterAdmins

                      aws.iam.enable_sso

                      TypeDescriptionDefault Value
                      booleanEnable SSO sync allowing IAM users to connect to cluster using SSO. Setup SSO support for your cluster.
                      ⚠️ aws.iam.sso_role_arn should be set.
                      false

                      aws.iam.sso_role_arn

                      TypeDescriptionDefault Value
                      stringAllows you to specify the SSO role ARN to be used to connect to your cluster. Setup SSO support for your cluster""

                      Miscellaneous

                      aws.eks.ec2.metadata_imds

                      TypeDescriptionDefault Value
                      stringSpecify the IMDS version you want to use. Possible values are required (IMDS v2 only) and optional (IMDS v1 and V2)optional
                      +

                      Cluster Advanced Settings

                      To further fine-tune your Qovery infrastructure, you can set advanced settings through the Qovery API endpoint.

                      All clusters have access to advanced settings, you can find where they are available in the documentation below with those badges mentioning for which Cloud provider they are available:

                      You will also find badges mentioning for which components it will be applied:

                      Below is the list of advanced settings currently available for clusters.

                      Logs

                      aws.cloudwatch.eks_logs_retention_days

                      TypeDescriptionDefault Value
                      integerMaximum retention days in Cloudwatch for EKS logs.
                      (possible values: 0, 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 2192, 2557, 2922, 3288, 3653)
                      90

                      aws.vpc.enable_s3_flow_logs

                      TypeDescriptionDefault Value
                      booleanEnable flow logs on the cluster VPC and store them in an s3 bucket.false

                      aws.vpc.flow_logs_retention_days

                      TypeDescriptionDefault Value
                      integerSet the number of retention days for flow logs. Unlimited retention with value 0365

                      loki.log_retention_in_week

                      TypeDescriptionDefault Value
                      integerMaximum Kubernetes pods (containers/application/jobs/cronjob) retention logs in weeks.12 (84 days)

                      Image registry

                      registry.image_retention_time

                      TypeDescriptionDefault Value
                      integerAllows you to specify an amount in seconds after which images in the default registry are deleted.31536000 (1 year)

                      registry.mirroring_mode

                      TypeDescriptionDefault Value
                      stringAllows you to specify the image mirroring mode to be used for each image deployed on this cluster. (possible values: Service or Cluster)Service

                      cloud_provider.container_registry.tags

                      TypeDescriptionDefault Value
                      Map<String, String>Add additional tags on the cluster dedicated registry

                      Network

                      Load balancer

                      load_balancer.size

                      TypeDescriptionDefault Value
                      stringAllows you to specify the load balancer size in front of your cluster. Possible values are:
                      - lb-s: 200 Mbps
                      - lb-gp-m: 500 Mbps
                      - lb-gp-l: 1 Gbps
                      - lb-gp-xl: 4 Gbps
                      lb-s

                      Nginx

                      nginx.vcpu.request_in_milli_cpu

                      TypeDescriptionDefault Value
                      integerVcpu request value in millicores assigned to Nginx pods200

                      nginx.vcpu.limit_in_milli_cpu

                      TypeDescriptionDefault Value
                      integerVcpu limit value in millicores assigned to Nginx pods700

                      nginx.memory.request_in_mib

                      TypeDescriptionDefault Value
                      integerMemory limit value in MiB assigned to Nginx pods768

                      nginx.memory.limit_in_mib

                      TypeDescriptionDefault Value
                      integerMemory limit value in MiB assigned to Nginx pods768

                      nginx.hpa.cpu_utilization_percentage_threshold

                      TypeDescriptionDefault Value
                      integerHpa (horizontal pod autoscaler) cpu threshold in percentage assigned to Nginx deployment50

                      nginx.hpa.min_number_instances

                      TypeDescriptionDefault Value
                      integerMinimum number of Nginx instances running2

                      nginx.hpa.max_number_instances

                      TypeDescriptionDefault Value
                      integerMaximum number of Nginx instances running25

                      Database access

                      database.postgresql.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all PostgreSQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.postgresql.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.postgresql.deny_public_access is set to true["0.0.0.0/0"]

                      database.mysql.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all MySQL databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.mysql.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.mysql.deny_public_access is set to true["0.0.0.0/0"]

                      database.mongodb.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all MongoDB databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "any IP").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.mongodb.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.mongodb.deny_public_access is set to true["0.0.0.0/0"]

                      database.redis.deny_public_access

                      TypeDescriptionDefault Value
                      booleanDeny public access to all Redis databases. When true, configure the CIDR range you want to allow within the associated allowed_cidrs parameter (default is "anyone").
                      ⚠️ Public access to managed databases will instantly be removed
                      ⚠️ Public access to container databases will be removed only after a database redeployment
                      false

                      database.redis.allowed_cidrs

                      TypeDescriptionDefault Value
                      booleanList of allowed CIDRS. Valid only when database.redis.deny_public_access is set to true["0.0.0.0/0"]

                      IAM

                      aws.iam.enable_admin_group_sync

                      TypeDescriptionDefault Value
                      booleanEnable IAM admin group sync IAM permissions setup.
                      ⚠️ aws.iam.admin_group should be set.
                      true

                      aws.iam.admin_group

                      TypeDescriptionDefault Value
                      stringAllows you to specify the IAM group name associated with the Qovery user in the AWS console during the IAM permissions setup to be able to connect to the Kubernetes clusterAdmins

                      aws.iam.enable_sso

                      TypeDescriptionDefault Value
                      booleanEnable SSO sync allowing IAM users to connect to cluster using SSO. Setup SSO support for your cluster.
                      ⚠️ aws.iam.sso_role_arn should be set.
                      false

                      aws.iam.sso_role_arn

                      TypeDescriptionDefault Value
                      stringAllows you to specify the SSO role ARN to be used to connect to your cluster. Setup SSO support for your cluster""

                      Miscellaneous

                      aws.eks.ec2.metadata_imds

                      TypeDescriptionDefault Value
                      stringSpecify the IMDS version you want to use. Possible values are required (IMDS v2 only) and optional (IMDS v1 and V2)optional
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/clusters/index.html b/docs/using-qovery/configuration/clusters/index.html index d2d855c448..46cb545cc2 100644 --- a/docs/using-qovery/configuration/clusters/index.html +++ b/docs/using-qovery/configuration/clusters/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -56,14 +56,14 @@ For more information, please contact your cloud provider. To permanently delete a cluster and all its associated costs, see Deleting a Cluster.

                      To temporarily stop a cluster, select the Stop action from the drop-down menu. A confirmation pop-up window opens before triggering the action.

                      Once confirmed, the status of your cluster turns to Pausing... (orange status).

                      Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to Paused (gray status).

                      Restarting a Cluster

                      You can restart a cluster after it has been temporarily stopped.

                      To restart your cluster, select the action Resume from the drop-down menu.

                      A confirmation pop-up window opens before triggering the action.

                      Once confirmed, the status of your cluster turns to Updating... (orange status).

                      Once your cluster has restarted, the status dot next to your cluster turns to green.

                      Deleting a Cluster

                      To delete a cluster, open the ... section and press Delete Cluster.

                      3 options can be chosen to delete a cluster:

                      1) Default -This is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account.

                      This operation will delete:

                      • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      2) Delete Cluster on cloud provider and Qovery configuration

                      This option shall be chosen when the cluster delete operation with the Default option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account.

                      This operation will delete:

                      • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      3) Delete Qovery config only

                      This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console.

                      This operation will delete:

                      • Cloud provider: nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      Once confirmed, the cluster status turns to Deleting... (red status) and once the deletion is complete, the cluster is removed from your organization settings.

                      Logs

                      Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it.

                      To access the logs you need to open the cluster, click the log button

                      Cluster Logs

                      A new window is opened, displaying the logs of the cluster.

                      Cluster Logs

                      The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error.

                      Cluster Logs

                      Generating an SSH Key for Your Cluster

                      To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:

                      1. On your computer, open a terminal.

                      2. Run ssh-keygen -t, followed by the key type and an optional comment.

                        For example, you can enter ssh-keygen -t rsa -b 2048 -C "<comment>".

                      3. Press Enter.

                        You should get an output similar to:

                        {
                        Generating public/private ed25519 key pair.
                        Enter file in which to save the key (/home/user/.ssh/id_ed25519):
                        }
                      4. Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.

                      5. Enter a passphrase:

                        {
                        Enter passphrase (empty for no passphrase):
                        Enter same passphrase again:
                        }

                        A confirmation is displayed, including information about where your files are stored.

                      6. Access the public key and copy its value
                        {
                        cat /home/user/.ssh/id_ed25519.pub | pbcopy
                        }

                        Note: Replace the .pub key path with the one where is located the key you have previously generated

                      You can add the generated public SSH key at cluster creation (see Creating a Cluster), or later from your cluster settings.

                      To do so:

                      Use custom domain and wildcard TLS for the whole cluster (beta)

                      By default, Qovery provides a domain (ex bool.sh) on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster.

                      You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit Let's Encrypt quotas.

                      To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate.

                      At the moment, Qovery only supports wildcard TLS certificates with Cloudflare. To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare.

                      Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then My Profile. In the API Tokens section, click on Create Token. In the Create Custom Token section, select the following permissions:

                      • API token a descriptive name: Qovery domain your domain name
                      • Permissions:
                        • Zone - DNS - Edit
                        • Zone - Zone - Read
                      • Zone Resources:
                        • Include - Specific zone - your domain name

                      To finish, click on Continue to Summary and Create Token. Save the token somewhere safe, you will need it later.

                      Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain.

                      Cleaning up a Cluster from your AWS Account

                      To clean up a Qovery cluster from your cloud provider account, go to AWS Console>Services>Management & Governance>Resource Groups & Tag Editor> Create Resource Group:

                      AWS Console Cluster Cleanup

                      StepDescription
                      1In the Group type area, select Tag based.
                      2In the Tags field of the Grouping criteria area, enter ClusterId.
                      3Click Add.
                      4Click Preview Resources.
                      All your Qovery clusters are now displayed in the Group resources table, and you can delete them by hand.
                      +This is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account.

                      This operation will delete:

                      • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      2) Delete Cluster on cloud provider and Qovery configuration

                      This option shall be chosen when the cluster delete operation with the Default option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account.

                      This operation will delete:

                      • Cloud provider: any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      3) Delete Qovery config only

                      This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console.

                      This operation will delete:

                      • Cloud provider: nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console.
                      • Qovery organization: the configuration of this cluster and any linked environment.

                      Once confirmed, the cluster status turns to Deleting... (red status) and once the deletion is complete, the cluster is removed from your organization settings.

                      Logs

                      Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it.

                      To access the logs you need to open the cluster, click the log button

                      Cluster Logs

                      A new window is opened, displaying the logs of the cluster.

                      Cluster Logs

                      The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error.

                      Cluster Logs

                      Generating an SSH Key for Your Cluster

                      To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:

                      1. On your computer, open a terminal.

                      2. Run ssh-keygen -t, followed by the key type and an optional comment.

                        For example, you can enter ssh-keygen -t rsa -b 2048 -C "<comment>".

                      3. Press Enter.

                        You should get an output similar to:

                        {
                        Generating public/private ed25519 key pair.
                        Enter file in which to save the key (/home/user/.ssh/id_ed25519):
                        }
                      4. Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.

                      5. Enter a passphrase:

                        {
                        Enter passphrase (empty for no passphrase):
                        Enter same passphrase again:
                        }

                        A confirmation is displayed, including information about where your files are stored.

                      6. Access the public key and copy its value
                        {
                        cat /home/user/.ssh/id_ed25519.pub | pbcopy
                        }

                        Note: Replace the .pub key path with the one where is located the key you have previously generated

                      You can add the generated public SSH key at cluster creation (see Creating a Cluster), or later from your cluster settings.

                      To do so:

                      Use custom domain and wildcard TLS for the whole cluster (beta)

                      By default, Qovery provides a domain (ex bool.sh) on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster.

                      You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit Let's Encrypt quotas.

                      To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate.

                      At the moment, Qovery only supports wildcard TLS certificates with Cloudflare. To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare.

                      Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then My Profile. In the API Tokens section, click on Create Token. In the Create Custom Token section, select the following permissions:

                      • API token a descriptive name: Qovery domain your domain name
                      • Permissions:
                        • Zone - DNS - Edit
                        • Zone - Zone - Read
                      • Zone Resources:
                        • Include - Specific zone - your domain name

                      To finish, click on Continue to Summary and Create Token. Save the token somewhere safe, you will need it later.

                      Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain.

                      Cleaning up a Cluster from your AWS Account

                      To clean up a Qovery cluster from your cloud provider account, go to AWS Console>Services>Management & Governance>Resource Groups & Tag Editor> Create Resource Group:

                      AWS Console Cluster Cleanup

                      StepDescription
                      1In the Group type area, select Tag based.
                      2In the Tags field of the Grouping criteria area, enter ClusterId.
                      3Click Add.
                      4Click Preview Resources.
                      All your Qovery clusters are now displayed in the Group resources table, and you can delete them by hand.
                      - + - + @@ -71,7 +71,7 @@ - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index a7ddcbd5d0..1f30c11ea1 100644 --- a/docs/using-qovery/configuration/cronjob/index.html +++ b/docs/using-qovery/configuration/cronjob/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@ Any additional environment variable can be added later from the environment variable section

                      Input Variables

                    • You will find a recap of your job setup and you can now decide to: 1. Go back to one of the previous steps and change your settings 2. Create your job without deploying it -3. Create and deploy your job

                      Recap

                    • Deployment Management

                      Have a look at the Deployment Management section for more information.

                      Force Run

                      You can force the execution of a job independently its deployment status by:

                      1. Select the job that you want to force

                      2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                      3. Once you click, the job will be deployed and executed once. You will be able to follow its execution within the application logs

                      Configuration

                      Once created, you can access the configuration at any time via the Settings tab available on the service section

                      Settings

                      You can find below the description of each of the tabs available in this section

                      General

                      General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                      Git Repository

                      If your job is built and deployed from a git repository, within this section you can:

                      • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                      • Modify the branch that Qovery should use for deploying your code
                      • Modify Root Application Path - base folder in which the application resides in your repository

                      Container Registry

                      If your application is deployed from an image registry, within this section you can modify:

                      • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                      • Image name: the name of the image to be deployed with this application (example: postgres)
                      • Image tag: the tag of the image to be deployed with this application (example: 12)

                      Build Mode

                      This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                      Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                      Valid NodeJS Dockerfile
                      FROM node:13-alpine
                      RUN mkdir -p /usr/src/app
                      WORKDIR /usr/src/app
                      COPY . .
                      RUN npm install
                      EXPOSE 3000
                      CMD node ./bin/www

                      After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                      Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                      Auto Deploy

                      See the Deploying with auto-deploy feature section.

                      JOB Configuration

                      You can modify here the configuration of your job:

                      • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                      • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                      • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                      • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                      • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                      • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                      Resources

                      CPU

                      To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                      RAM

                      To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                      Health Checks

                      To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                      Environment Variable

                      To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                      Secrets

                      To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                      Logs

                      To learn how to display your application logs, navigate to logs section

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete a job

                      1. Select the job you want to delete

                      2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                        Application

                      +3. Create and deploy your job

                      Recap

                      Deployment Management

                      Have a look at the Deployment Management section for more information.

                      Force Run

                      You can force the execution of a job independently its deployment status by:

                      1. Select the job that you want to force

                      2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                      3. Once you click, the job will be deployed and executed once. You will be able to follow its execution within the application logs

                      Configuration

                      Once created, you can access the configuration at any time via the Settings tab available on the service section

                      Settings

                      You can find below the description of each of the tabs available in this section

                      General

                      General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                      Git Repository

                      If your job is built and deployed from a git repository, within this section you can:

                      • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                      • Modify the branch that Qovery should use for deploying your code
                      • Modify Root Application Path - base folder in which the application resides in your repository

                      Container Registry

                      If your application is deployed from an image registry, within this section you can modify:

                      • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                      • Image name: the name of the image to be deployed with this application (example: postgres)
                      • Image tag: the tag of the image to be deployed with this application (example: 12)

                      Build Mode

                      This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                      Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                      Valid NodeJS Dockerfile
                      FROM node:13-alpine
                      RUN mkdir -p /usr/src/app
                      WORKDIR /usr/src/app
                      COPY . .
                      RUN npm install
                      EXPOSE 3000
                      CMD node ./bin/www

                      After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                      Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                      Auto Deploy

                      See the Deploying with auto-deploy feature section.

                      JOB Configuration

                      You can modify here the configuration of your job:

                      • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                      • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                      • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                      • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                      • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                      • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                      Resources

                      CPU

                      To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                      RAM

                      To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                      Health Checks

                      To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                      Environment Variable

                      To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                      Secrets

                      To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                      Logs

                      To learn how to display your application logs, navigate to logs section

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete a job

                      1. Select the job you want to delete

                      2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                        Application

                      - + - + @@ -69,7 +69,7 @@ - + diff --git a/docs/using-qovery/configuration/database/index.html b/docs/using-qovery/configuration/database/index.html index b3a887a40c..97590244d3 100644 --- a/docs/using-qovery/configuration/database/index.html +++ b/docs/using-qovery/configuration/database/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                      Databases

                      Qovery natively lets you deploy and access the most popular SQL and NoSQL databases available on the major cloud providers. Reliability and resiliency are at the heart of their services, so you don't have to worry about your data on Qovery.

                      Qovery natively supports the following databases:

                      • PostgreSQL
                      • MySQL
                      • MongoDB
                      • Redis

                      Qovery can natively operate a database in two different ways (called "Mode"):

                      • Container mode: preferred for testing and development
                      • Managed mode: preferred for production, limited configuration parameters (see the Configuration section).

                      If the natively supported databases or operation modes are not enough for you, depending on your use case you have the following alternative solutions:

                      • Use an existing DB on a dedicated VPC: your applications can access this database via VPC peering. Have a look at this guide for more information.
                      • Create your custom database via Qovery: You will be able to deploy any kind of database through Qovery by using a lifecycle jobs. For example, you can use a terraform script to deploy your custom RDS instance on AWS via Terraform (have a look at this example).

                      The following sections will show you how you can create and manage the databases natively supported by Qovery. For any other use case, please refer to the guides provided above.

                      Container mode

                      The database is created as a container with attached persistent storage directly on your Kubernetes cluster (1 instance). They are perfect for development and testing, as they are significantly cheaper than services provided by cloud providers.

                      Managed mode

                      Qovery creates and manages the lifecycle of a cloud provider managed database instance (for example an RDS instance on AWS). These are perfect for production since they guarantee the right level of resilience, performance and data security best practices.

                      Applying changes to a managed database

                      Once you request to change the version, instance type or disk size of your Managed database, the cloud provider applies the update based on its own internal rules and might cause downtime of your database.

                      For example, by default AWS doesn't apply major updates immediately on the database and instead, it waits for a maintenance window. This means that your change will not be applied immediately but you can always force the change directly from your AWS console AFTER having applied the change on Qovery (to avoid configuration drifts).

                      Have a look at your cloud provider documentation to know more about how version upgrades are managed:

                      Create a database

                      1. Navigate to Console

                      2. Select your project and environment

                      3. Click Add Database button

                        Database

                      4. Select database type, name, description (optional), version, mode and accessibility

                        General Information

                      5. Within the "Resources" step you will find different configurations based on the selected mode:

                        • If you are using the database in Container mode, you can set the CPU, RAM and storage that will be assigned to the instance running the docker image of the database.
                        • If you are using the database in Managed mode, you can select the instance type and the storage that will be assigned to the instance running the database. Note, the instance selected instance type has a direct impact on your cloud provider cost.

                        Resources

                      6. At the end a recap will allow you to just create the database or create and deploy it

                        Recap

                      Configuration

                      Once created, you can access the configuration of a database at any time via the Settings tab available on the database page

                      Database Settings

                      You can find below the description of each of the tabs available in this section

                      General

                      Modes

                      As described at the beginning of this document, databases can operate in two modes:

                      • Managed
                      • Container

                      Managed databases are perfect for production - they are provided and managed by major cloud providers like AWS to make sure your production data is well managed.

                      Container databases are managed by Qovery as Docker containers with attached persistent storage directly on your Kubernetes cluster (1 instance). They are perfect for development and testing, as they are significantly cheaper than services provided by cloud providers.

                      Please refer to the dedicated database sub-pages to get more information on the supported mode for each cloud provider.

                      Versions

                      We regularly update the version available for each database. Please refer to the dedicated database sub-pages to get more information on the supported version for each database types and cloud provider.

                      You can upgrade the version of your database directly from the Qovery interface.

                      Accessibility

                      This parameter lets you decide whether to expose publicly or not your database.

                      • Public access will make your database accessible via the public network
                      • Private access will make your database accessible only by applications in your environment

                      Resources

                      CPU / Memory

                      This configuration is available only for databases in Container mode

                      You can select the CPU assigned to the Kuerbetes pod running the database instance

                      Instance Type

                      This configuration is available only for databases in Managed mode

                      You can modify the CPU assigned to the instance running your database (And thus, its resources).

                      Storage

                      You can select the size of the persistent storage attached to the container database.

                      Credentials and connectivity

                      When a database is created in your environment, Qovery will automatically create and inject a set of BUILT_IN environment variables containing all the parameters necessary to your application to connect to the database.

                      This is the list of environment variables and secrets that will be automatically created:

                      NameDescriptionExample
                      QOVERY<DATABASE_TYPE><DBID>_DEFAULT_DATABASE_NAMEEnv Var containing the default database namepostgres
                      QOVERY<DATABASE_TYPE><DBID>_HOSTEnv Var containing the external hostname of the database (if you need access from the outside and the DB is configured with visibility "PUBLIC")zf5206c84-postgresql.oom.sh
                      QOVERY<DATABASE_TYPE><DBID>_HOST_INTERNALEnv Var containing the internal hostname of the database (if you need access it from within the cluster network)zf5206c84-postgresql
                      QOVERY<DATABASE_TYPE><DBID>_LOGINEnv Var containing the username of the DBsuperuser
                      QOVERY<DATABASE_TYPE><DBID>_PORTEnv Var containing the port to be used for connecting to the DB5432
                      QOVERY<DATABASE_TYPE><DBID>_HOSTSecret containing the external URI to be used for connecting to the DB (if you need access from the outside and the DB is configured with visibility "PUBLIC")sql://root:xxxx@z4a58c1e2-postgresql.oom.sh:27017/admin
                      QOVERY<DATABASE_TYPE><DBID>_HOST_INTERNALSecret containing the internal URI to be used for connecting to the DB (if you need access it from within the cluster network)sql://root:xxxx@z4a58c1e2-postgresql:27017/admin
                      QOVERY<DATABASE_TYPE><DBID>_PASSWORDSecret containing the password of the DBdbsecret

                      Please note that the built-in variables follow the naming pattern: QOVERY_DATABASETYPE + <your_db_name> + <type_of_variable> where:

                      • <your_db_name> is the name of your database
                      • <type_of_variable> is the type of variable we inject, e.g. PASSWORD, VERSION, CONNECTION_URI and so on.

                      To know how to access your database from your application, have a look at the database section.

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete your database instance

                      1. Navigate to Console

                      2. Select your environment and database

                      3. In database overview, click on Action remove button

                        Database Remove

                      Available Databases

                      Mongodb
                      Mysql
                      Postgresql
                      Redis
                      +It is up to the user or Cloud provider Administrator to delete it manually.

                      1. Navigate to Console

                      2. Select your environment and database

                      3. In database overview, click on Action remove button

                        Database Remove

                      Available Databases

                      Mongodb
                      Mysql
                      Postgresql
                      Redis
                      - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/configuration/database/mongodb/index.html b/docs/using-qovery/configuration/database/mongodb/index.html index e78000923d..a6221fdbe8 100644 --- a/docs/using-qovery/configuration/database/mongodb/index.html +++ b/docs/using-qovery/configuration/database/mongodb/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      MongoDB

                      MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL, MongoDB uses JSON-like documents with schema.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes
                      ScalewayYesNo

                      Credentials

                      Have a look at the Database page to know more about the database creation and setup.

                      +

                      MongoDB

                      MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL, MongoDB uses JSON-like documents with schema.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes
                      ScalewayYesNo

                      Credentials

                      Have a look at the Database page to know more about the database creation and setup.

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/database/mysql/index.html b/docs/using-qovery/configuration/database/mysql/index.html index 3120a880da..dfc0f0bfa6 100644 --- a/docs/using-qovery/configuration/database/mysql/index.html +++ b/docs/using-qovery/configuration/database/mysql/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      MySQL

                      MySQL is the world's most popular open source database. Whether you are a fast growing web property, technology ISV or large enterprise, MySQL can cost-effectively help you deliver high performance, scalable database applications.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes (RDS)
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      +

                      MySQL

                      MySQL is the world's most popular open source database. Whether you are a fast growing web property, technology ISV or large enterprise, MySQL can cost-effectively help you deliver high performance, scalable database applications.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes (RDS)
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/database/postgresql/index.html b/docs/using-qovery/configuration/database/postgresql/index.html index 3b9405f095..017abe3668 100644 --- a/docs/using-qovery/configuration/database/postgresql/index.html +++ b/docs/using-qovery/configuration/database/postgresql/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      PostgreSQL

                      PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes (RDS)
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      +

                      PostgreSQL

                      PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes (RDS)
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/database/redis/index.html b/docs/using-qovery/configuration/database/redis/index.html index 1196aedda5..4945bf720e 100644 --- a/docs/using-qovery/configuration/database/redis/index.html +++ b/docs/using-qovery/configuration/database/redis/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Redis

                      Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      +

                      Redis

                      Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.

                      Supported Versions and Cloud Providers

                      You can find the supported versions directly within the Qovery Console.

                      Availability of the Container version or Cloud Provider Managed versions depends on the chosen Cloud Provider

                      Cloud providerContainer supportedManaged supported
                      AWSYesYes
                      ScalewayYesNo

                      Have a look at the Database page to know more about the database creation and setup.

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/deployment-rule/index.html b/docs/using-qovery/configuration/deployment-rule/index.html index c8c03ad0ee..01d3d27c3b 100644 --- a/docs/using-qovery/configuration/deployment-rule/index.html +++ b/docs/using-qovery/configuration/deployment-rule/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -58,14 +58,14 @@ your development environments to a cheaper cloud account while still keeping your production using the most reliable services provided by the more expensive cloud provider.

                      Rule Levels

                      You can set up your Rules at Project and Environment levels. Rules set up at the Project level will be automatically applied to newly created Environments you target in the rule. If, however, the default settings applied by the Project level rule does not meet your needs, you are allowed to override the settings at the Environment level later on.

                      Project Deployment Rules

                      Declaring deployment rules at the project level allows you to apply reasonable defaults to all newly created environments. After a new environment within a project is created, rules from the Project are applied to the Environment. However, to keep things flexible, Qovery allows you to override the rules after environment creation at the Environment level, in Environment settings.

                      Project Rules Configuration

                      1. Navigate to Console

                      2. Select your project

                      3. In the environment list, select the tab Deployment Rule and click Add Rule button:

                        Deployment Rules Project

                      4. Matching rule definition

                        You will have to provide a rule name, description and a matching condition.

                        Matching Condition - Environment Name

                        This field allows you to specify which environments should be affected by the given deployment rule, based on their name.

                        You can either enter the full environment name or use Wildcards.

                        Wildcards

                        Wildcards allows you to build regular expression to match the name of the environments you want your deployment rule to target.

                        You can use the following characters to specify your rule.

                        wildcardbehaviorwill match
                        ?Any one character"A", "B", "c", "z", etc.
                        ??Any two characters"AA", "AZ", "zz", etc.
                        ???Any three characters"Jet", "AAA", "ccc", etc.
                        *Any characters"apple", "APPLE", "A100", etc.
                        *thEnds in "th""bath", "fourth", etc.
                        c*Starts with "c""Cat", "CAB", "cindy", "candy", etc.
                        ?*At least one character"a", "b", "ab", "ABCD", etc.
                        ???-??5 characters with hypen"ABC-99","100-ZT", etc.
                        xyzContains "xyz""code is XYZ", "100-XYZ", "XyZ90", etc.

                        For example, the rule Prod_Env_* will target the environment named:

                        • Prod_Env_1
                        • Prod_Env_feature

                        But will not target the environment named: Staging_Env_1

                        Setup to apply - General

                        Mode

                        Selecting Mode allows you to labelize the environment.

                        Cluster

                        Selecting the cluster allows you to control to which cluster your environments in the project will be deployed to.

                        Example use cases

                        • deploy your development environments on a more cost effective cluster
                        • deploy your environments in multiple regions

                        Setup to apply - Start & stop

                        Start & Stop

                        The start and stop section allow you to precisely set up when the environments inside the project should be deployed and cleaned up.

                        Use cases examples

                        • shut down your development environments during the weekend
                        • deploy additional environments during peak hours

                      Rules priority

                      Since you can define several rules, it is possible that an environment is targeted by more than one of them. In order to define which rule applies first to your new environments, you can reorder the list of rules in the deployment setting window. -Starting from the top, the rules are ranked from highest to lowest priority.

                      Reorder priority rules

                      Environment Deployment Rules

                      Setting up Deployment Rules at the Enviornment level allows you to make all necessary adjustments applied by your default rules from the Project level.

                      Have a look at [this section][docs.using-qovery.configuration.environment#deployment-rule]] to know more.

                      +Starting from the top, the rules are ranked from highest to lowest priority.

                      Reorder priority rules

                      Environment Deployment Rules

                      Setting up Deployment Rules at the Enviornment level allows you to make all necessary adjustments applied by your default rules from the Project level.

                      Have a look at [this section][docs.using-qovery.configuration.environment#deployment-rule]] to know more.

                      - + - + @@ -73,7 +73,7 @@ - + diff --git a/docs/using-qovery/configuration/environment-variable/index.html b/docs/using-qovery/configuration/environment-variable/index.html index b6a7868abb..f695c7f16c 100644 --- a/docs/using-qovery/configuration/environment-variable/index.html +++ b/docs/using-qovery/configuration/environment-variable/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -62,14 +62,14 @@ To understand how we handle conflicts, please take a look to the Importation conflicts section.

                      Configure variables import

                      On this modal, you can define for each variable the following parameters:

                      • name: upate variable name
                      • Value: update variable value
                      • Scope: Specify the scope in which you want to import the variable
                      • Secret: Specify if this value is considered as a secret or not

                      Preset variables

                      To help you import a large number of variables quickly, you can predefine scope and secret settings. This will change the scope and secret value of all listed variables. If the secret and scope of one or more specific variables are subsequently updated, this will not change the predefined setting.

                    • When you have finished the configuration, click on the Import button.

                    • A pop-up message is displayed to inform you that your environment variables have been imported.

                    • Importation conflicts

                      To avoid conflicts between already existing and imported environment variables, some of them will not be imported, even if the overwrite option is activated. -The different cases are described below.

                      Imported variable has same name as BUILT_IN variable

                      TypeNameValueScope
                      Existing variables
                      VALUEMY_VAR42Built_in
                      Variables to import
                      VALUEMY_VAR10Application

                      Built_in environment variables are generated and managed by Qovery and will not be overwritten, even if the overwriting option is activated.

                      Imported variable has same name as an existing ALIAS

                      TypeNameValueScope
                      Existing variables
                      VALUEMY_VAR42Environment
                      ALIASMY_VAR_ALIASMY_VARApplication
                      Variables to import
                      VALUEMY_VAR_ALIAS10Application

                      The value cannot be rewritten because the link between the original variable and the alias would be lost.

                      Imported variable has same name as an existing secret (or vice versa)

                      TypeNameValueScopeSecret
                      Existing variables
                      VALUEMY_VAR1ApplicationYe
                      Variables to import
                      VALUEMY_VAR2ApplicationNo

                      The value cannot be imported because this will overwrite the existing secret.

                      Overwriting and limitations

                      Some overwriting cases are not supported for now. They are summarized in the following table.

                      Existing variable scopeImported variable scopeSupported
                      PROJECTPROJECT / ENVIRONMENT / APPLICATIONYES
                      ENVIRONMENTPROJECTNO
                      ENVIRONMENTENVIRONMENT / APPLICATIONYES
                      APPLICATIONPROJECT / ENVIRONMENTNO
                      APPLICATIONAPPLICATIONYES

                      Service interconnection

                      Connecting to a database

                      To access a database managed by Qovery from your application, you can use the BUILT_IN environment variables and secrets that have been automatically created by Qovery during the database creation process. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application (see the credentials and connectivity section for the full list).

                      In order to match the naming convention of the database connection variables used within your code, you can create an alias for each variable in the Qovery console so that you don't need to change your code.

                      Once you have defined an alias for each variable, you can redeploy the application and check that it has finally access to the database.

                      Example

                      You have created a postgres database on the Qovery console. Within the code of your application you need some environment variables containing the connection parameters of the database: DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD, DATABASE_PORT, DATABASE_NAME

                      example.py
                      DB_NAME = os.getenv("DATABASE_NAME", "nemo")
                      DB_USER = os.getenv("DATABASE_USER", "nemo")
                      DB_PASSWORD = os.getenv("DATABASE_PASSWORD", "password")
                      DB_HOST = os.getenv("DATABASE_HOST", "localhost")
                      DB_PORT = os.getenv("DATABASE_PORT", "5432")

                      To match your internal naming convention, you can create aliases for each of the corresponding variables in this way:

                      Env Var Aliases

                      Connecting to another application

                      To access another application managed by Qovery, you can use the BUILT_IN environment variables that have been automatically created by Qovery during the creation of that particular application. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application.

                      Please note that two BUILT_IN might exist:

                      • QOVERY_APPLICATION_<APPID>_HOST_INTERNAL : it contains the INTERNAL host of the application that can be used inside your Kubernetes cluster (and thus by any application running on it)
                      • QOVERY_APPLICATION_<APPID>_HOST_EXTERNAL : it contains the EXTERNAL host of the application that can be used to reach your application from outside your Kubernetes cluster (if the application is publicly exposing one of its ports)

                      In order to match the naming convention of the connection variables used within your code, you can create an alias for the HOST_INTERNAL variable so that you don't need to change your code.

                      Once you have defined an alias for each variable, you can redeploy the application and check that it can reach the other application.

                      Example

                      You have created a backend application on the Qovery console and a BUILD_IN variable has been created containing the application HOST called QOVERY_APPLICATION_Z9D8DAA08_HOST_INTERNAL. Within the code of your front-end application you need some environment variables containing the host of the backend application (BACKEND_HOST)

                      To match your internal naming convention, you can create alias for the corresponding variable in this way:

                      Env Var Aliases

                      +The different cases are described below.

                      Imported variable has same name as BUILT_IN variable

                      TypeNameValueScope
                      Existing variables
                      VALUEMY_VAR42Built_in
                      Variables to import
                      VALUEMY_VAR10Application

                      Built_in environment variables are generated and managed by Qovery and will not be overwritten, even if the overwriting option is activated.

                      Imported variable has same name as an existing ALIAS

                      TypeNameValueScope
                      Existing variables
                      VALUEMY_VAR42Environment
                      ALIASMY_VAR_ALIASMY_VARApplication
                      Variables to import
                      VALUEMY_VAR_ALIAS10Application

                      The value cannot be rewritten because the link between the original variable and the alias would be lost.

                      Imported variable has same name as an existing secret (or vice versa)

                      TypeNameValueScopeSecret
                      Existing variables
                      VALUEMY_VAR1ApplicationYe
                      Variables to import
                      VALUEMY_VAR2ApplicationNo

                      The value cannot be imported because this will overwrite the existing secret.

                      Overwriting and limitations

                      Some overwriting cases are not supported for now. They are summarized in the following table.

                      Existing variable scopeImported variable scopeSupported
                      PROJECTPROJECT / ENVIRONMENT / APPLICATIONYES
                      ENVIRONMENTPROJECTNO
                      ENVIRONMENTENVIRONMENT / APPLICATIONYES
                      APPLICATIONPROJECT / ENVIRONMENTNO
                      APPLICATIONAPPLICATIONYES

                      Service interconnection

                      Connecting to a database

                      To access a database managed by Qovery from your application, you can use the BUILT_IN environment variables and secrets that have been automatically created by Qovery during the database creation process. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application (see the credentials and connectivity section for the full list).

                      In order to match the naming convention of the database connection variables used within your code, you can create an alias for each variable in the Qovery console so that you don't need to change your code.

                      Once you have defined an alias for each variable, you can redeploy the application and check that it has finally access to the database.

                      Example

                      You have created a postgres database on the Qovery console. Within the code of your application you need some environment variables containing the connection parameters of the database: DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD, DATABASE_PORT, DATABASE_NAME

                      example.py
                      DB_NAME = os.getenv("DATABASE_NAME", "nemo")
                      DB_USER = os.getenv("DATABASE_USER", "nemo")
                      DB_PASSWORD = os.getenv("DATABASE_PASSWORD", "password")
                      DB_HOST = os.getenv("DATABASE_HOST", "localhost")
                      DB_PORT = os.getenv("DATABASE_PORT", "5432")

                      To match your internal naming convention, you can create aliases for each of the corresponding variables in this way:

                      Env Var Aliases

                      Connecting to another application

                      To access another application managed by Qovery, you can use the BUILT_IN environment variables that have been automatically created by Qovery during the creation of that particular application. You can find all the BUILT_IN variables on the Qovery console within the Environment Variable section of your application.

                      Please note that two BUILT_IN might exist:

                      • QOVERY_APPLICATION_<APPID>_HOST_INTERNAL : it contains the INTERNAL host of the application that can be used inside your Kubernetes cluster (and thus by any application running on it)
                      • QOVERY_APPLICATION_<APPID>_HOST_EXTERNAL : it contains the EXTERNAL host of the application that can be used to reach your application from outside your Kubernetes cluster (if the application is publicly exposing one of its ports)

                      In order to match the naming convention of the connection variables used within your code, you can create an alias for the HOST_INTERNAL variable so that you don't need to change your code.

                      Once you have defined an alias for each variable, you can redeploy the application and check that it can reach the other application.

                      Example

                      You have created a backend application on the Qovery console and a BUILD_IN variable has been created containing the application HOST called QOVERY_APPLICATION_Z9D8DAA08_HOST_INTERNAL. Within the code of your front-end application you need some environment variables containing the host of the backend application (BACKEND_HOST)

                      To match your internal naming convention, you can create alias for the corresponding variable in this way:

                      Env Var Aliases

                      - + - + @@ -77,7 +77,7 @@ - + diff --git a/docs/using-qovery/configuration/environment/index.html b/docs/using-qovery/configuration/environment/index.html index d48ef6bebd..8829c09009 100644 --- a/docs/using-qovery/configuration/environment/index.html +++ b/docs/using-qovery/configuration/environment/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                      Environment

                      An Environment is a group of applications and databases running within the same namespace. A Project can have multiple Environments.

                      Types of environment

                      There are different types of environments that can be defined within Qovery. Types of environment are also called mode, to label it and share with others in the organization how to use it. Here is the mode you should set depending of the use of your Environment.

                      environment moderecommended modewhy
                      ProductionProduction environment should not be stopped or deleted by anyone.
                      StagingStaging environment reflects how things work and is sometimes as critical as production for companies.
                      DevelopmentDevelopment environment is a working environment that could be used to develop and test new features and fixes.

                      A special mode Preview exists and it is automatically set when a Preview Environment is created on a new pull request. Have a look at this section to know more about preview environments.

                      Create an environment

                      You can create a new environment by clicking on the Create environment button of the Environment list page.

                      Create an environment

                      A modal will appear that will allow you to specify following parameters

                      • name: Give a name to your environment that is easily recognizable by anyone from your team. It is good practice to name your environment production, main or master, staging, dev, fix/xxx, feat/xxx, depending on the purpose of your environment.
                      • mode: Specify environment mode. See Types of environment section. If automatic is chosen, the mode will be automatically selected based on the configured deployment rules. See the Project Deployment Rules section
                      • cluster : Specify the organization cluster on which this new environment will be deployed. If automatic is chosen, the cluster will be automatically selected based on the configured deployment rules. See the Project Deployment Rules section

                      Create an environment - Modal

                      Once created you can start adding your services within it depending on your need:

                      Create Service

                      Editing the environment settings

                      You can access the environment settings by opening the SETTINGS tab.

                      Environment settings tab

                      General settings

                      On the General tab, you will be able to update your environment name. It will also display the environment mode and the cluster assigned to your environment.

                      Deployment Rule

                      Using Deployment Rules is a good practice to drastically reduce your cost. To know more of the benefit of using them, have a look at the Deployment Rules section.

                      A default deployment configuration is applied to your environment when it's created but you can modify this default behaviour by creating a dedicated rule at project level that will affect any new environment created and matching the condition.

                      Once created, you can edit the deployment rule of the environment from the deployment rules settings.

                      Below you can find the description of the deployment rule settings that can be modified for a specific environment

                      Start & Stop

                      The start and stop section allow you to override the default settings applied by the project rule to precisely set up when the environment should be deployed and cleaned up.

                      Deployment Pipeline

                      This section allows you to configure the deployment pipeline to be executed when a deployment on the environment is triggered. More in particular, you can define the deployment order of each service within your environment.

                      Deployment Pipeline

                      You can get more information about the Qovery deployment pipeline and how it works within this section.

                      Editing deployment order

                      You can edit the order simply by drag and drop the service from one stage to another.

                      You can also modify the order of an entire stage by opening the 3 dots menu of the stage and clicking on Edit order

                      Adding a new stage

                      You can add a new stage by pressing the Add stage button. A name and a description are required to create the new stage.

                      Editing deployment stage

                      You can modify the name and the description of a stage by opening the 3 dots menu of the stage and clicking on Edit order

                      Preview environment

                      Use Preview Environment to get early feedback on your application changes by creating a dedicated environment for each of your pull requests. Your production environment runs 24/7, where your other environments may not need to run all day long. E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                      Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                      The preview environment section allows you to manage the complete setup of your preview environment feature

                      Preview Environment Settings

                      Turn on Preview Environments

                      it allows you to enable the preview environment feature for the current environment. Any PR opened on a service belonging to this environment will trigger the preview environment flow.

                      Create on demand

                      You can define the behaviour to follow for the creation of the preview environments:

                      • On Demand (Flag enabled)
                      • On every PR (Flag disabled)

                      On Demand Flow

                      1. A message is dropped on the PR asking you if you want to create a preview environment or not. You will get the list of environments where the preview env feature is activated (in case you have multiple environments) and the command to add as a comment of your PR to trigger the preview.
                      2. you will decide weather to create a preview environment or not by typing the right command as a comment within the PR
                      3. once the command is added in the comments, the preview creation is triggered and your preview environment is created and its deployment starts
                      4. once the deployment is completed, an additional comment will be posted in the PR, providing you with URLs to access your services.

                      Preview Environment Settings

                      On every PR Flow -Same as above but the preview environment creation flow is triggered automatically without any user intervention (only step 3 and 4)

                      Preview Environment Github Bot Message

                      Auto-delete

                      Auto-delete feature allows you to control if your applications should be, by default, automatically deleted after branch merging or deletion.

                      Service List

                      By default the preview environment feature is activated on any services of the environment connected to a git repository. In this sectoin you can decide to activate/desactivate the feature for a specific service.

                      Clone environment

                      Cloning an existing environnment is convenient for those use cases:

                      • Make a demo without impacting the original environment.
                      • Validate a feature on a dedicated environment.

                      Cloning an environment is possible directly from the 3 dots menu of your environment.

                      Environment Clone

                      When cloning an environment, every configuration of the original environment will be copied except for:

                      Terraform exporter

                      You can export the configuration of your environment as a Terraform manifest via the Export as Terraform option. This is helpful when you want to manage your configuration via Terraform: instead of creating the terraform manifest by hand, you can build the setup via the Qovery interface and export is as a Terraform file

                      The export will contain the Terraform definition of the environment, the services within it but as well all the other resources linked to the environment (organization, cluster, project).

                      You can decide wether or not the export should contain or not the secrets defined within the Qovery console.

                      Here's a video explaining how it works:

                      Deploy an environment

                      Have a look at the Deployment Management section for more information on how to deploy your environment.

                      Delete an environment

                      To delete your environment, you must go in the settings > Danger zone and delete your Environment.

                      +Same as above but the preview environment creation flow is triggered automatically without any user intervention (only step 3 and 4)

                      Preview Environment Github Bot Message

                      Auto-delete

                      Auto-delete feature allows you to control if your applications should be, by default, automatically deleted after branch merging or deletion.

                      Service List

                      By default the preview environment feature is activated on any services of the environment connected to a git repository. In this sectoin you can decide to activate/desactivate the feature for a specific service.

                      Clone environment

                      Cloning an existing environnment is convenient for those use cases:

                      • Make a demo without impacting the original environment.
                      • Validate a feature on a dedicated environment.

                      Cloning an environment is possible directly from the 3 dots menu of your environment.

                      Environment Clone

                      When cloning an environment, every configuration of the original environment will be copied except for:

                      Terraform exporter

                      You can export the configuration of your environment as a Terraform manifest via the Export as Terraform option. This is helpful when you want to manage your configuration via Terraform: instead of creating the terraform manifest by hand, you can build the setup via the Qovery interface and export is as a Terraform file

                      The export will contain the Terraform definition of the environment, the services within it but as well all the other resources linked to the environment (organization, cluster, project).

                      You can decide wether or not the export should contain or not the secrets defined within the Qovery console.

                      Here's a video explaining how it works:

                      Deploy an environment

                      Have a look at the Deployment Management section for more information on how to deploy your environment.

                      Delete an environment

                      To delete your environment, you must go in the settings > Danger zone and delete your Environment.

                      - + - + @@ -67,7 +67,7 @@ - + diff --git a/docs/using-qovery/configuration/index.html b/docs/using-qovery/configuration/index.html index ce8a71226a..30026dc495 100644 --- a/docs/using-qovery/configuration/index.html +++ b/docs/using-qovery/configuration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -
                      +
                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/lifecycle-job/index.html b/docs/using-qovery/configuration/lifecycle-job/index.html index e14f75297a..ae523e79e8 100644 --- a/docs/using-qovery/configuration/lifecycle-job/index.html +++ b/docs/using-qovery/configuration/lifecycle-job/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -56,14 +56,14 @@ 2. Create your job without deploying it 3. Create and deploy your job

                      Recap

                      Deployment Management

                      Have a look at the Deployment Management section for more information.

                      Force Run

                      You can force the execution of a job independently its deployment status by:

                      1. Select the job that you want to force

                      2. click on the Play button of the cronjob you want to force and select the Force Run option. Note: the same option is available on the service list as well

                      3. Select the environment event you want to force.

                      4. Once you click, the job will be deployed and executed with the entrypoint and arguments associated to the selected event. You will be able to follow its execution within the application logs

                      Configuration

                      Once created, you can access the configuration at any time via the Settings tab available on the service section

                      Settings

                      You can find below the description of each of the tabs available in this section

                      General

                      General settings section allows you to set up your application name and the source code location (git repository or image registry) .

                      Git Repository

                      If your job is built and deployed from a git repository, within this section you can:

                      • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
                      • Modify the branch that Qovery should use for deploying your code
                      • Modify Root Application Path - base folder in which the application resides in your repository

                      Container Registry

                      If your application is deployed from an image registry, within this section you can modify:

                      • Registry: select the container registry storing the image of your application. Note: only pre-configured registry are available in this list, check the Container Registry Management page for more information.
                      • Image name: the name of the image to be deployed with this application (example: postgres)
                      • Image tag: the tag of the image to be deployed with this application (example: 12)

                      Build Mode

                      This option is available only if you have selected "Git Repository" as source. Only Docker is supported

                      Qovery runs your application within the Container technology. To build and run your application, you need to provide a valid Dockerfile.

                      Valid NodeJS Dockerfile
                      FROM node:13-alpine
                      RUN mkdir -p /usr/src/app
                      WORKDIR /usr/src/app
                      COPY . .
                      RUN npm install
                      EXPOSE 3000
                      CMD node ./bin/www

                      After creating a Dockerfile, specify the location of your Dockerfile in Dockefile path field.

                      Configuration from above will make Qovery look for the Dockerfile in /timescale/Dockerfile path of your repository (Root Application Path + Dockerfile Path).

                      Auto Deploy

                      See the Deploying with auto-deploy feature section.

                      JOB Configuration

                      You can modify here the configuration of your job:

                      • CRON Schedule: specify a valid CRON expression (see Crontab guru for help). After being deployed, the job will be executed following the defined schedule.
                      • Image Entrypoint: the entrypoint to be used to launch your job (not mandatory)
                      • CMD Arguments: the arguments to be passed to launch your job (not mandatory). We expect the format to be an array. Example ["rails", "-h", "0.0.0.0", "-p", "8080", "string"]
                      • Number of restarts: Maximum number of restarts allowed in case of job failure (0 means no failure)
                      • Max duration time in seconds: Maximum duration allowed for the job to run before killing it and mark it as failed
                      • Port: Port used by Kubernetes to run readiness and liveliness probes checks. The port will not be exposed externally

                      Resources

                      CPU

                      To configure the number of CPUs that your job needs, adjust the setting in the Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU.

                      RAM

                      To configure the amount of RAM that your app needs, adjust the setting in Resources section.

                      Please note that in this section you configure the CPU allocated by the cluster for your application and that cannot consume more than this value. Even if the application is underused and consume less resources, the cluster will still reserve the selected amount of CPU. If your application requires more RAM than requested, it will be killed by the kubernetes scheduler.

                      Health Checks

                      To know more about how to configure your Liveness and Readiness probes, have a look at the health-checks section

                      Environment Variable

                      To learn how to set up environment variables in your projects and applications, navigate to configuring Environment Variables section.

                      Secrets

                      To learn how to set up secrets in your projects and applications, navigate to configuring Secrets section.

                      Logs

                      To learn how to display your application logs, navigate to logs section

                      Job output

                      Qovery expects the output file to be written in the following path /qovery-output/qovery-output.json (the output folder is automatically mounted by Qovery). The file should follow this format:

                      {
                      "varname1": {
                      "sensitive": true,
                      "value": "myvalue"
                      },
                      "varname2": {
                      "sensitive": false,
                      "value": "myvalue"
                      }
                      }
                      ...

                      At the end of the job execution, this file will be processed by Qovery and a set of environment variables will be created, one for each element in the json. The information in the json file will be mapped to an environment variables in this way:

                      • Variable Name: QOVERY_OUTPUT_JOB_<JOBID>_<VARNAME> , where <JOBID> is the id of the Job on Qovery side and <VARNAME> is the name of the element in the output file.
                      • Variable Value: field "value"
                      • Secret: field "sensitive"

                      An alias <VARNAME> will be automatically created to simplify your setup.

                      Example -Let's say that the code of our job creates a PostgreSQL RDS on AWS. At the end of its execution, the job should know the connection Once created, the job should know the connection string of the PostgreSQL. The job can now create a file /qovery-output/qovery-output.json with the following structure:

                      {
                      "POSTGRES_DB_HOST": {
                      "sensitive": False,
                      "value": "zf138d9c8-postgresql"
                      },
                      "POSTGRES_DB_USER": {
                      "sensitive": False,
                      "value": "root"
                      },
                      "POSTGRES_DB_PASS": {
                      "sensitive": True,
                      "value": "mypassword"
                      },
                      "POSTGRES_DB_TABLE": {
                      "sensitive": False,
                      "value": "MYDB"
                      },
                      "POSTGRES_DB_PORT": {
                      "sensitive": False,
                      "value": "3600"
                      }
                      }

                      This file will be processed by Qovery and the following environment variables will be created:

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_HOST

                      • Value: "zf138d9c8-postgresql"
                      • Secret: false
                      • Alias: POSTGRES_DB_HOST

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_USER

                      • Value: "root"
                      • Secret: false
                      • Alias: POSTGRES_DB_USER

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_PASS

                      • Value: "mypassword"
                      • Secret: true
                      • Alias: POSTGRES_DB_PASS

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_TABLE

                      • Value: "MYDB"
                      • Secret: false
                      • Alias: POSTGRES_DB_TABLE

                      Var QOVERY_OUTPUT_JOB_<JOBID>_DB_PORT

                      • Value: "3600"
                      • Secret: false
                      • Alias: POSTGRES_DB_PORT

                      Once the execution of the job is terminated and the environment variables are created, any application within the same environment will be able to access those environment variables and thus connect to the postgres instance.

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete a job

                      1. Select the job you want to delete

                      2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                        Application

                      +Let's say that the code of our job creates a PostgreSQL RDS on AWS. At the end of its execution, the job should know the connection Once created, the job should know the connection string of the PostgreSQL. The job can now create a file /qovery-output/qovery-output.json with the following structure:

                      {
                      "POSTGRES_DB_HOST": {
                      "sensitive": False,
                      "value": "zf138d9c8-postgresql"
                      },
                      "POSTGRES_DB_USER": {
                      "sensitive": False,
                      "value": "root"
                      },
                      "POSTGRES_DB_PASS": {
                      "sensitive": True,
                      "value": "mypassword"
                      },
                      "POSTGRES_DB_TABLE": {
                      "sensitive": False,
                      "value": "MYDB"
                      },
                      "POSTGRES_DB_PORT": {
                      "sensitive": False,
                      "value": "3600"
                      }
                      }

                      This file will be processed by Qovery and the following environment variables will be created:

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_HOST

                      • Value: "zf138d9c8-postgresql"
                      • Secret: false
                      • Alias: POSTGRES_DB_HOST

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_USER

                      • Value: "root"
                      • Secret: false
                      • Alias: POSTGRES_DB_USER

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_PASS

                      • Value: "mypassword"
                      • Secret: true
                      • Alias: POSTGRES_DB_PASS

                      Var QOVERY_OUTPUT_JOB_<JOBID>_POSTGRES_DB_TABLE

                      • Value: "MYDB"
                      • Secret: false
                      • Alias: POSTGRES_DB_TABLE

                      Var QOVERY_OUTPUT_JOB_<JOBID>_DB_PORT

                      • Value: "3600"
                      • Secret: false
                      • Alias: POSTGRES_DB_PORT

                      Once the execution of the job is terminated and the environment variables are created, any application within the same environment will be able to access those environment variables and thus connect to the postgres instance.

                      Clone

                      You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

                      Clone Service

                      The target environment can be the same as the current environment or even another one in a completely different project.

                      Important information

                      Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

                      • same environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                      • another environment:
                        • custom domain: this setup is not copied into the new service (to avoid collision)
                        • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
                        • deployment pipeline: stage setup is not copied (since the target stage might not exist)
                        • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

                      Please check the configuration of the new service before deploying it.

                      Delete a job

                      1. Select the job you want to delete

                      2. In the overview, click on the 3 dots button and remove the job. Note: the same option is available on the service list as well

                        Application

                      - + - + @@ -71,7 +71,7 @@ - + diff --git a/docs/using-qovery/configuration/object-storage/index.html b/docs/using-qovery/configuration/object-storage/index.html index 1ac6602cb2..9a09e441cb 100644 --- a/docs/using-qovery/configuration/object-storage/index.html +++ b/docs/using-qovery/configuration/object-storage/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -61,14 +61,14 @@
                      // Change bucket property to your Space name
                      const upload = multer({
                      storage: multerS3({
                      s3: s3,
                      bucket: 'your-space-here',
                      acl: 'public-read',
                      key: function (request, file, cb) {
                      console.log(file);
                      cb(null, file.originalname);
                      }
                      })
                      }).array('upload', 1);

                      If your bucket is private, all you need to do is to set up those environment variables for your application:

                      • AWS_ACCESS_KEY_ID
                      • AWS_SECRET_ACCESS_KEY

                      You can find your secrets in your Space configuration. You can set up secrets in your application by following our guide.

                      Scaleway

                      1. Navigate to Scaleway Console

                      2. Click Create, and Spaces button

                        Storage

                      3. Set up your bucket settings, like name, permissions, cloud region

                      4. Connect your application to your bucket (Scaleway Buckets are partly AWS S3 compatible, this is why we use S3 client in the example):

                        // Load dependencies
                        const aws = require('aws-sdk');
                        const express = require('express');
                        const multer = require('multer');
                        const multerS3 = require('multer-s3');
                        const app = express();
                        // Set S3 endpoint to Scaleway Bucket in correct region
                        const endpoint = new aws.Endpoint('https://s3.fr-par.scw.cloud.');
                        const s3 = new aws.S3({
                        endpoint: endpoint
                        });
                        -
                        // Change bucket property to your Bucket name
                        const upload = multer({
                        storage: multerS3({
                        s3: s3,
                        bucket: 'your-bucket-here',
                        acl: 'public-read',
                        key: function (request, file, cb) {
                        console.log(file);
                        cb(null, file.originalname);
                        }
                        })
                        }).array('upload', 1);

                        If your bucket is private, all you need to do is to set up those environment variables for your application:

                        • AWS_ACCESS_KEY_ID
                        • AWS_SECRET_ACCESS_KEY

                        Follow Scaleway guide to get your credentials. You can set up secrets in your application by following our guide.

                      +
                      // Change bucket property to your Bucket name
                      const upload = multer({
                      storage: multerS3({
                      s3: s3,
                      bucket: 'your-bucket-here',
                      acl: 'public-read',
                      key: function (request, file, cb) {
                      console.log(file);
                      cb(null, file.originalname);
                      }
                      })
                      }).array('upload', 1);

                      If your bucket is private, all you need to do is to set up those environment variables for your application:

                      • AWS_ACCESS_KEY_ID
                      • AWS_SECRET_ACCESS_KEY

                      Follow Scaleway guide to get your credentials. You can set up secrets in your application by following our guide.

                      - + - + @@ -76,7 +76,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/api-token/index.html b/docs/using-qovery/configuration/organization/api-token/index.html index 5a4454ebec..846fd2bbe6 100644 --- a/docs/using-qovery/configuration/organization/api-token/index.html +++ b/docs/using-qovery/configuration/organization/api-token/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      API Token

                      API token allows third-party applications or script to access your organization via the Qovery API (CI/CD, Terraform script, Pulumi etc..).

                      You can manage the API tokens attached to your organization directly from the Qovery console.

                      You can access the token API configuration by opening the Token API section within the organization settings.

                      How to access your organization settings

                      How to access your Token API section

                      Create a new token

                      You can create a new token API by pressing the Add button. You need to provide:

                      • A name
                      • A description
                      • A role: this allows to manage the permission assigned to the new API Token. The permission is managed via the Qovery RBAC system

                      Once validated the token value will be displayed on the interface.

                      Delete a token

                      You can create a new token API by pressing the Bin button next to the Token you want to delete.

                      Edit a token

                      This functionality is not yet available

                      +

                      API Token

                      API token allows third-party applications or script to access your organization via the Qovery API (CI/CD, Terraform script, Pulumi etc..).

                      You can manage the API tokens attached to your organization directly from the Qovery console.

                      You can access the token API configuration by opening the Token API section within the organization settings.

                      How to access your organization settings

                      How to access your Token API section

                      Create a new token

                      You can create a new token API by pressing the Add button. You need to provide:

                      • A name
                      • A description
                      • A role: this allows to manage the permission assigned to the new API Token. The permission is managed via the Qovery RBAC system

                      Once validated the token value will be displayed on the interface.

                      Delete a token

                      You can create a new token API by pressing the Bin button next to the Token you want to delete.

                      Edit a token

                      This functionality is not yet available

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/container-registry/index.html b/docs/using-qovery/configuration/organization/container-registry/index.html index afaa3a4250..e5d6cb91ac 100644 --- a/docs/using-qovery/configuration/organization/container-registry/index.html +++ b/docs/using-qovery/configuration/organization/container-registry/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                      Container Registry

                      This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.

                      You can access this section by opening the Organization Settings -> Container Registries

                      How to access your organization settings

                      Application

                      Create a Container Registry

                      Application

                      By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:

                      • Registry Name
                      • Description
                      • Registry Url: the base url of the registry (example: https://docker.io, https://public.ecr.aws etc..)
                      • Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.
                      • Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part.

                      Important information:

                      • If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. See here for more details
                      • If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.

                      Now that you have created the registry, you can start using it in order to create and deploy a service using the images stored within it.

                      Modify or Delete an existing registry

                      You can modify an existing container registry by clicking on the "Wheel" button next to it -You can delete an existing container registry by clicking on the "Trash" button next to it

                      Application

                      +You can delete an existing container registry by clicking on the "Trash" button next to it

                      Application

                      - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/git-repository-access/index.html b/docs/using-qovery/configuration/organization/git-repository-access/index.html index 65a569476e..210084c0e1 100644 --- a/docs/using-qovery/configuration/organization/git-repository-access/index.html +++ b/docs/using-qovery/configuration/organization/git-repository-access/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -55,14 +55,14 @@ 2. Modify the existing token on the Qovery console by updating its value with the token created in step 1.

                      Managing the tokens on Qovery

                      Tokens are centrally managed within your organization settings under the Git repository access section:

                      1. Open your Qovery Console and access your organization settings:

                      How to access your organization settings

                      1. In the Organization settings menu, click Git Repositories Access:

                      Git Repositories Access

                      Create the token

                      1. Press the Add new Token button
                      2. Fill the form with:
                      • your git provider
                      • Token name: this is the display name used in every Qovery interface.
                      • Description (optional)
                      • Token Value: the token value as returned by your git provider.
                      • Workspace: Only for bitbucket, provide the workspace where the token has been created.
                      1. Press the Create button.

                      Using the token

                      Once the token is created, you can configure your Qovery services.

                      In the creation flow of your service, you will be able to either select your own git account or one of the git tokens configured within your organization.

                      Git Source Selection

                      If a git token is selected, Qovery will use that token to access the git repository as long as the token does not expire (see the Token expiration section)

                      Update the token

                      1. Press the wheel button on the token you want to modify.
                      2. Modify the token.
                      3. Press the Save button.

                      Note: If you want to modify the git token configured in Qovery, you can directly edit the token value. It will prevent you from manually updating every application using the old token.

                      Delete the token

                      1. Press the bin button next to the token you want to delete
                      2. Confirm the operation by writing delete

                      Deprecated - Qovery Github App

                      For better control, as a GitHub user, you can install the Qovery Github App, and define which Github repositories Qovery can access.

                      Installing the Qovery Github App

                      To install the Qovery Github App:

                      1. Open your Qovery Console and access your organization settings:

                        How to access your organization settings

                      2. In the Organization settings menu, click Git Repository Access:

                        Git Repository Access

                      3. To start the installation process click Install:

                        A new window opens in your browser so you can install the Qovery Github App on your Github account.

                      4. Click the Github account on which you want to install the Qovery Github App:

                        Application

                      5. Click Only select repositories and, in the dropdown menu, define which Github repositories you want to give Qovery access to:

                        Application

                      6. To confirm, click Install & Authorize:

                        Application

                        You are redirected to your Qovery Console, where the list of authorized Github repositories is updated.

                      Managing the Github permissions

                      To add or remove access to one of your repositories:

                      1. Open your Qovery Console and access your organization settings:

                        Qovery - delete organization

                      2. In the Organization settings menu, click Git Permission:

                        Application

                      3. Next to your Git provider account, click Manage permission:

                        Application

                      4. Click the Github account on which you want to manage the Qovery Github App access:

                        Application

                      5. Add or remove the repositories you want to give Qovery access to:

                        Application

                      Uninstalling the Qovery Github App

                      To uninstall the Qovery Github App:

                      1. Open your Qovery Console and access your organization settings:

                        Qovery - delete organization

                      2. In the Organization settings menu, click Git Permission:

                        Application

                      3. Next to your Git provider account, click Disconnect:

                        Application

                        The list of authorized Github repositories is updated, meaning Qovery now has access to all of your Github repositories again.

                      4. From your browser, access your Github account and open your Settings:

                        Application

                      5. In the navigation menu, click Applications:

                        Application

                      6. At the bottom of the page, click Uninstall:

                        Application

                        A confirmation pop-up window opens.

                      7. Click OK:

                        The Qovery Github App is uninstalled.

                      +Please note that the repositories must belong to the same Github organization, we do not support yet a multi-github organization setup

                      Managing the Github permissions

                      To add or remove access to one of your repositories:

                      1. Open your Qovery Console and access your organization settings:

                        Qovery - delete organization

                      2. In the Organization settings menu, click Git Permission:

                        Application

                      3. Next to your Git provider account, click Manage permission:

                        Application

                      4. Click the Github account on which you want to manage the Qovery Github App access:

                        Application

                      5. Add or remove the repositories you want to give Qovery access to:

                        Application

                      Uninstalling the Qovery Github App

                      To uninstall the Qovery Github App:

                      1. Open your Qovery Console and access your organization settings:

                        Qovery - delete organization

                      2. In the Organization settings menu, click Git Permission:

                        Application

                      3. Next to your Git provider account, click Disconnect:

                        Application

                        The list of authorized Github repositories is updated, meaning Qovery now has access to all of your Github repositories again.

                      4. From your browser, access your Github account and open your Settings:

                        Application

                      5. In the navigation menu, click Applications:

                        Application

                      6. At the bottom of the page, click Uninstall:

                        Application

                        A confirmation pop-up window opens.

                      7. Click OK:

                        The Qovery Github App is uninstalled.

                      - + - + @@ -70,7 +70,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/index.html b/docs/using-qovery/configuration/organization/index.html index c8d6924ac6..38b4fe3bcb 100644 --- a/docs/using-qovery/configuration/organization/index.html +++ b/docs/using-qovery/configuration/organization/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                      Organization

                      An organization is a shared account where developers can collaborate across many projects at once. Owners and organization administrators can manage every aspect of the organization, from the clusters up to the member access.

                      Creating an Organization

                      When Signing Up

                      When signing up for Qovery, you need to sign in through your Git provider (GitHub, GitLab or Bitbucket).

                      Once this is done, you can create your first organization and the first project within it. Before completing the creation process, you need to choose one of our 3 plans:

                      • Free
                      • Team
                      • Enterprise

                      For more information, see our pricing page.

                      After Signing Up

                      Qovery lets you create as many as you want organizations. Each organization is independent of the others. -To create a new organization:

                      1. Click on your profile icon button on the left navbar.
                      2. Click on the + button in the top right corner of the dropdown.

                      Qovery - create organization after signing up

                      Change an Organization

                      As a user, you can have access to one or many organizations. Use the dropdown on the bottom left of the navbar to change your organization.

                      Qovery - change organization

                      Delete an Organization

                      To delete your organization, you need to go into the Danger Zone within your organization settings.

                      Billing

                      This section allows you to retrieve your invoices and as well manage the credit card used for the payments.

                      Organization admin settings

                      You can access the organization settings using the Wheel button on the left nav bar

                      How to access your organization settings

                      General Information

                      In the General Information tab:

                      • Company name: enter the name of your company.
                      • Description: enter a description of your organization.
                      • Website: enter the website of your company.
                      • Admin contact emails: enter one or several email addresses (separated by commas) on which you want to receive important communications from Qovery.

                      Don't forget to click Update to save your organization information!

                      Other Settings

                      You can find below a dedicated page for each of the admin settings that can be managed within this section.

                      Api token
                      Container registry
                      Git repository access
                      Members rbac
                      +To create a new organization:

                      1. Click on your profile icon button on the left navbar.
                      2. Click on the + button in the top right corner of the dropdown.

                      Qovery - create organization after signing up

                      Change an Organization

                      As a user, you can have access to one or many organizations. Use the dropdown on the bottom left of the navbar to change your organization.

                      Qovery - change organization

                      Delete an Organization

                      To delete your organization, you need to go into the Danger Zone within your organization settings.

                      Billing

                      This section allows you to retrieve your invoices and as well manage the credit card used for the payments.

                      Organization admin settings

                      You can access the organization settings using the Wheel button on the left nav bar

                      How to access your organization settings

                      General Information

                      In the General Information tab:

                      • Company name: enter the name of your company.
                      • Description: enter a description of your organization.
                      • Website: enter the website of your company.
                      • Admin contact emails: enter one or several email addresses (separated by commas) on which you want to receive important communications from Qovery.

                      Don't forget to click Update to save your organization information!

                      Other Settings

                      You can find below a dedicated page for each of the admin settings that can be managed within this section.

                      Api token
                      Container registry
                      Git repository access
                      Members rbac
                      - + - + @@ -67,7 +67,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/members-rbac/index.html b/docs/using-qovery/configuration/organization/members-rbac/index.html index 32d6d15b9d..9bade952d3 100644 --- a/docs/using-qovery/configuration/organization/members-rbac/index.html +++ b/docs/using-qovery/configuration/organization/members-rbac/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -53,14 +53,14 @@

                      Members and RBAC

                      You can manage from the organization settings the members capable to access your organization and as well their permission via an RBAC system.

                      You can access the organization settings using the Wheel button on the left nav bar

                      How to access your organization settings

                      Organization members

                      This section allows you to manage the members of your organization (add / remove) and as well assign a role to each of them.

                      You can invite someone to join your organization by email. Then he will get access to your projects and will be able to contribute.

                      Qovery - List all members within an organization

                      Roles-Based access control (RBAC)

                      Qovery allows you to control the access to your cluster and environment resources by defining and assigning roles to your users.

                      By default, five roles are created within your organization (Basic Roles):

                      • Owner: the user has full access on the organization
                      • Admin: same as the owner, the has full access to the organization but he cannot delete it
                      • DevOps: the user can manage the organization infrastructure (clusters/registry/webhook setup) and manage the deployments of any environment within the organization.
                      • Billing Manager: the user can only manage the billing of the organization
                      • Viewer: the user has read-only access to any section of the organization

                      More in detail, you can find the associated permissions below:

                      ActionOwnerAdminDevOpsBilling ManagerViewer
                      Read organizationyesyesyesyesyes
                      Edit organizationyesyesnonono
                      Delete organizationyesnononono
                      Manage billingyesyesnoyesno
                      Manage members & rolesyesyesnonono
                      Manage cluster & container registryyesyesyesnono
                      Manage organization setup (webhooks, Git and API tokens etc..)yesyesyesnono
                      Read ANY projectyesyesyesnoyes
                      Edit/Delete ANY projectyesyesnonono
                      Create projectyesyesnonono
                      Read ANY environmentyesyesyesnoyes
                      Edit/Delete ANY environment or serviceyesyesnonono
                      Create environment or serviceyesyesnonono
                      Add/Edit/Delete environment variables and secretsyesyesyesnono
                      Deploy/Stop ANY environment or serviceyesyesyesnono
                      Connect via shell to ANY applicationyesyesyesnono

                      Custom roles

                      If the basic roles are not enough given your internal organization, Qovery allows you to customize the accesses to your clusters, projets and environments by defining Custom Roles.

                      A Custom role allows you to customize:

                      • Cluster Level Permissions: you can specify the access to the existing computing resources (manage cluster X, create environments on cluster Y, read-only access on cluster K)
                      • Project Level Permissions: you can specify the access to the projects and their environments by environment type (deploy type X, create type K etc..)

                      To create a custom role, go in the Roles & Permissions section press "Add new Role"

                      For the new role, you will be able to specify:

                      • The name of the role
                      • A description
                      • Cluster Level permissions
                      • Project Level Permissions

                      Cluster Level Permissions

                      This section allows you to fine tune the access to the computing resources. For each cluster of your organization, you will be able to specify an access permission (ordered by permission level):

                      NamePermission Type
                      Read-OnlyThe user can access the cluster information (name, region etc..). Minimum permission level.
                      Create EnvironmentThe user can create environments on this cluster. Only users with this role could allocate resources for their environments on this cluster. Further environment level permissions (like deployment rights) are managed via the "Project Permissions", see below
                      Full AccessThe user can create create environments on this cluster and as well manage the cluster's settings (start/stop, change number and type of nodes etc..). This permission allows a group of users to manage by themselves a specific cluster
                      • Project Level Permissions This section allows you to fine tune the access to the projects and their environments. The environment access is managed by "Environment Type" to simplify the configuration (Production, Staging, Development, Preview). For each project of your organization and by environment type, you will be able to specify an access permission (ordered by permission level):
                      NamePermission Type
                      No AccessThe user has no access to this environment type. If the user has "No Access" on all the environment types, he will not have access to the project
                      Read-OnlyAccess in read-only to this environment type. Useful to restrict access on sensitive environments
                      DeployManage the deployments of this environment type, access the logs, connect via SSH to the application and manage its environment variables
                      ManageManage the deployments and the settings of this environment type (including adding or removing services)
                      Full AccessThe user is admin of the project and can do everything he wants on it (no matter the environment type)

                      Qovery - custom role

                      Once the role is created, you can assign it to a member of your organization within the "Members" section. You can also update the permissions by editing the role from the Roles&Permissions screen

                      Examples

                      Within this section, we will try to provide you some example of roles & permission setup

                      Example 1, simple setup

                      An organization has 3 clusters ("prod cluster", “staging cluster”, “dev cluster”) and 1 project P1. The organization has a CTO, a devops and some developers. The roles & permissions could be configured in this way:

                      • CTO = Owner
                      • Devops = Devops or Admin
                      • Developers: we want these users capable of accessing the project, having read access to the prod clusters/env, managing deployments on the staging cluster (but not creating new environments on it) and doing whatever they want for the development environments on the dev cluster. So the configuration will look like:
                        • Create a new Role “developer” with the following permissions:
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Read-Only
                            • Dev cluster → Create Environment (they can create environments on this cluster)
                          • Project Level Permissions for the project "P1":
                            • Environment access (by env type)
                              • prod = Read-Only
                              • staging = deploye (i.e. they can deploy env of type “staging”)
                              • development = Full Access (i.e. they can manage and create env of type “dev”)

                      Example 2, advanced setup

                      An organization with 4 dev clusters (“prod cluster”, “staging clyster”, 2 Dev clusters called “dev cluster team 1” and "dev cluster team 2”) and 2 projects P1 and P2. The organization has a CTO, a devops, 2 dev teams with an “acting dev-ops” in it who manages the dev cluster on behalf of the devops. -The roles & permissions could be configured in this way:

                      • CTO = Owner
                      • Devops = Devops or Admin
                      • Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:
                        • Create a new Role “Dev Team 1”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Read-Only
                            • Dev cluster team 1 → Create Environment (they can create envs only on their dev cluster)
                            • Dev cluster team 2 → Read-Only
                          • Project Level Permissions:
                            • Config on the project “P1”
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = deploy
                                • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                            • Config on the project “P2” (i.e. they can't access P2)
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = no-access
                                • dev = no-access
                      • Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:
                        • Create a new Role “Dev Team 2”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Read-Only
                            • Dev cluster team 1 → Read-Only
                            • Dev cluster team 2 → Create Environment (they can create envs only on their dev cluster)
                          • Project Level Permissions:
                            • Config on the project “P1” (i.e. they can't access P1)
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = no-access
                                • dev = no-access
                            • Config on the project “P2”
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = deploy
                                • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                      • Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:
                        • Create a new Group “Acting DevOps”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Create Environment
                            • Dev1 cluster → Full Access
                            • Dev2 cluster → Full Access
                          • Project permissions settings
                            • Config on the project “P1”
                              • Admin (i.e.: full access to the project)
                            • Config on the project “P2”
                              • Admin (i.e.: full access to the project)
                      +The roles & permissions could be configured in this way:

                      • CTO = Owner
                      • Devops = Devops or Admin
                      • Dev team 1: we want these users capable of accessing the project P1, having no access to the prod env and managing their deployments only on the "dev cluster Dev team 1" for their development environments.So the config will look like:
                        • Create a new Role “Dev Team 1”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Read-Only
                            • Dev cluster team 1 → Create Environment (they can create envs only on their dev cluster)
                            • Dev cluster team 2 → Read-Only
                          • Project Level Permissions:
                            • Config on the project “P1”
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = deploy
                                • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                            • Config on the project “P2” (i.e. they can't access P2)
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = no-access
                                • dev = no-access
                      • Dev team 2: we want these users capable of accessing the project P2, having no access to the prod env and managing their deployments only on the "dev cluster team 2" for their development environments. So the config will look like:
                        • Create a new Role “Dev Team 2”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Read-Only
                            • Dev cluster team 1 → Read-Only
                            • Dev cluster team 2 → Create Environment (they can create envs only on their dev cluster)
                          • Project Level Permissions:
                            • Config on the project “P1” (i.e. they can't access P1)
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = no-access
                                • dev = no-access
                            • Config on the project “P2”
                              • Environment access (by env type)
                                • prod = no-access
                                • staging = deploy
                                • dev = Full Access (i.e. they can do whatever they want on env of type “dev”)
                      • Acting DevOps user: we want this user capable of accessing the project, having read access to the prod env, managing the dev clusters and all the environments on it. So the config will look like this:
                        • Create a new Group “Acting DevOps”
                          • Cluster Level Permissions:
                            • Prod cluster → Read-Only
                            • Staging cluster → Create Environment
                            • Dev1 cluster → Full Access
                            • Dev2 cluster → Full Access
                          • Project permissions settings
                            • Config on the project “P1”
                              • Admin (i.e.: full access to the project)
                            • Config on the project “P2”
                              • Admin (i.e.: full access to the project)
                      - + - + @@ -68,7 +68,7 @@ - + @@ -76,7 +76,7 @@ - + diff --git a/docs/using-qovery/configuration/project/index.html b/docs/using-qovery/configuration/project/index.html index 48f1e59e0e..bb5709da9c 100644 --- a/docs/using-qovery/configuration/project/index.html +++ b/docs/using-qovery/configuration/project/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                      -

                      Project

                      A project allows you to group together a set of environments with the objective to run the same application (see the Environment page for more information).

                      When creating a new organization, a project is created by default. You can customize the access to your project thanks to our RBAC system.

                      Create a new project

                      If you need to create an additional project, go into the organization settings and press on the NEW button.

                      Project Creation

                      The modal will ask you to provide a name and a description.

                      Edit project general information

                      General information of a project can be updated by:

                      • opening the settings page
                      • selecting the project
                      • opening the GENERAL section.

                      Project Update

                      Delete a project

                      You can delete a project by:

                      • opening the settings page
                      • selecting the project
                      • opening the DANGER section and pressing the Delete Project button.

                      Project Delete

                      +

                      Project

                      A project allows you to group together a set of environments with the objective to run the same application (see the Environment page for more information).

                      When creating a new organization, a project is created by default. You can customize the access to your project thanks to our RBAC system.

                      Create a new project

                      If you need to create an additional project, go into the organization settings and press on the NEW button.

                      Project Creation

                      The modal will ask you to provide a name and a description.

                      Edit project general information

                      General information of a project can be updated by:

                      • opening the settings page
                      • selecting the project
                      • opening the GENERAL section.

                      Project Update

                      Delete a project

                      You can delete a project by:

                      • opening the settings page
                      • selecting the project
                      • opening the DANGER section and pressing the Delete Project button.

                      Project Delete

                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/configuration/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 600478a704..e2d9dc0eb6 100644 --- a/docs/using-qovery/configuration/service-health-checks/index.html +++ b/docs/using-qovery/configuration/service-health-checks/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@ You have a liveness probe configured on port 80 of your application. If during the deployment of your application the probes can't connect to port 80 and we reach a timeout, the deployment fails.

                      Qovery allows you to manage these probes directly from within the Qovery console during the setup of your application, letting you decide their activation, configuration and check frequency.

                      Probes can be configured for:

                      • Applications
                      • Cronjobs
                      • Lifecycle Jobs

                      Probes Configuration

                      The following configuration parameters are valid for both the Liveness and the Readiness probes.

                      Type

                      Allows you to specify the type of probe you want to run against your application:

                      • NONE if NONE is selected, the probe is disabled and thus Kubernetes won't be able to verify the state of your application and take the right corrective actions.
                      • HTTP probes are the most common probe type. You can use them if your application is a HTTP server, or if you create a lightweight HTTP server inside your application specifically to respond to such probes. When using a HTTP probe, you need to configure:

                        • a port
                        • a path Once configured, Kubernetes pings a path (for example: /healthz ) at a given port. If it gets a response in the 200 or 300 range, the check is passed. Otherwise, it is considered as failed and Kubernetes takes the necessary corrective actions.
                      • TCP probes are most often used when HTTP or command probes aren't an option. When using a TCP Liveness probe, Kubernetes tries to establish a connection on the specified port. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                      • gRPC probes When using a gRCP Liveness probe, Kubernetes tries to establish a connection on the specified port and service. If the connection is successful, the application is considered healthy. Otherwise, it is considered dead and the container is restarted.

                      • EXEC probes -Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                      Initial Delay (in seconds)

                      Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                      Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                      Period (in seconds)

                      Allows you to specify an interval, in seconds, between each probe.

                      Timeout (in seconds)

                      Allows you to specify the interval, in seconds, after which the probe times out.

                      Success Threshold

                      Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                      Failure Threshold

                      Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                      Configuiration for Long-starting application

                      If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                      If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                      +Exec probes allow to define a command to be executed within your container. If the command execution fails, the probe is considered as failed.

                      Initial Delay (in seconds)

                      Allows you to specify an interval, in seconds, between the application container start and the first liveness check.

                      Allowing additional time for the application to start can be useful when boot time usually takes too long (due to long boot operations), or when the application opens the port before being ready to receive traffic on it (due to a still ongoing boot operation).

                      Period (in seconds)

                      Allows you to specify an interval, in seconds, between each probe.

                      Timeout (in seconds)

                      Allows you to specify the interval, in seconds, after which the probe times out.

                      Success Threshold

                      Allows you to specify how many consecutive successes are needed, as a minimum, for the probe to be considered successful after having failed previously.

                      Failure Threshold

                      Allows you to specify how many consecutive failures are needed, as a minimum, for the probe to be considered failed after having succeeded previously.

                      Configuiration for Long-starting application

                      If your application has a long boot operation to run, your deployment might be marked as failed since the probe can't verify the state of your application within the specified time frame. In this case, you will find in your deployment logs a warning message Liveness probe failed: dial tcp xx.xx.xx.xx:xx: connect: connection refused , telling you that the probe is failing.

                      If your application needs more time to boot, increase the Initial Delay in seconds of the probes to match the application boot time.

                      - + - + @@ -69,7 +69,7 @@ - + diff --git a/docs/using-qovery/configuration/user-account/index.html b/docs/using-qovery/configuration/user-account/index.html index 6ddb64c9c0..805daf865d 100644 --- a/docs/using-qovery/configuration/user-account/index.html +++ b/docs/using-qovery/configuration/user-account/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                      User Account

                      You can manage a few settings linked to your account from the User Account section.

                      To access this section, you have to: 1. click on the user icon on the bottom left side -2. click on your user

                      Access user account

                      General account settings

                      This section shows you some basic information about your account like:

                      • First name: retrieved from your git account, it can't be changed.
                      • Last name: retrieved from your git account, it can't be changed.
                      • Account email: retrieved from your git account, it can't be changed.
                      • Communication email: this email will be used by Qovery to communicate you any update or issue ongoing on the product. Make sure to set the communication email with a valid email adress
                      Resources
                        +2. click on your user

                        Access user account

                        General account settings

                        This section shows you some basic information about your account like:

                        • First name: retrieved from your git account, it can't be changed.
                        • Last name: retrieved from your git account, it can't be changed.
                        • Account email: retrieved from your git account, it can't be changed.
                        • Communication email: this email will be used by Qovery to communicate you any update or issue ongoing on the product. Make sure to set the communication email with a valid email adress
                        Resources
                          - + - + @@ -67,7 +67,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html index 88bfee9a76..3916925070 100644 --- a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html +++ b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                          -

                          Deploying with the auto-deploy feature

                          Once you have configured your services and deployed them for the first time, you can decide to automatically update the applications to the latest version of your git branch thanks to the auto-deploy feauture.

                          Each time a commit is pushed on your git repository, Qovery receives a webhook call containing the commit information (who did it, what changed, which branch etc..). Thanks to this information, Qovery is able to determine which application should be automatically re-deployed with the new version.

                          How to activate it

                          The auto-deploy feature can be activated from the application settings, by switching on the auto-deploy flag.

                          Auto-deploy settings

                          It can also be activated on the first step of the service creation flow

                          Auto-deploy creation flow

                          Once this flag is activated, every new commit pushed on the branch of the application will trigger an automatic deployment of the new version.

                          Auto-deploy and container images

                          The auto-deploy feature can be activated as well if you directly deploy your container images but it requires some additional integration via your CI/CD. Your CI/CD has to inform Qovery that a new version of the image (a new tag) is available for a specific container image. Thanks to this information, Qovery can find any application that uses this container image and automatically trigger a deployment of the new image tag.

                          To inform Qovery of the new version, your CI/CD needs to call the following endpoints, depending on the service type:

                          +

                          Deploying with the auto-deploy feature

                          Once you have configured your services and deployed them for the first time, you can decide to automatically update the applications to the latest version of your git branch thanks to the auto-deploy feauture.

                          Each time a commit is pushed on your git repository, Qovery receives a webhook call containing the commit information (who did it, what changed, which branch etc..). Thanks to this information, Qovery is able to determine which application should be automatically re-deployed with the new version.

                          How to activate it

                          The auto-deploy feature can be activated from the application settings, by switching on the auto-deploy flag.

                          Auto-deploy settings

                          It can also be activated on the first step of the service creation flow

                          Auto-deploy creation flow

                          Once this flag is activated, every new commit pushed on the branch of the application will trigger an automatic deployment of the new version.

                          Auto-deploy and container images

                          The auto-deploy feature can be activated as well if you directly deploy your container images but it requires some additional integration via your CI/CD. Your CI/CD has to inform Qovery that a new version of the image (a new tag) is available for a specific container image. Thanks to this information, Qovery can find any application that uses this container image and automatically trigger a deployment of the new image tag.

                          To inform Qovery of the new version, your CI/CD needs to call the following endpoints, depending on the service type:

                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html index 7a07c4c1df..6a6749b8c9 100644 --- a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html +++ b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                          -

                          Deploying with your CI/CD

                          Once you have configured your environments and services, you can decide to manage the deployments via the UI or directly from your CI/CD.

                          You can find more information on how to integrate your CI/CD within this section.

                          Resources
                            +

                            Deploying with your CI/CD

                            Once you have configured your environments and services, you can decide to manage the deployments via the UI or directly from your CI/CD.

                            You can find more information on how to integrate your CI/CD within this section.

                            Resources
                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-actions/index.html b/docs/using-qovery/deployment/deployment-actions/index.html index d1d8705295..1786370869 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@

                              Deployment Actions

                              Qovery allows you to manage the deployment lifecycle of your services and environments via a set of Deployment actions (example: deploy, redeploy, restart, stop etc..). These actions can be triggered via the Qovery web console, via the Qovery API, via the Qovery CLI or from your CI/CD depending on your integration type.

                              You can imagine the deployment lifecycle of a service or environment like a state machine:

                              • each state is identified by a Deployment Status
                              • the execution of a deployment action will modify the state of the service/environment until it reaches a final status (ok or error)
                              • the list of allowed Deployment action depends on the current Deployment Status. Example: if the deployment status is Deployment Ok, you can trigger only the action Stop. This will stop the execution of the service (deployment status Stopped).

                              Example: When a new application is created within Qovery, the application will have the deployment status Ready. Once the action Deploy is executed on the service, the service will go through the statuses Queued, Building, Deploying and then finally on the status Deployed (meaning that the application is correctly deployed).

                              You can find the deployment status directly in the Qovery console in the service or environment list:

                              Deployment Statuses

                              Note that the deployment status of the environment is built based on the deployment statuses of each service within it.

                              You can decide to execute a deployment action on:

                              • an environment: the action will be executed on each service within the environment. To know more about the deployment order of your services, have a look at the Deployment Pipeline
                              • a single service: the action will be executed only on the selected service.

                              The deployment actions are accessible through the Play button available at service or environment level.

                              Deployment Actions

                              You can trigger the deployment actions via the UI but also via any interface described within this section.

                              Deployment Actions

                              You can find below a description of each deployment action, including its purpose and the deployment status your environment and/or service will go through.

                              Deploy

                              The Deploy action allows you to create the resource necessary to run your code on your Kubernetes cluster. This action is available only if the service or environment have never been deployed.

                              Based on the configuration of your services within, a certain number of Pods will be created in a dedicated Namespace of the target Kubernetes cluster.

                              Once triggered, the deployment of a service goes through the following deployment statuses:

                              • QUEUED : the deployment has been queued and it is waiting for the necessary resources to be allocated to manage your request
                              • BUILDING : the Qovery engine is downloading the git repository and building your code. At the end of this step an image is built and pushed to a registry available on your cloud account. The status will become BUILD ERROR in case of issues on building your code
                              • DEPLOYING : the pods are being created on your cluster based on the image built on the previous step. The status will become DEPLOYMENT ERROR in case of issues on deploying your service. A service is considered un-healthy if the Kubernetes readiness probe check is never OK (more info on readiness probe).
                              • DEPLOYMENT OK : all the requested pods have been created and the service is correctly running (liveness and readiness probes are ok).

                              If the deployment was triggered on the entire environment, the environment will go through the following deployment statuses:

                              • QUEUED : at least one service is in status QUEUED
                              • BUILDING : at least one service is in status BUILDING
                              • DEPLOYING : at least one service is in status DEPLOYING
                              • DEPLOYMENT OK : at least one service is in status DEPLOYMENT OK but none of them is in error (BUILD ERROR or DEPLOYMENT ERROR)
                              • DEPLOYMENT ERROR : at least one service is in status DEPLOYMENT ERROR

                              Redeploy

                              The Redeploy action allows you to update the remote configuration of your services based on their configuration on Qovery side. If any difference exists (vCPU, number of instances, code version etc..), a new set of pod will be created with the new configuration and replace the existing ones. If there are no configuration differences, nothing will happen on the pods running on your cluster (not even a restart, please use the Restart Service feature). -This action is available only if the Deploy action has been triggered at least once on the service or environment.

                              When replacing the pods of your application, Qovery uses the rolling-restart deployment logic:

                              1) Deploy new version of instance #1.

                              2) New version of instance #1 is running => kill previous version of instance #1.

                              3) Deploy new version of instance #2.

                              4) New version of instance #2 is running => kill previous version of instance #2.

                              And so on...

                              You can trigger the re-deployment of a service or of the entire environment. The service or environment goes through the same deployment statuses described in the deployment section.

                              Stop

                              The Stop action allows you to stop the execution on the cluster of the selected service or environment (deployment status = Stopped). This action is available only if the current deployment status is Deployment OK or Deployment Error.

                              The effect on your cluster of the stop operation is different depending on the type of service:

                              • Application, Container, Container DB : Pods of those services are stopped. Any attached storage is preserved
                              • Cloud provider Managed DB: the database is paused (only for AWS, not working on Redis)

                              Restart Service

                              The Restart Service action allows you to restart the pods of your service without applying any configuration change. This action is available only if the current deployment status is Deployment OK and only for a single service.

                              Once triggered, the deployment status service goes through the following statuses:

                              • RESTARTING : the request to restart has been received
                              • RESTARTED : all the pods of the service have been restarted
                              • RESTART ERROR : Qovery couldn't process the restart request

                              Cancel Deployment

                              The Cancel Deployment action allows you to abort any Deploy or Redeploy action. This action is available only if the current deployment status is Queued or Building or Deploying.

                              Deploy other version

                              The Deploy other version action allows you to deploy a different version for your service. This action is available no matter the deployment status of the service.

                              Once you click on the action, this panel will appear, and you will be able to choose the version you wish to update/rollback (either git commit or image Tag).

                              Deploy Other Version

                              By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                              Deploy latest version

                              The Deploy latest version action allows you to deploy the latest version for any of your services within the environment. This action is available no matter the deployment status of the service and only at environment level

                              Once you click on the action, this panel will appear, and you will be able to choose the services you wish to update to the latest version (only for services with source = git repository).

                              Deploy Latest Version

                              By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                              +This action is available only if the Deploy action has been triggered at least once on the service or environment.

                              When replacing the pods of your application, Qovery uses the rolling-restart deployment logic:

                              1) Deploy new version of instance #1.

                              2) New version of instance #1 is running => kill previous version of instance #1.

                              3) Deploy new version of instance #2.

                              4) New version of instance #2 is running => kill previous version of instance #2.

                              And so on...

                              You can trigger the re-deployment of a service or of the entire environment. The service or environment goes through the same deployment statuses described in the deployment section.

                              Stop

                              The Stop action allows you to stop the execution on the cluster of the selected service or environment (deployment status = Stopped). This action is available only if the current deployment status is Deployment OK or Deployment Error.

                              The effect on your cluster of the stop operation is different depending on the type of service:

                              • Application, Container, Container DB : Pods of those services are stopped. Any attached storage is preserved
                              • Cloud provider Managed DB: the database is paused (only for AWS, not working on Redis)

                              Restart Service

                              The Restart Service action allows you to restart the pods of your service without applying any configuration change. This action is available only if the current deployment status is Deployment OK and only for a single service.

                              Once triggered, the deployment status service goes through the following statuses:

                              • RESTARTING : the request to restart has been received
                              • RESTARTED : all the pods of the service have been restarted
                              • RESTART ERROR : Qovery couldn't process the restart request

                              Cancel Deployment

                              The Cancel Deployment action allows you to abort any Deploy or Redeploy action. This action is available only if the current deployment status is Queued or Building or Deploying.

                              Deploy other version

                              The Deploy other version action allows you to deploy a different version for your service. This action is available no matter the deployment status of the service.

                              Once you click on the action, this panel will appear, and you will be able to choose the version you wish to update/rollback (either git commit or image Tag).

                              Deploy Other Version

                              By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                              Deploy latest version

                              The Deploy latest version action allows you to deploy the latest version for any of your services within the environment. This action is available no matter the deployment status of the service and only at environment level

                              Once you click on the action, this panel will appear, and you will be able to choose the services you wish to update to the latest version (only for services with source = git repository).

                              Deploy Latest Version

                              By pressing on the Deploy button, a deployment of the service will be triggered using the selected version.

                              - + - + @@ -68,7 +68,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index 93cfd9e0d7..7642b905a1 100644 --- a/docs/using-qovery/deployment/deployment-history/index.html +++ b/docs/using-qovery/deployment/deployment-history/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                              -

                              Deployment History

                              You can access the deployments history of your environment or service by opening the Deployments tab on either the environment or service page.

                              Deployment history access

                              For each deployment triggered in the past, you will find

                              • The execution id: an internal id assigned to each deployment. You can share this id with the Qovery team in case of errors in one of your deployments
                              • Each service that has been deployed during this deployment together with their deployment status and the version that has been deployed
                              Resources
                                +

                                Deployment History

                                You can access the deployments history of your environment or service by opening the Deployments tab on either the environment or service page.

                                Deployment history access

                                For each deployment triggered in the past, you will find

                                • The execution id: an internal id assigned to each deployment. You can share this id with the Qovery team in case of errors in one of your deployments
                                • Each service that has been deployed during this deployment together with their deployment status and the version that has been deployed
                                Resources
                                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-pipeline/index.html b/docs/using-qovery/deployment/deployment-pipeline/index.html index 957ca9cee7..0889a50c14 100644 --- a/docs/using-qovery/deployment/deployment-pipeline/index.html +++ b/docs/using-qovery/deployment/deployment-pipeline/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                                  Deployment Pipeline

                                  When the deployment of an environment is triggered, Qovery executes what we call Deployment Pipeline. It basically defines the operations shall be performed to properly deploy every service defined within your environment (build the code of service X, push the image on a registry, deploy service X on the Kubernetes cluster etc..)

                                  A pipeline is composed of an ordered list of Deployment Stages. Each Stage has an execution order assigned within the pipeline: If a stage A has an execution order lower than stage B then B can be executed only if the execution of stage A is completed.

                                  Each service of your environment belongs to one (and only one) Deployment Stage. This allows you to define at which moment of the deployment pipeline a service should be deployed and thus respect any service inter-dependency (e.g. your front-end needs to be started after the back-end, your db needs to be started before your back-end etc..).

                                  Below you can find a visual example of how the pipeline looks like:

                                  Deployment Pipeline

                                  Deployment of a stage

                                  When the deployment pipeline execute the deployment of a stage, the services within it will go through the Build and Deployment phases.

                                  The Building process is managed by the Qovery CI which downloads your repository and generates the final image that will be run on your Kubernetes cluster.

                                  The build and deploy operation of each service within a deployment stage are executed in parallel with a parallism of 4.

                                  Example -If you have 6 applications to be deployed within a stage, Qovery will:

                                  • build 4 applications in parallel. Once the build of one application is terminated, Qovery will start immediately another one until all the applications are built.
                                  • deploy 4 applications in parallel on your Kubernetes cluster. Once the deployment of one application is terminated, Qovery will start immediately another one until all the applications are deployed.

                                  Default Pipeline Setup

                                  By default, the deployment pipeline is constituted of 4 deployment stages with a default service assignment rule:

                                  • "0.DEFAULT DATABASE": any new service of type DATABASE will be added to this stage.
                                  • "1.DEFAULT JOB": any new service of type JOB will be added to this stage.
                                  • "2.DEFAULT CONTAINER": any new service of type CONTAINER will be added to this stage (application deployed from a container image).
                                  • "3.DEFAULT APPLICATION": any new service of type APPLICATION will be added to this stage (application deployed from a git repository).

                                  Default Deployment Pipeline

                                  Once the service is created, the assigned stage can be modified afterwards. See this section for more information.

                                  Visualizing and Modifying the Pipeline

                                  You can access and modify the pipeline configuration from the environment settings. Have a look at this section to know more.

                                  +If you have 6 applications to be deployed within a stage, Qovery will:

                                  • build 4 applications in parallel. Once the build of one application is terminated, Qovery will start immediately another one until all the applications are built.
                                  • deploy 4 applications in parallel on your Kubernetes cluster. Once the deployment of one application is terminated, Qovery will start immediately another one until all the applications are deployed.

                                  Default Pipeline Setup

                                  By default, the deployment pipeline is constituted of 4 deployment stages with a default service assignment rule:

                                  • "0.DEFAULT DATABASE": any new service of type DATABASE will be added to this stage.
                                  • "1.DEFAULT JOB": any new service of type JOB will be added to this stage.
                                  • "2.DEFAULT CONTAINER": any new service of type CONTAINER will be added to this stage (application deployed from a container image).
                                  • "3.DEFAULT APPLICATION": any new service of type APPLICATION will be added to this stage (application deployed from a git repository).

                                  Default Deployment Pipeline

                                  Once the service is created, the assigned stage can be modified afterwards. See this section for more information.

                                  Visualizing and Modifying the Pipeline

                                  You can access and modify the pipeline configuration from the environment settings. Have a look at this section to know more.

                                  - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-strategies/index.html b/docs/using-qovery/deployment/deployment-strategies/index.html index c57519ac27..3aedd5e42b 100644 --- a/docs/using-qovery/deployment/deployment-strategies/index.html +++ b/docs/using-qovery/deployment/deployment-strategies/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                  -

                                  Deployment Strategies

                                  Qovery supports 2 ways of application deployment:

                                  • RollingUpdate (default): Qovery will gracefully rollout new versions. It will automatically rollback if the new version fails to start | Useful to avoid downtime and load spikes during update
                                  • Recreate: Qovery will stop all current versions and create new ones once all old ones have been shutdown.

                                  To make it more clear, here is a representation of the 2 strategies. First and default one, the RollingUpdate strategy:

                                  Rolling update strategy

                                  And Recreate deployment strategy:

                                  Recreate strategy

                                  Resources
                                    +

                                    Deployment Strategies

                                    Qovery supports 2 ways of application deployment:

                                    • RollingUpdate (default): Qovery will gracefully rollout new versions. It will automatically rollback if the new version fails to start | Useful to avoid downtime and load spikes during update
                                    • Recreate: Qovery will stop all current versions and create new ones once all old ones have been shutdown.

                                    To make it more clear, here is a representation of the 2 strategies. First and default one, the RollingUpdate strategy:

                                    Rolling update strategy

                                    And Recreate deployment strategy:

                                    Recreate strategy

                                    Resources
                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/image-mirroring/index.html b/docs/using-qovery/deployment/image-mirroring/index.html index ed80a2a2e0..cc9ce766e9 100644 --- a/docs/using-qovery/deployment/image-mirroring/index.html +++ b/docs/using-qovery/deployment/image-mirroring/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                      -

                                      Image Mirroring

                                      When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system.

                                      This mirroring registry is also available within the Qovery interface

                                      Mirroring Registry

                                      How does it work

                                      Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

                                      Application built via the Qovery pipeline

                                      Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

                                      Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

                                      If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                      Mirroring built image

                                      Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

                                      Application deployed from a container registry

                                      The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

                                      Two mirroring modes are available when deploying a service from a container registry:

                                      Service (Default)

                                      Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

                                      At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

                                      If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                      Mirroring image from registry - Service case

                                      Pro:

                                      • Images are automatically deleted when not needede anymore

                                      Cons:

                                      • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

                                      Cluster

                                      Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

                                      At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

                                      If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

                                      Mirroring image from registry - Cluster case

                                      Pro:

                                      • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

                                      Cons:

                                      • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

                                      Why image mirroring is necessary

                                      Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

                                      Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

                                      Why unique image tags are necessary

                                      When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

                                      • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
                                      • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

                                      In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

                                      +

                                      Image Mirroring

                                      When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system.

                                      This mirroring registry is also available within the Qovery interface

                                      Mirroring Registry

                                      How does it work

                                      Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

                                      Application built via the Qovery pipeline

                                      Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

                                      Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

                                      If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                      Mirroring built image

                                      Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

                                      Application deployed from a container registry

                                      The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

                                      Two mirroring modes are available when deploying a service from a container registry:

                                      Service (Default)

                                      Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

                                      At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

                                      If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

                                      Mirroring image from registry - Service case

                                      Pro:

                                      • Images are automatically deleted when not needede anymore

                                      Cons:

                                      • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

                                      Cluster

                                      Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

                                      At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

                                      If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

                                      Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

                                      Mirroring image from registry - Cluster case

                                      Pro:

                                      • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

                                      Cons:

                                      • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

                                      Why image mirroring is necessary

                                      Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

                                      Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

                                      Why unique image tags are necessary

                                      When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

                                      • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
                                      • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

                                      In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/index.html b/docs/using-qovery/deployment/index.html index b7a413ee38..7407714fb7 100644 --- a/docs/using-qovery/deployment/index.html +++ b/docs/using-qovery/deployment/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@

                                      Deployment

                                      In the following subsections, you'll find all the information about the deployment management with Qovery.

                                      The deployment has the end goal to create the resources necessary to run your applications on your cloud account, based on the configuration you have done on the Qovery console.

                                      In the image below you can find the complete flow that your application will go through, from your Git repository up to your Kuernetes cluster.

                                      Deployment history access

                                      1. The developer pushes the code within the git repository
                                      2. The deployment trigger can come from different sources depending on your integration type: 2.a The auto-deploy feature is activated on Qovery. When the new commit is pushed, a webhook call is received by Qovery and can proceed with the application deployment. See this section for more information. 2.b The auto-deploy feature is not activated on Qovery and the deployment is managed via the CI/CD. -2.c The auto-deploy feature is not activated on Qovery and the user decides to trigger the deployment directly from within the Qovery console.
                                      3. The Qovery engine starts processing based on the configured Deployment Pipeline. The pipeline defines the steps that need to be followed in order to deploy your applications. See this section for more information.
                                      4. The Qovery engine pulls the code from your repository.
                                      5. The Qovery engine builds the code and pushes the generated images on a registry present within your cloud account (See the Image Mirroring page for more information).
                                      6. The Qovery engine creates the load balancers and configure the network.
                                      7. The Qovery engine creates a namespace within the Kubernetes cluster and deploys the application.
                                      8. The Qovery engine takes care of creating a custom domain for your application and as well configure the TLS so that you can access the application from the internet.

                                      The developer can monitor at each time the status of the deployment or of the running applications by:

                                      • checking the Deployment Status and Running Status. See this section for more information.
                                      • access the Logs interface to retrieve the deployment logs and as well the application logs in real-time. See this section for more information.
                                      • access the Deployment History section to get all the information about the past deployments. See this section for more information.

                                      Note:

                                      • Qovery also support deployments from container registry but actions 2a is not supported plus 4 and 5 are not done.
                                      • In the example above we have shown how the deployment of an application is done but Qovery provides you with a complete set of Deployment Actions allowing you to manage the deployment lifecycle of your applications and environments (Stop, restart etc..). See this section for more information.
                                      Resources
                                        +2.c The auto-deploy feature is not activated on Qovery and the user decides to trigger the deployment directly from within the Qovery console.
                                      • The Qovery engine starts processing based on the configured Deployment Pipeline. The pipeline defines the steps that need to be followed in order to deploy your applications. See this section for more information.
                                      • The Qovery engine pulls the code from your repository.
                                      • The Qovery engine builds the code and pushes the generated images on a registry present within your cloud account (See the Image Mirroring page for more information).
                                      • The Qovery engine creates the load balancers and configure the network.
                                      • The Qovery engine creates a namespace within the Kubernetes cluster and deploys the application.
                                      • The Qovery engine takes care of creating a custom domain for your application and as well configure the TLS so that you can access the application from the internet.
                                      • The developer can monitor at each time the status of the deployment or of the running applications by:

                                        • checking the Deployment Status and Running Status. See this section for more information.
                                        • access the Logs interface to retrieve the deployment logs and as well the application logs in real-time. See this section for more information.
                                        • access the Deployment History section to get all the information about the past deployments. See this section for more information.

                                        Note:

                                        • Qovery also support deployments from container registry but actions 2a is not supported plus 4 and 5 are not done.
                                        • In the example above we have shown how the deployment of an application is done but Qovery provides you with a complete set of Deployment Actions allowing you to manage the deployment lifecycle of your applications and environments (Stop, restart etc..). See this section for more information.
                                        Resources
                                          - + - + @@ -68,7 +68,7 @@ - + diff --git a/docs/using-qovery/deployment/logs/index.html b/docs/using-qovery/deployment/logs/index.html index 2267c13267..5cae10547c 100644 --- a/docs/using-qovery/deployment/logs/index.html +++ b/docs/using-qovery/deployment/logs/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                          -

                                          Logs

                                          The Logs interface allows you to access:

                                          • The deployment logs: every time a deployment is triggered, Qovery provides you with the log of its execution and as well with any error that might occur.
                                          • The live logs of your applications: Qovery allows you to retrieve the logs of your application in real time, streamed directly from your remote application (no data is stored on Qovery side). The logs are accessible as long as the application is running and writing the logs in the stdout.

                                          How to access the logs

                                          The Logs interface can be accessed from the console by clicking on the parchment icon available in the header or within the table

                                          Log access

                                          The interface is composed by two sections:

                                          • A navigation panel (on the left)
                                          • A log section allowing you to switch between the deployment logs and the live logs of a service.

                                          Log View

                                          Navigation Panel

                                          This section provides you with some information on the last Deployment happened on the environment and as well a navigation system to access the logs of each services of your environment.

                                          More in detail you will find here:

                                          • Deployment information (top section): this section shows you the status of the deployment execution and when it happened. If a deployment is ongoing, its status will be updated accordingly on this section.
                                          • Pipeline view: this section provides an overall view of the current configuration of the Deployment Pipeline and each services present within the environment. By default, only the services that have been deployed within the last deployment execution are displayed but you can still display all of them by un-ticking the option Last deployed only.

                                          Log section

                                          This section allows you to access the Deployment Logs and the Live logs of each service.

                                          Deployment Logs

                                          This tab shows you the deployment logs for each service of the environment. By default you get access to the logs of the last deployment execution but you can switch to previous execution (See Accessing old deployment logs).

                                          If the service is built via the Qovery CI pipeline, you will get access to the build logs.

                                          Build Logs

                                          When the deployment on Kubernetes is executed, the system will provide you the deployment status updates. In case of deployment issues, these updates will provide you with some information on the rootcause.

                                          Deployment Status Update

                                          At the end of the deployment, a final message is emitted confirming if the deployment was successful or not and, in case of issue, it provides you with some information on how to solve the issue.

                                          Log content

                                          You can use the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                          Accessing old deployment logs

                                          You can access the logs of a past deployment execution in two ways:

                                          • using the Deployment log switch on the logs view

                                          Deployment Log Switch

                                          • from the Deployment tab from the service or environment page and clicking on the parchment icon of a previous deployment

                                          Deployment Tab Switch

                                          Live Logs

                                          The live logs tab gives you a real-time view on the log generated by your application while running remotely on your cloud provider infrastructure.

                                          Within this section you will find:

                                          • Timestamp: the timestamp of the message
                                          • Pod Name: the name of the kubernetes pod where your application is running (to distinguish the instance in case of multi-instance app). If you want to follow a specific pod, you can filter the logs by clicking on the pod name
                                          • Version: the commit id or the image tag of the application running on this POD
                                          • Message: the log message

                                          If you need to troubleshoot issues on the requests managed by your application, you can also access the Nginx logs in the same view (logs format is available in the helper). Note that this option is available only if the application is exposed publicly (See the Port Section)

                                          Log content

                                          +

                                          Logs

                                          The Logs interface allows you to access:

                                          • The deployment logs: every time a deployment is triggered, Qovery provides you with the log of its execution and as well with any error that might occur.
                                          • The live logs of your applications: Qovery allows you to retrieve the logs of your application in real time, streamed directly from your remote application (no data is stored on Qovery side). The logs are accessible as long as the application is running and writing the logs in the stdout.

                                          How to access the logs

                                          The Logs interface can be accessed from the console by clicking on the parchment icon available in the header or within the table

                                          Log access

                                          The interface is composed by two sections:

                                          • A navigation panel (on the left)
                                          • A log section allowing you to switch between the deployment logs and the live logs of a service.

                                          Log View

                                          Navigation Panel

                                          This section provides you with some information on the last Deployment happened on the environment and as well a navigation system to access the logs of each services of your environment.

                                          More in detail you will find here:

                                          • Deployment information (top section): this section shows you the status of the deployment execution and when it happened. If a deployment is ongoing, its status will be updated accordingly on this section.
                                          • Pipeline view: this section provides an overall view of the current configuration of the Deployment Pipeline and each services present within the environment. By default, only the services that have been deployed within the last deployment execution are displayed but you can still display all of them by un-ticking the option Last deployed only.

                                          Log section

                                          This section allows you to access the Deployment Logs and the Live logs of each service.

                                          Deployment Logs

                                          This tab shows you the deployment logs for each service of the environment. By default you get access to the logs of the last deployment execution but you can switch to previous execution (See Accessing old deployment logs).

                                          If the service is built via the Qovery CI pipeline, you will get access to the build logs.

                                          Build Logs

                                          When the deployment on Kubernetes is executed, the system will provide you the deployment status updates. In case of deployment issues, these updates will provide you with some information on the rootcause.

                                          Deployment Status Update

                                          At the end of the deployment, a final message is emitted confirming if the deployment was successful or not and, in case of issue, it provides you with some information on how to solve the issue.

                                          Log content

                                          You can use the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                          Accessing old deployment logs

                                          You can access the logs of a past deployment execution in two ways:

                                          • using the Deployment log switch on the logs view

                                          Deployment Log Switch

                                          • from the Deployment tab from the service or environment page and clicking on the parchment icon of a previous deployment

                                          Deployment Tab Switch

                                          Live Logs

                                          The live logs tab gives you a real-time view on the log generated by your application while running remotely on your cloud provider infrastructure.

                                          Within this section you will find:

                                          • Timestamp: the timestamp of the message
                                          • Pod Name: the name of the kubernetes pod where your application is running (to distinguish the instance in case of multi-instance app). If you want to follow a specific pod, you can filter the logs by clicking on the pod name
                                          • Version: the commit id or the image tag of the application running on this POD
                                          • Message: the log message

                                          If you need to troubleshoot issues on the requests managed by your application, you can also access the Nginx logs in the same view (logs format is available in the helper). Note that this option is available only if the application is exposed publicly (See the Port Section)

                                          Log content

                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html index 15e67b42e9..808d32a0df 100644 --- a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html +++ b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                          -

                                          Running and Deployment Statuses

                                          From any environment window on your Qovery Console, you can monitor the running and deployment status of your environments and services.

                                          Statuses

                                          ItemDescription
                                          1The dot in the service tab shows the environment running status.
                                          For more information, see the Environment Statuses section below.
                                          2The dot in the deployment tab shows the environment deployment status.
                                          For more information, see the Deployment Statuses section below.
                                          3The dot next to the name of the service represent the running status of the serice.
                                          For more information, see Service Statuses section below.
                                          4The label in the service table shows the deployment status of the service.
                                          For more information, see Deployment Statuses section below.

                                          Running Statuses

                                          Thanks to Running statuses, you can find out which services are currently running on your platform, and which ones are interrupted. There are two types of run services available at the moment: environment statuses and service statuses.

                                          Environment Statuses

                                          When you access an environment on your Qovery Console, you can check its status in real time. To do so, at the top of the environment window, hover over the status dot next to the environment name.

                                          The environment status is computed based on the statuses of all the services in that specific environment. Here are all the possible environment statuses:

                                          StatusDescription
                                          STOPPED (Gray dot)All the services are stopped.
                                          STARTING (Loading Icon)At least 1 service is starting.
                                          STOPPING (Loading Icon)At least 1 service is stopping.
                                          RUNNING (Green dot)All services are running correctly.
                                          ERROR (Red dot)All services are in error status.
                                          WARNING (Orange dot)At least 1 service is in error status (but not all of them).
                                          COMPLETED (Green dot)The job execution has completed (only for cronjob and lifecycle jobs).

                                          Service Statuses

                                          When you access an environment on your Qovery Console, you can check the status of each service in that environment in real time. To do so, hover over the status dot next to the service name.

                                          Here are all the possible service statuses:

                                          StatusDescription
                                          STOPPED (Gray dot)All the application instances are stopped.
                                          STARTING (Loading Icon)At least 1 application instance is starting.
                                          STOPPING (Loading Icon)At least 1 application instance is stopping.
                                          RUNNING (Green dot)All application instances are running correctly.
                                          ERROR (Red dot)All application instances are in error status.
                                          WARNING (Orange dot)(Valid for multi-instance applications only) At least 1 application instance is in error status (but not all of them).

                                          Deployment Statuses

                                          When you access an environment on your Qovery Console, you can check:

                                          • the overall status of your deployments in that specific environment, thanks to the label displayed next to the environment name. This corresponds to the status of the last deployment performed on the environment.

                                          • the deployment status of each service in that specific environment, thanks to the label displayed in the Service column. This corresponds to the status of the last deployment performed on the service.

                                            Here are all the possible deployment statuses for both environments and services:

                                          • QUEUED (temporary state).

                                          • BUILDING (temporary state).

                                          • BUILDING ERROR (final state).

                                          • DEPLOYING (temporary state).

                                          • DEPLOYMENT ERROR (final state).

                                          • CANCELLING BUILDING (temporary state).

                                          • CANCELLED (temporary state).

                                          • DEPLOYMENT OK (final state).

                                          +

                                          Running and Deployment Statuses

                                          From any environment window on your Qovery Console, you can monitor the running and deployment status of your environments and services.

                                          Statuses

                                          ItemDescription
                                          1The dot in the service tab shows the environment running status.
                                          For more information, see the Environment Statuses section below.
                                          2The dot in the deployment tab shows the environment deployment status.
                                          For more information, see the Deployment Statuses section below.
                                          3The dot next to the name of the service represent the running status of the serice.
                                          For more information, see Service Statuses section below.
                                          4The label in the service table shows the deployment status of the service.
                                          For more information, see Deployment Statuses section below.

                                          Running Statuses

                                          Thanks to Running statuses, you can find out which services are currently running on your platform, and which ones are interrupted. There are two types of run services available at the moment: environment statuses and service statuses.

                                          Environment Statuses

                                          When you access an environment on your Qovery Console, you can check its status in real time. To do so, at the top of the environment window, hover over the status dot next to the environment name.

                                          The environment status is computed based on the statuses of all the services in that specific environment. Here are all the possible environment statuses:

                                          StatusDescription
                                          STOPPED (Gray dot)All the services are stopped.
                                          STARTING (Loading Icon)At least 1 service is starting.
                                          STOPPING (Loading Icon)At least 1 service is stopping.
                                          RUNNING (Green dot)All services are running correctly.
                                          ERROR (Red dot)All services are in error status.
                                          WARNING (Orange dot)At least 1 service is in error status (but not all of them).
                                          COMPLETED (Green dot)The job execution has completed (only for cronjob and lifecycle jobs).

                                          Service Statuses

                                          When you access an environment on your Qovery Console, you can check the status of each service in that environment in real time. To do so, hover over the status dot next to the service name.

                                          Here are all the possible service statuses:

                                          StatusDescription
                                          STOPPED (Gray dot)All the application instances are stopped.
                                          STARTING (Loading Icon)At least 1 application instance is starting.
                                          STOPPING (Loading Icon)At least 1 application instance is stopping.
                                          RUNNING (Green dot)All application instances are running correctly.
                                          ERROR (Red dot)All application instances are in error status.
                                          WARNING (Orange dot)(Valid for multi-instance applications only) At least 1 application instance is in error status (but not all of them).

                                          Deployment Statuses

                                          When you access an environment on your Qovery Console, you can check:

                                          • the overall status of your deployments in that specific environment, thanks to the label displayed next to the environment name. This corresponds to the status of the last deployment performed on the environment.

                                          • the deployment status of each service in that specific environment, thanks to the label displayed in the Service column. This corresponds to the status of the last deployment performed on the service.

                                            Here are all the possible deployment statuses for both environments and services:

                                          • QUEUED (temporary state).

                                          • BUILDING (temporary state).

                                          • BUILDING ERROR (final state).

                                          • DEPLOYING (temporary state).

                                          • DEPLOYMENT ERROR (final state).

                                          • CANCELLING BUILDING (temporary state).

                                          • CANCELLED (temporary state).

                                          • DEPLOYMENT OK (final state).

                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/index.html b/docs/using-qovery/index.html index 798aa018d7..a027f002f9 100644 --- a/docs/using-qovery/index.html +++ b/docs/using-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                          -
                                          Resources
                                            +
                                            Resources
                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/api-integration/index.html b/docs/using-qovery/integration/api-integration/index.html index ff0a6988cb..3ca298fd37 100644 --- a/docs/using-qovery/integration/api-integration/index.html +++ b/docs/using-qovery/integration/api-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                              - +
                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/container-registry/index.html b/docs/using-qovery/integration/container-registry/index.html index 42e733e994..a2ae7eade8 100644 --- a/docs/using-qovery/integration/container-registry/index.html +++ b/docs/using-qovery/integration/container-registry/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                              -

                                              Container Registry

                                              Qovery allows you to integrate with major container registries, enabling you to deploy your own container images or those available on public registries.

                                              You can control the container registry used by your teams directly within the Qovery Console.

                                              To know more about how to configure your container registry connection and the supported container registries, have a look at this section

                                              Resources
                                                +

                                                Container Registry

                                                Qovery allows you to integrate with major container registries, enabling you to deploy your own container images or those available on public registries.

                                                You can control the container registry used by your teams directly within the Qovery Console.

                                                To know more about how to configure your container registry connection and the supported container registries, have a look at this section

                                                Resources
                                                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html index d0175b2795..03dc68b536 100644 --- a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@

                                                  Circle CI

                                                  Using Circle CI with Qovery is super powerful and gives you the ability to manage the way that you want to deploy your applications. As the possibility are endless, I will share with you a couple of examples that you can use. Feel free to adapt them to your need.

                                                  Prerequisites

                                                  Before using the examples below, you need to:

                                                  1. Install the Qovery CLI.
                                                  2. Generate an API token via the CLI or the Console .
                                                  3. Set the environment variable Q_CLI_ACCESS_TOKEN or QOVERY_CLI_ACCESS_TOKEN (both are valid) with your API token. E.g. export QOVERY_CLI_ACCESS_TOKEN=your-api-token
                                                  4. You have turned off the Qovery Auto Deployment for every service that you want to deploy manually.

                                                  Jenkins Examples

                                                  Since Circle CI also provides a .yaml file to configure your pipeline. Refers to GitLab CI and GitHub Actions examples to learn how to configure your pipeline with Qovery.

                                                  Qovery CLI command examples

                                                  Deploy your application with a specific commit ID

                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  Deploy your multiple applications with a different commit ID

                                                  # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_1_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch
                                                  # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_2_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Deploy your multiple applications with a specific commit ID (monorepo)

                                                  # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Create a Preview Environment for your Pull-Request

                                                  Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                  # Clone your base environment
                                                  qovery environment clone \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --new-environment-name <your_new_environment_name>
                                                  # Change your application branch to the Pull-Request branch
                                                  qovery application update \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --application <your_app_name> \
                                                  --branch <your_pull_request_branch_name>
                                                  -
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  +
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  - + - + @@ -68,7 +68,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/github-actions/index.html b/docs/using-qovery/integration/continuous-integration/github-actions/index.html index 5d090e156d..018f7aa1ae 100644 --- a/docs/using-qovery/integration/continuous-integration/github-actions/index.html +++ b/docs/using-qovery/integration/continuous-integration/github-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -61,14 +61,14 @@
                                                  qovery container deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --container <your_qovery_container_name> \
                                                  --tag ${{ github.sha }} \
                                                  --watch

                                                  Qovery CLI command examples

                                                  Deploy your application with a specific commit ID

                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  Deploy your multiple applications with a different commit ID

                                                  # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_1_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch
                                                  # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_2_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Deploy your multiple applications with a specific commit ID (monorepo)

                                                  # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Create a Preview Environment for your Pull-Request

                                                  Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                  # Clone your base environment
                                                  qovery environment clone \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --new-environment-name <your_new_environment_name>
                                                  # Change your application branch to the Pull-Request branch
                                                  qovery application update \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --application <your_app_name> \
                                                  --branch <your_pull_request_branch_name>
                                                  -
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  +
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  - + - + @@ -76,7 +76,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html index 581e63dc09..cb38287042 100644 --- a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -56,14 +56,14 @@
                                                  deploy-image-with-qovery:
                                                  stage: deploy
                                                  script:
                                                  - curl -s https://get.qovery.com | bash # Download and install Qovery CLI
                                                  - |
                                                  qovery container deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --container <your_qovery_container_name> \
                                                  --tag $CI_COMMIT_SHORT_SHA \
                                                  --watch

                                                  Qovery CLI command examples

                                                  Deploy your application with a specific commit ID

                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  Deploy your multiple applications with a different commit ID

                                                  # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_1_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch
                                                  # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_2_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Deploy your multiple applications with a specific commit ID (monorepo)

                                                  # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Create a Preview Environment for your Pull-Request

                                                  Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                  # Clone your base environment
                                                  qovery environment clone \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --new-environment-name <your_new_environment_name>
                                                  # Change your application branch to the Pull-Request branch
                                                  qovery application update \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --application <your_app_name> \
                                                  --branch <your_pull_request_branch_name>
                                                  -
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  +
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  - + - + @@ -71,7 +71,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/index.html b/docs/using-qovery/integration/continuous-integration/index.html index 191f66490f..9bd3c6abbc 100644 --- a/docs/using-qovery/integration/continuous-integration/index.html +++ b/docs/using-qovery/integration/continuous-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                  -

                                                  Continuous Integration

                                                  Select the CI/CD system that you use today:

                                                  Gitlab CI
                                                  Circle CI
                                                  Github Actions
                                                  Jenkins

                                                  FAQ

                                                  I don't find my Continuous Integration platform, what should I do?

                                                  Your CI platform is probably going to be officially supported in the near future. In the meantime, you can use our Qovery CLI and make the integration yourself (it is super easy).

                                                  Do you need help?

                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                  +

                                                  Continuous Integration

                                                  Select the CI/CD system that you use today:

                                                  Gitlab CI
                                                  Circle CI
                                                  Github Actions
                                                  Jenkins

                                                  FAQ

                                                  I don't find my Continuous Integration platform, what should I do?

                                                  Your CI platform is probably going to be officially supported in the near future. In the meantime, you can use our Qovery CLI and make the integration yourself (it is super easy).

                                                  Do you need help?

                                                  Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/jenkins/index.html b/docs/using-qovery/integration/continuous-integration/jenkins/index.html index 131b690f23..45a5683d93 100644 --- a/docs/using-qovery/integration/continuous-integration/jenkins/index.html +++ b/docs/using-qovery/integration/continuous-integration/jenkins/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@

                                                  Jenkins

                                                  Using Jenkins with Qovery is super powerful and gives you the ability to manage the way that you want to deploy your applications. As the possibility are endless, I will share with you a couple of examples that you can use. Feel free to adapt them to your need.

                                                  Prerequisites

                                                  Before using the examples below, you need to:

                                                  1. Install the Qovery CLI.
                                                  2. Generate an API token via the CLI or the Console .
                                                  3. Set the environment variable Q_CLI_ACCESS_TOKEN or QOVERY_CLI_ACCESS_TOKEN (both are valid) with your API token. E.g. export QOVERY_CLI_ACCESS_TOKEN=your-api-token
                                                  4. You have turned off the Qovery Auto Deployment for every service that you want to deploy manually.

                                                  Jenkins Examples

                                                  Since Jenkins also provides a .yaml file to configure your pipeline. Refers to GitLab CI and GitHub Actions examples to learn how to configure your pipeline with Qovery.

                                                  Qovery CLI command examples

                                                  Deploy your application with a specific commit ID

                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  Deploy your multiple applications with a different commit ID

                                                  # deploy the application 1 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_1_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch
                                                  # deploy the application 2 and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --application <your_app_2_name> \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Deploy your multiple applications with a specific commit ID (monorepo)

                                                  # deploy the application 1, 2 and 3 with the same commit ID and wait for the deployment to be successful with the --watch argument
                                                  qovery application deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --applications "<app_1_name>, <app_2_name>, <app_3_name>" \
                                                  --commit-id <your_commit_id> \
                                                  --watch

                                                  This is also applicable for the qovery container deploy, qovery lifecycle deploy, and qovery cronjob deploy commands.

                                                  Create a Preview Environment for your Pull-Request

                                                  Qovery integrates automatically with GitHub, GitLab and Bitbucket to create a Preview Environment for each Pull-Request. But in case you want to control the creation of the Preview Environment manually, you can use the following commands:

                                                  # Clone your base environment
                                                  qovery environment clone \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_environment_name> \
                                                  --new-environment-name <your_new_environment_name>
                                                  # Change your application branch to the Pull-Request branch
                                                  qovery application update \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --application <your_app_name> \
                                                  --branch <your_pull_request_branch_name>
                                                  -
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  +
                                                  # Deploy your new environment
                                                  qovery environment deploy \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_new_environment_name> \
                                                  --watch

                                                  Delete a Preview Environment

                                                  qovery environment delete \
                                                  --organization <your_org_name> \
                                                  --project <your_project_name> \
                                                  --environment <your_preview_environment_name> \
                                                  --watch

                                                  Terraform

                                                  Do you want to include Terraform in your CI? Check out our Terraform documentation.

                                                  Any other examples?

                                                  Feel free to share your examples with us, and we'll be happy to share them with the community. Contact us on our forum.

                                                  - + - + @@ -68,7 +68,7 @@ - + diff --git a/docs/using-qovery/integration/git-repository/index.html b/docs/using-qovery/integration/git-repository/index.html index 58440a278a..f3a04a1897 100644 --- a/docs/using-qovery/integration/git-repository/index.html +++ b/docs/using-qovery/integration/git-repository/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                  -

                                                  Git Repository

                                                  Qovery allows you to integrate with the major git based software version control systems in order to build and deploy the applications available on your own repositories.

                                                  Today Qovery supports the following software version control systems:

                                                  • GitHub and GitHub Enterprise
                                                  • GitLab
                                                  • Bitbucket

                                                  Once connected to the Qovery Console via one of these three systems, Qovery will be able to access all the repositories connected to your account.

                                                  If you have special access needs, you can use the git provider tokens instead of your own git provider account. Have a look at the Managing git permission section to know more.

                                                  Resources
                                                    +

                                                    Git Repository

                                                    Qovery allows you to integrate with the major git based software version control systems in order to build and deploy the applications available on your own repositories.

                                                    Today Qovery supports the following software version control systems:

                                                    • GitHub and GitHub Enterprise
                                                    • GitLab
                                                    • Bitbucket

                                                    Once connected to the Qovery Console via one of these three systems, Qovery will be able to access all the repositories connected to your account.

                                                    If you have special access needs, you can use the git provider tokens instead of your own git provider account. Have a look at the Managing git permission section to know more.

                                                    Resources
                                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/index.html b/docs/using-qovery/integration/index.html index 1cbac9793e..fd1c25e7f7 100644 --- a/docs/using-qovery/integration/index.html +++ b/docs/using-qovery/integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                      -
                                                      Resources
                                                        +
                                                        Resources
                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/datadog/index.html b/docs/using-qovery/integration/monitoring/datadog/index.html index d75eabe2fa..88480ff211 100644 --- a/docs/using-qovery/integration/monitoring/datadog/index.html +++ b/docs/using-qovery/integration/monitoring/datadog/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                                                          Datadog

                                                          Datadog is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using Datadog (or another monitoring/observability platform). -Check out our tutorial to know how to integrate Datadog with Qovery.

                                                          Resources
                                                            +Check out our tutorial to know how to integrate Datadog with Qovery.

                                                            Resources
                                                              - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/index.html b/docs/using-qovery/integration/monitoring/index.html index bd92ed2ba1..d89ac72da1 100644 --- a/docs/using-qovery/integration/monitoring/index.html +++ b/docs/using-qovery/integration/monitoring/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                              -

                                                              Monitoring

                                                              Datadog
                                                              New Relic

                                                              FAQ

                                                              I don't find my Monitoring provider, what should I do?

                                                              Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your monitoring solution if their maintainers provide a Helm Chart.

                                                              If your monitoring platform provides a Helm Chart, then you can install it:

                                                              By using the Qovery Lifecycle Jobs

                                                              1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                              By using kubectl

                                                              1. Connect to your Qovery Kubernetes cluster.
                                                              2. Install the helm chart.

                                                              Do you need help?

                                                              Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                              +

                                                              Monitoring

                                                              Datadog
                                                              New Relic

                                                              FAQ

                                                              I don't find my Monitoring provider, what should I do?

                                                              Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your monitoring solution if their maintainers provide a Helm Chart.

                                                              If your monitoring platform provides a Helm Chart, then you can install it:

                                                              By using the Qovery Lifecycle Jobs

                                                              1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                              By using kubectl

                                                              1. Connect to your Qovery Kubernetes cluster.
                                                              2. Install the helm chart.

                                                              Do you need help?

                                                              Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/new-relic/index.html b/docs/using-qovery/integration/monitoring/new-relic/index.html index 533163d061..d38c98f333 100644 --- a/docs/using-qovery/integration/monitoring/new-relic/index.html +++ b/docs/using-qovery/integration/monitoring/new-relic/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                              -

                                                              New Relic

                                                              NewRelic is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using NewRelic (or another monitoring/observability platform).

                                                              Install NewRelic

                                                              To install NewRelic on Qovery, you have 2 choices:

                                                              By using the Qovery Lifecycle Jobs

                                                              1. Follow this guide to deploy your NewRelic Helm Chart with the Qovery Lifecycle Jobs.

                                                              By using kubectl

                                                              1. Connect to your Qovery Kubernetes cluster.
                                                              2. Use helm to install NewRelic.
                                                              +

                                                              New Relic

                                                              NewRelic is a recommended product to monitor and track down your application performance issue (APM). Qovery supports and recommends using NewRelic (or another monitoring/observability platform).

                                                              Install NewRelic

                                                              To install NewRelic on Qovery, you have 2 choices:

                                                              By using the Qovery Lifecycle Jobs

                                                              1. Follow this guide to deploy your NewRelic Helm Chart with the Qovery Lifecycle Jobs.

                                                              By using kubectl

                                                              1. Connect to your Qovery Kubernetes cluster.
                                                              2. Use helm to install NewRelic.
                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html index c0504f8ea3..0bed971685 100644 --- a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                              -

                                                              AWS Secrets Manager

                                                              AWS Secrets Manager is a service that helps you protect secrets needed to access your applications, services, and IT resources. The service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle.

                                                              Setup

                                                              API Keys

                                                              If your applications need to use AWS Secrets Manager with API Keys, you need to add your API Key in Qovery Secrets Manager.

                                                              Then you can use it in your application as a regular environment variable.

                                                              Assume Roles

                                                              Follow this guide to get assume roles on your Kubernetes cluster. Once it is set up, your application will be able to connect to AWS Secrets Manager using the AWS SDK.

                                                              Resources
                                                                +

                                                                AWS Secrets Manager

                                                                AWS Secrets Manager is a service that helps you protect secrets needed to access your applications, services, and IT resources. The service enables you to easily rotate, manage, and retrieve database credentials, API keys, and other secrets throughout their lifecycle.

                                                                Setup

                                                                API Keys

                                                                If your applications need to use AWS Secrets Manager with API Keys, you need to add your API Key in Qovery Secrets Manager.

                                                                Then you can use it in your application as a regular environment variable.

                                                                Assume Roles

                                                                Follow this guide to get assume roles on your Kubernetes cluster. Once it is set up, your application will be able to connect to AWS Secrets Manager using the AWS SDK.

                                                                Resources
                                                                  - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/doppler/index.html b/docs/using-qovery/integration/secret-manager/doppler/index.html index feaf5ee54f..bf3c63b5fb 100644 --- a/docs/using-qovery/integration/secret-manager/doppler/index.html +++ b/docs/using-qovery/integration/secret-manager/doppler/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                  -

                                                                  Doppler

                                                                  Doppler is a universal secrets manager that integrates with Qovery. Doppler allows you to store and manage your application secrets in a single place and access them from anywhere.

                                                                  Check out this Doppler documentation to integrate Qovery with your Doppler account.

                                                                  Resources
                                                                    +

                                                                    Doppler

                                                                    Doppler is a universal secrets manager that integrates with Qovery. Doppler allows you to store and manage your application secrets in a single place and access them from anywhere.

                                                                    Check out this Doppler documentation to integrate Qovery with your Doppler account.

                                                                    Resources
                                                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/index.html b/docs/using-qovery/integration/secret-manager/index.html index a8c5b06942..750fc0afef 100644 --- a/docs/using-qovery/integration/secret-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                      -

                                                                      Secret Manager

                                                                      Doppler
                                                                      AWS Secrets Manager

                                                                      FAQ

                                                                      I don't find my Secret Manager provider, what should I do?

                                                                      Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your secret manager if their maintainers provide a Helm Chart.

                                                                      If your secret manager provides a Helm Chart, then you can install it:

                                                                      By using the Qovery Lifecycle Jobs

                                                                      1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                      By using kubectl

                                                                      1. Connect to your Qovery Kubernetes cluster.
                                                                      2. Install the helm chart.

                                                                      Do you need help?

                                                                      Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                      +

                                                                      Secret Manager

                                                                      Doppler
                                                                      AWS Secrets Manager

                                                                      FAQ

                                                                      I don't find my Secret Manager provider, what should I do?

                                                                      Basically, Qovery relies on Kubernetes to run your apps. Meaning, Qovery will support your secret manager if their maintainers provide a Helm Chart.

                                                                      If your secret manager provides a Helm Chart, then you can install it:

                                                                      By using the Qovery Lifecycle Jobs

                                                                      1. Follow this guide to deploy your Helm Chart with the Qovery Lifecycle Jobs.

                                                                      By using kubectl

                                                                      1. Connect to your Qovery Kubernetes cluster.
                                                                      2. Install the helm chart.

                                                                      Do you need help?

                                                                      Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/slack/index.html b/docs/using-qovery/integration/slack/index.html index 57f5b316ff..4d3a0e5703 100644 --- a/docs/using-qovery/integration/slack/index.html +++ b/docs/using-qovery/integration/slack/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                      -

                                                                      Slack

                                                                      If you'd like to automatically notify your team on a Slack workspace whenever a change has occurred on your apps, this integration will help you out. You can choose which actions should trigger messages on your Slack workspace.

                                                                      Here are the steps that we are going through:

                                                                      1. Create a Slack App
                                                                      2. Create a Webhook
                                                                      3. Setup a Webhook in Qovery
                                                                      4. Try it!

                                                                      1. Create a Slack App

                                                                      1. Go to the Slack page to create apps and create a new app:

                                                                        Create a slack app - step 1

                                                                      2. Create a Slack app from scratch:

                                                                        Create a slack app - step 2

                                                                      3. Call it Qovery and connect it to the workspace of your choice:

                                                                        Create a slack app - step 3

                                                                      4. Feel free to use an image from here as the app's logo:

                                                                        Create a slack app - step 4

                                                                      2. Create a Webhook

                                                                      1. Go to the Incoming Webhooks page for your newly-created app and toggle Activate Incoming Webhooks to turn it on:

                                                                        Create a webhook integration on Slack - step 1

                                                                      2. Click on Add New Webhook to Workspace:

                                                                        Create a webhook integration on Slack - step 2

                                                                      3. Select the channel that the notifications will be posted to:

                                                                        Create a webhook integration on Slack - step 3

                                                                      4. Copy the webhook URL:

                                                                        Create a webhook integration on Slack - step 4

                                                                      3. Create a Webhook in Qovery

                                                                      To create a webhook in Qovery, have a look at this section. For the URL, use the Slack Webhook URL that you got from the previous step.

                                                                      Considerations

                                                                      • You can have multiple webhooks targeting different Slack channels.
                                                                      • You can specify the events that you want to receive. E.g. if you just want to be notified when a deployment failed, then use "events": ["DEPLOYMENT_FAILURE"]. All the events and the description are available on our Webhook section.
                                                                      • You can turn off or delete your webhooks at any time from the webhook section.

                                                                      Check out this page for further details on how to use and configure the WebHook.

                                                                      4. Try it!

                                                                      Launch a deployment with Qovery, and you will see a message like the one below appearing in your Slack channel 🎉

                                                                      Open a thread on our forum if you have any questions.

                                                                      +

                                                                      Slack

                                                                      If you'd like to automatically notify your team on a Slack workspace whenever a change has occurred on your apps, this integration will help you out. You can choose which actions should trigger messages on your Slack workspace.

                                                                      Here are the steps that we are going through:

                                                                      1. Create a Slack App
                                                                      2. Create a Webhook
                                                                      3. Setup a Webhook in Qovery
                                                                      4. Try it!

                                                                      1. Create a Slack App

                                                                      1. Go to the Slack page to create apps and create a new app:

                                                                        Create a slack app - step 1

                                                                      2. Create a Slack app from scratch:

                                                                        Create a slack app - step 2

                                                                      3. Call it Qovery and connect it to the workspace of your choice:

                                                                        Create a slack app - step 3

                                                                      4. Feel free to use an image from here as the app's logo:

                                                                        Create a slack app - step 4

                                                                      2. Create a Webhook

                                                                      1. Go to the Incoming Webhooks page for your newly-created app and toggle Activate Incoming Webhooks to turn it on:

                                                                        Create a webhook integration on Slack - step 1

                                                                      2. Click on Add New Webhook to Workspace:

                                                                        Create a webhook integration on Slack - step 2

                                                                      3. Select the channel that the notifications will be posted to:

                                                                        Create a webhook integration on Slack - step 3

                                                                      4. Copy the webhook URL:

                                                                        Create a webhook integration on Slack - step 4

                                                                      3. Create a Webhook in Qovery

                                                                      To create a webhook in Qovery, have a look at this section. For the URL, use the Slack Webhook URL that you got from the previous step.

                                                                      Considerations

                                                                      • You can have multiple webhooks targeting different Slack channels.
                                                                      • You can specify the events that you want to receive. E.g. if you just want to be notified when a deployment failed, then use "events": ["DEPLOYMENT_FAILURE"]. All the events and the description are available on our Webhook section.
                                                                      • You can turn off or delete your webhooks at any time from the webhook section.

                                                                      Check out this page for further details on how to use and configure the WebHook.

                                                                      4. Try it!

                                                                      Launch a deployment with Qovery, and you will see a message like the one below appearing in your Slack channel 🎉

                                                                      Open a thread on our forum if you have any questions.

                                                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/integration/terraform/index.html b/docs/using-qovery/integration/terraform/index.html index 4bb3c5f45e..aeada01eb4 100644 --- a/docs/using-qovery/integration/terraform/index.html +++ b/docs/using-qovery/integration/terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                                                                      Terraform

                                                                      Terraform is an open-source infrastructure as code software (IaC) tool that provides a consistent CLI workflow to manage hundreds of cloud services. Terraform codifies cloud APIs into declarative configuration files.

                                                                      Terraform can be used in 2 context:

                                                                      1. Qovery can be controlled via Terraform. This allows you to automate the creation of your organization, project, clusters, applications and environments (and more).
                                                                      2. Qovery can be used to deploy your Terraform code. This allows you to automate the deployment of your infrastructure.

                                                                      Deploy Qovery with Terraform

                                                                      Qovery integrates with Terraform to create a complete workflow with a strong developer and operations experience for the different teams from development to critical production applications. By integrating Terraform with Qovery, your team can quickly implement governance at scale while drastically improving the developer experience when deploying and managing applications.

                                                                      Examples

                                                                      Check out our Terraform examples here.

                                                                      Terraform Exporter

                                                                      Qovery allows you to export your environment as a Terraform Manifest. Check the Terraform Exporter documentation to know more.

                                                                      Resources

                                                                      Deploy your Terraform code with Qovery

                                                                      Qovery can deploy your Terraform code. It's very useful when you want to deploy your own cloud resources. For example, you can deploy your own databases, lambdas, brokers etc... -To do so, you need to use the Lifecycle Jobs feature.

                                                                      Examples

                                                                      Check out our Terraform examples here.

                                                                      Resources

                                                                      Do you need help?

                                                                      Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                      +To do so, you need to use the Lifecycle Jobs feature.

                                                                      Examples

                                                                      Check out our Terraform examples here.

                                                                      Resources

                                                                      Do you need help?

                                                                      Feel free to open a thread on our Community Forum. We will be happy to help you.

                                                                      - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/integration/webhook/index.html b/docs/using-qovery/integration/webhook/index.html index e39c511686..d9f66a2211 100644 --- a/docs/using-qovery/integration/webhook/index.html +++ b/docs/using-qovery/integration/webhook/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                      -

                                                                      Webhooks

                                                                      Qovery allows you to create webhooks at organization-level so that, when an event happens on an environment within your organization, you can get notified on external applications.

                                                                      This is useful for the following use cases:

                                                                      • integrate Qovery with an exeternal tool that needs to be informed when the deployment status changes.
                                                                      • share within a slack channel any deployment status change for your environments.

                                                                      You can trigger webhooks when:

                                                                      • A deployment has started in the environment.
                                                                      • A deployment has been successful in the environment.
                                                                      • A deployment has been cancelled in the environment.
                                                                      • A deployment has failed in the environment.

                                                                      Two types of webhooks can be created within Qovery:

                                                                      • Standard: this type of webhook will send a payload to the defined url with a Qovery proprietary format (check out our Webhook payload documentation for more information on the payload format)
                                                                      • Slack: this type of webhook will send pre-formatted messages using the Slack messaging syntax. Have a look at our Slack integration for more information on the integration.

                                                                      Creating a Webhook

                                                                      To create a webhook via the Qovery Console:

                                                                      1. Open the Organization settings and the Webhook section

                                                                        Access webhook section

                                                                      2. Press the Add New button.

                                                                      3. Enter the following parameters:

                                                                        ParameterUsage
                                                                        URLThe webhook URL provided by the external application you want to receive notifications on.
                                                                        "kind"Specify which kind of webhook you want to create. At the moment, you can specify : "kind": "STANDARD" to create a generic webhook, or "kind": "SLACK" to create a Slack webhook.
                                                                        "description"(Optional) Enter a self-explanatory description of what your webhook does. In the example, "description": "slack notifications" clearly states that the webhook triggers notifications on Slack.
                                                                        "secret"(Optional) Specify the secret to be used when calling the specified webhook URL
                                                                        "events"List all the events you want to be notified about.
                                                                        "environment_types_filter"(Optional) If you only want to get notified about events happening on one or several specific type(s) or environment(s), you can provide a list using the following possible values: "PRODUCTION", "DEVELOPMENT", "STAGING" and "PREVIEW".

                                                                        Please note that "environment_types_filter" can be used together with "project_names_filter".
                                                                        "project_names_filter"(Optional) If you only want to get notified about events happening in one or several specific projects, you can provide a list of project names that will act as a filter. Notifications will then only be triggered for projects whose names match or, if you're using a wildcard, start with one of the values from your list.

                                                                        Please note that "project_names_filter" is not case-sensitive, accepts wildcards, and can be used together with "environment_types_filter".

                                                                        And press the Create button.

                                                                      Editing a Webhook

                                                                      From the webhook page, press the Wheel button to edit the webhook.

                                                                      If you want to temporally disable the webhook, you can disable it by clicking on the Enable switch.

                                                                      Delete a Webhook

                                                                      From the webhook page, press the Bin button to delete the webhook. A confirmation modal will ask you to confirm the operation.

                                                                      Webhook payload

                                                                      Here is an example of a Qovery Webhook standard payload. The payload is sent as a POST request to the specified URL.

                                                                      Deployment payload

                                                                      This payload is sent when a deployment starts, is cancelled, is successful or fails.

                                                                      {
                                                                      "created_at": "2020-10-04T14:00:00.000Z",
                                                                      "event_type": "DEPLOYMENT_STARTED|DEPLOYMENT_CANCELLED|DEPLOYMENT_SUCCESSFUL|DEPLOYMENT_FAILURE",
                                                                      "payload_type": "DEPLOYMENT", // no other option at the moment
                                                                      "payload_id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                      "payload": {
                                                                      "id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "organization": {...}, // doc: https://api-doc.qovery.com/#tag/Organization-Main-Calls/operation/getOrganization
                                                                      "project": {...}, // doc: https://api-doc.qovery.com/#tag/Project-Main-Calls/operation/getProject
                                                                      "environment": {...}, // doc: https://api-doc.qovery.com/#tag/Environment-Main-Calls/operation/getEnvironment
                                                                      "applications": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "application": {...} // doc: https://api-doc.qovery.com/#tag/Application-Main-Calls/operation/getApplication
                                                                      }
                                                                      ],
                                                                      "databases": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "database": {...} // doc: https://api-doc.qovery.com/#tag/Database-Main-Calls/operation/getDatabase
                                                                      }
                                                                      ],
                                                                      "containers": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "container": {...} // doc: https://api-doc.qovery.com/#tag/Container-Main-Calls/operation/getContainer
                                                                      }
                                                                      ],
                                                                      "jobs": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "job": {...} // doc: https://api-doc.qovery.com/#tag/Job-Main-Calls/operation/getJob
                                                                      }
                                                                      ],
                                                                      "logs": [...] // doc: https://api-doc.qovery.com/#tag/Environment-Logs/operation/listEnvironmentLog
                                                                      }
                                                                      }
                                                                      +

                                                                      Webhooks

                                                                      Qovery allows you to create webhooks at organization-level so that, when an event happens on an environment within your organization, you can get notified on external applications.

                                                                      This is useful for the following use cases:

                                                                      • integrate Qovery with an exeternal tool that needs to be informed when the deployment status changes.
                                                                      • share within a slack channel any deployment status change for your environments.

                                                                      You can trigger webhooks when:

                                                                      • A deployment has started in the environment.
                                                                      • A deployment has been successful in the environment.
                                                                      • A deployment has been cancelled in the environment.
                                                                      • A deployment has failed in the environment.

                                                                      Two types of webhooks can be created within Qovery:

                                                                      • Standard: this type of webhook will send a payload to the defined url with a Qovery proprietary format (check out our Webhook payload documentation for more information on the payload format)
                                                                      • Slack: this type of webhook will send pre-formatted messages using the Slack messaging syntax. Have a look at our Slack integration for more information on the integration.

                                                                      Creating a Webhook

                                                                      To create a webhook via the Qovery Console:

                                                                      1. Open the Organization settings and the Webhook section

                                                                        Access webhook section

                                                                      2. Press the Add New button.

                                                                      3. Enter the following parameters:

                                                                        ParameterUsage
                                                                        URLThe webhook URL provided by the external application you want to receive notifications on.
                                                                        "kind"Specify which kind of webhook you want to create. At the moment, you can specify : "kind": "STANDARD" to create a generic webhook, or "kind": "SLACK" to create a Slack webhook.
                                                                        "description"(Optional) Enter a self-explanatory description of what your webhook does. In the example, "description": "slack notifications" clearly states that the webhook triggers notifications on Slack.
                                                                        "secret"(Optional) Specify the secret to be used when calling the specified webhook URL
                                                                        "events"List all the events you want to be notified about.
                                                                        "environment_types_filter"(Optional) If you only want to get notified about events happening on one or several specific type(s) or environment(s), you can provide a list using the following possible values: "PRODUCTION", "DEVELOPMENT", "STAGING" and "PREVIEW".

                                                                        Please note that "environment_types_filter" can be used together with "project_names_filter".
                                                                        "project_names_filter"(Optional) If you only want to get notified about events happening in one or several specific projects, you can provide a list of project names that will act as a filter. Notifications will then only be triggered for projects whose names match or, if you're using a wildcard, start with one of the values from your list.

                                                                        Please note that "project_names_filter" is not case-sensitive, accepts wildcards, and can be used together with "environment_types_filter".

                                                                        And press the Create button.

                                                                      Editing a Webhook

                                                                      From the webhook page, press the Wheel button to edit the webhook.

                                                                      If you want to temporally disable the webhook, you can disable it by clicking on the Enable switch.

                                                                      Delete a Webhook

                                                                      From the webhook page, press the Bin button to delete the webhook. A confirmation modal will ask you to confirm the operation.

                                                                      Webhook payload

                                                                      Here is an example of a Qovery Webhook standard payload. The payload is sent as a POST request to the specified URL.

                                                                      Deployment payload

                                                                      This payload is sent when a deployment starts, is cancelled, is successful or fails.

                                                                      {
                                                                      "created_at": "2020-10-04T14:00:00.000Z",
                                                                      "event_type": "DEPLOYMENT_STARTED|DEPLOYMENT_CANCELLED|DEPLOYMENT_SUCCESSFUL|DEPLOYMENT_FAILURE",
                                                                      "payload_type": "DEPLOYMENT", // no other option at the moment
                                                                      "payload_id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                      "payload": {
                                                                      "id": "5f7a5b0c-7b7d-4b0a-8b0a-5f7a5b0c7b7d",
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "organization": {...}, // doc: https://api-doc.qovery.com/#tag/Organization-Main-Calls/operation/getOrganization
                                                                      "project": {...}, // doc: https://api-doc.qovery.com/#tag/Project-Main-Calls/operation/getProject
                                                                      "environment": {...}, // doc: https://api-doc.qovery.com/#tag/Environment-Main-Calls/operation/getEnvironment
                                                                      "applications": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "application": {...} // doc: https://api-doc.qovery.com/#tag/Application-Main-Calls/operation/getApplication
                                                                      }
                                                                      ],
                                                                      "databases": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "database": {...} // doc: https://api-doc.qovery.com/#tag/Database-Main-Calls/operation/getDatabase
                                                                      }
                                                                      ],
                                                                      "containers": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "container": {...} // doc: https://api-doc.qovery.com/#tag/Container-Main-Calls/operation/getContainer
                                                                      }
                                                                      ],
                                                                      "jobs": [
                                                                      {
                                                                      "current_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "desired_status": "ENUM_TYPE", // doc: https://github.com/Qovery/qovery-openapi-spec/blob/main/src/schemas/enums/State.yaml
                                                                      "job": {...} // doc: https://api-doc.qovery.com/#tag/Job-Main-Calls/operation/getJob
                                                                      }
                                                                      ],
                                                                      "logs": [...] // doc: https://api-doc.qovery.com/#tag/Environment-Logs/operation/listEnvironmentLog
                                                                      }
                                                                      }
                                                                      - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/interface/cli/index.html b/docs/using-qovery/interface/cli/index.html index dd3aeb82fc..1da27e128d 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -77,14 +77,14 @@
                                                                      # deployment stage 4: "APPLICATION DEFAULT"
                                                                      Rename me to avoid default/legacy ordering
                                                                      Type | Name
                                                                      APPLICATION | Backend
                                                                      APPLICATION | Frontend
                                                                      APPLICATION | Pablo Backend App
                                                                      APPLICATION | API gateway
                                                                      -
                                                                      ~ $ qovery environment deploy
                                                                      Environment is deploying!

                                                                      Managing the Deployment Pipeline

                                                                      In the following sections we will describe how to modify the Deployment Pipeline.

                                                                      List stages

                                                                      You can list all the stages of your environment by using the following command:

                                                                      qovery environment stage list

                                                                      Add a stage

                                                                      You can add a new stage by using the following command:

                                                                      qovery environment stage create -n <name> -d <description>

                                                                      Note that the stage will be added at the end of the pipeline (the highest number)

                                                                      Modify a stage

                                                                      You can modify a stage by using the following command:

                                                                      qovery environment stage edit -n <original name> --new-name <new name> --new-description <new description>

                                                                      Delete a stage

                                                                      You can modify a stage by using the following command:

                                                                      qovery environment stage delete -n <name>

                                                                      Change stage for a service

                                                                      You can modify the stage associated to a service by using the following command:

                                                                      qovery environment stage move -n <service name> --stage <stage name>

                                                                      Support

                                                                      Do you have any issues with Qovery CLI? Open an issue.

                                                                      +
                                                                      ~ $ qovery environment deploy
                                                                      Environment is deploying!

                                                                      Managing the Deployment Pipeline

                                                                      In the following sections we will describe how to modify the Deployment Pipeline.

                                                                      List stages

                                                                      You can list all the stages of your environment by using the following command:

                                                                      qovery environment stage list

                                                                      Add a stage

                                                                      You can add a new stage by using the following command:

                                                                      qovery environment stage create -n <name> -d <description>

                                                                      Note that the stage will be added at the end of the pipeline (the highest number)

                                                                      Modify a stage

                                                                      You can modify a stage by using the following command:

                                                                      qovery environment stage edit -n <original name> --new-name <new name> --new-description <new description>

                                                                      Delete a stage

                                                                      You can modify a stage by using the following command:

                                                                      qovery environment stage delete -n <name>

                                                                      Change stage for a service

                                                                      You can modify the stage associated to a service by using the following command:

                                                                      qovery environment stage move -n <service name> --stage <stage name>

                                                                      Support

                                                                      Do you have any issues with Qovery CLI? Open an issue.

                                                                      - + - + @@ -92,7 +92,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index 7c5e1e4ba9..23cf51f2ef 100644 --- a/docs/using-qovery/interface/index.html +++ b/docs/using-qovery/interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                      -

                                                                      Interface

                                                                      In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.

                                                                      Cli
                                                                      Rest api
                                                                      Terraform interface
                                                                      Web interface
                                                                      Resources
                                                                        +

                                                                        Interface

                                                                        In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.

                                                                        Cli
                                                                        Rest api
                                                                        Terraform interface
                                                                        Web interface
                                                                        Resources
                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/interface/rest-api/index.html b/docs/using-qovery/interface/rest-api/index.html index 6381bf3023..2c63b39578 100644 --- a/docs/using-qovery/interface/rest-api/index.html +++ b/docs/using-qovery/interface/rest-api/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          REST API

                                                                          Use the Qovery REST API to programmatically create infrastructure and deploy your applications. The only limit is your imagination. Find the Qovery API documentation and the OpenAPI spec to generate your own Qovery client with your favorite programming language.

                                                                          API clients

                                                                          Here is the list of clients available to use the Qovery Web API.

                                                                          LanguageLink
                                                                          Golangsource
                                                                          Pythonsource
                                                                          Typescriptsource
                                                                          Javascriptsource

                                                                          Generate an API token

                                                                          You can generate an API token from the Qovery CLI or via the Qovery Web Console.

                                                                          API Documentation

                                                                          The API documentation is available here

                                                                          +

                                                                          REST API

                                                                          Use the Qovery REST API to programmatically create infrastructure and deploy your applications. The only limit is your imagination. Find the Qovery API documentation and the OpenAPI spec to generate your own Qovery client with your favorite programming language.

                                                                          API clients

                                                                          Here is the list of clients available to use the Qovery Web API.

                                                                          LanguageLink
                                                                          Golangsource
                                                                          Pythonsource
                                                                          Typescriptsource
                                                                          Javascriptsource

                                                                          Generate an API token

                                                                          You can generate an API token from the Qovery CLI or via the Qovery Web Console.

                                                                          API Documentation

                                                                          The API documentation is available here

                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/interface/terraform-interface/index.html b/docs/using-qovery/interface/terraform-interface/index.html index 58a231c6cf..a6dd1b9b2a 100644 --- a/docs/using-qovery/interface/terraform-interface/index.html +++ b/docs/using-qovery/interface/terraform-interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          - +
                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/interface/web-interface/index.html b/docs/using-qovery/interface/web-interface/index.html index fa7d589ec2..45f1dd4db0 100644 --- a/docs/using-qovery/interface/web-interface/index.html +++ b/docs/using-qovery/interface/web-interface/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          Web interface

                                                                          Qovery provides a management console which allows you to interact with your projects and manage your environments.

                                                                          First sign-up

                                                                          Sign in to the Qovery web interface.

                                                                          Qovery Sign-up page

                                                                          Deploy your first application

                                                                          Now that you have signed up on the web interface, check out how to deploy your first application

                                                                          +

                                                                          Web interface

                                                                          Qovery provides a management console which allows you to interact with your projects and manage your environments.

                                                                          First sign-up

                                                                          Sign in to the Qovery web interface.

                                                                          Qovery Sign-up page

                                                                          Deploy your first application

                                                                          Now that you have signed up on the web interface, check out how to deploy your first application

                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/maintenance/index.html b/docs/using-qovery/maintenance/index.html index 5a729186e0..a6b30c3f83 100644 --- a/docs/using-qovery/maintenance/index.html +++ b/docs/using-qovery/maintenance/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -66,14 +66,14 @@
                                                                          echo "[+] Wait for the cluster deployment to be done"
                                                                          sleep 15
                                                                          while [ "$cluster_status" != "RUNNING" ]; do
                                                                          sleep 60
                                                                          cluster_status=$(curl -s -X GET -H "Content-type: application/json" -H "Authorization: Token $qovery_token" "https://api.qovery.com/organization/$organization_id/cluster/$cluster_id/status" | jq -r '.status')
                                                                          echo " -> $(date "+%H:%M") Waiting for the cluster deployment to be done. Current status: $cluster_status..."
                                                                          # Ensure the cluster is in a valid state
                                                                          if [ "$cluster_status" != "DEPLOYMENT_QUEUED" ] && [ "$cluster_status" != "DEPLOYING" ] && [ "$cluster_status" != "DEPLOYED" ] && [ "$cluster_status" != "RUNNING" ]; then
                                                                          echo "ERROR: the cluster does not have a correct status, please check cluster logs and fix the issue. Then delete the key $old_aws_access_key and retry"
                                                                          exit 1
                                                                          fi
                                                                          if [ $(date +"%s") -gt $max_time ]; then
                                                                          echo "ERROR: timeout reached, the cluster is not deployed yet, please check cluster logs and fix the cluster issue. Then delete the key $new_aws_access_key and retry"
                                                                          exit 1
                                                                          fi
                                                                          done
                                                                          echo "[+] Waiting up to 2h to ensure all ongoing deployments are done ($(date -d @$max_time))"
                                                                          while [ $(date +"%s") -lt $max_time ]; do
                                                                          sleep 10
                                                                          done
                                                                          echo "[+] Delete the old Access Key"
                                                                          aws iam delete-access-key --access-key-id $old_aws_access_key --user-name $aws_iam_username
                                                                          -
                                                                          echo "[+] Done"

                                                                          You will see the following output:

                                                                          [+] Ensure there is only one Access Key
                                                                          -> Current (future old) key detected: xxx
                                                                          [+] Create a new Access Key
                                                                          -> Successfully created a new access key: yyy
                                                                          [+] Update Qovery credentials
                                                                          [+] Deploy the cluster with the new credentials
                                                                          [+] Wait for the cluster deployment to be done
                                                                          -> 15:04 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:05 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:06 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:07 Waiting for the cluster deployment to be done. Current status: RUNNING...
                                                                          [+] Waiting up to 2h to ensure all ongoing deployments are done (Fri Nov 11 03:22:57 PM CET 2022)
                                                                          [+] Delete the old Access Key
                                                                          [+] Done
                                                                          +
                                                                          echo "[+] Done"

                                                                          You will see the following output:

                                                                          [+] Ensure there is only one Access Key
                                                                          -> Current (future old) key detected: xxx
                                                                          [+] Create a new Access Key
                                                                          -> Successfully created a new access key: yyy
                                                                          [+] Update Qovery credentials
                                                                          [+] Deploy the cluster with the new credentials
                                                                          [+] Wait for the cluster deployment to be done
                                                                          -> 15:04 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:05 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:06 Waiting for the cluster deployment to be done. Current status: DEPLOYING...
                                                                          -> 15:07 Waiting for the cluster deployment to be done. Current status: RUNNING...
                                                                          [+] Waiting up to 2h to ensure all ongoing deployments are done (Fri Nov 11 03:22:57 PM CET 2022)
                                                                          [+] Delete the old Access Key
                                                                          [+] Done
                                                                          - + - + @@ -81,7 +81,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/application-troubleshoot/index.html b/docs/using-qovery/troubleshoot/application-troubleshoot/index.html index 70dba3eb48..3c4a46a08c 100644 --- a/docs/using-qovery/troubleshoot/application-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/application-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@

                                                                          Application Troubleshoot

                                                                          Within this section you will find the common errors you might encounter when deploying or running your applications with Qovery

                                                                          Liveness/Readiness failed, connect: connection refused

                                                                          If you encounter this kind of error on the Liveness and/or Readiness probe during an application deployment phase:

                                                                          Readiness probe failed: dial tcp 100.64.2.230:80: connect: connection refused
                                                                          Liveness probe failed: dial tcp 100.64.2.230:80: connect: connection refused

                                                                          That means your application may not able to start, or has started but takes too many time to start.

                                                                          Here are the possible reasons for starting issues you should check:

                                                                          1. The declared port on Qovery (here 80), does not match your application's opening port. Check your application port, and set the correct port to your application configuration.

                                                                          2. Ensure your application is not listening onto localhost (127.0.0.1) or a specific IP. But set it to all interfaces (0.0.0.0).

                                                                          3. Your application takes too long to start and the liveness probe is flagging your application as unhealthy. Try to increase the Liveness Initial Delay parameter, to inform Kubernetes to delay the time before checking your application availability. Set it for example to 120.

                                                                          My app is crashing, how do I connect to investigate?

                                                                          Goal: You want to connect to your container's application to debug your application

                                                                          First, try to use qovery shell command from the Qovery CLI. It's a safe method to connect to your container and debug your application.

                                                                          If your app is crashing in the first seconds, you'll lose the connection to your container, making the debug almost impossible, then continue reading.

                                                                          Your app is crashing very quickly, here is how to keep the full control of your container:

                                                                          1. Temporary delete the application port from your application configuration. This to avoid Kubernetes to restart the container when the port is not open.

                                                                          2. Into your Dockerfile, comment your EXEC or ENTRYPOINT and add a way to make your container sleep. For example:

                                                                            #CMD ["npm", "run", "start"]
                                                                            CMD ["tail", "-f", "/dev/null"]

                                                                            Commit and push your changes to trigger a new deployment (trigger it manually from the Qovery console if it's not the case).

                                                                          3. Once the deployment done, you can use qovery shell command to connect to your container and debug.

                                                                          0/x nodes are available: x insufficient cpu/ram

                                                                          If you encounter this kind of error during an application deployment phase:

                                                                          0/1 nodes are available: 1 Insufficient cpu (or ram).

                                                                          That means that we cannot reserve the necessary resources to deploy your application or database on your cluster due to an insufficient amount of CPU or RAM. Moreover, the cluster auto-scaler cannot be triggered since it has already reached the maximum number of instances for your cluster (valid only for Managed Kubernetes clusters).

                                                                          Here are the possible solutions you can apply:

                                                                          • Reduce the resources (CPU/RAM) allocated to your existing/new service. Have a review of the deployed services and see if you can save up some resources by reducing their CPU/RAM setting. If you are using a K3S (EC2) cluster, stop your service before changing the settings. Remember to re-deploy the applications when you edit the resource. Have a look at the resource section for more information.

                                                                          • Select a bigger instance type for your cluster (in terms of CPU/RAM). By increasing it, it will unlock the deployment of your application (since new resources have been added). Check your cluster settings, and change the instance type of your cluster.

                                                                          • (only for Managed kubernets clusters) Increase the maximum number of nodes of your cluster. By increasing it, it will allow the cluster autoscaler to add a new node and allow the deployment of your application (since new resources have been added). Check your cluster settings, and increase the maximum number of nodes of your cluster.

                                                                          Please note that application resource consumption and application resource allocation are not the same. Have a look at the resource section for more information

                                                                          Can't get my SSL / TLS Certificate

                                                                          When a custom domain is added to an application, it must be configured on your side according to the instructions displayed:

                                                                          Custom Domain Configuration

                                                                          You can check that your custom domain is well configured using the following command: dig CNAME ${YOUR_CUSTOM_DOMAIN} +short. On the domain above, we can check the configuration is correct on Google DNS servers:

                                                                          $ dig CNAME new.console.qovery.com +short @8.8.8.8
                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.

                                                                          It should return the same value as the one configured on Qovery. Otherwise, be patient (some minutes depending on DNS registrars) and ensure the DNS modification has been applied. Finally, you can check the content of the CNAME with:

                                                                          $ dig A new.console.qovery.com +short @8.8.8.8
                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.
                                                                          ac8ad80d15e534c549ee10c87aaf82b4-bba68d8f58c6755d.elb.us-east-2.amazonaws.com.
                                                                          3.19.99.1
                                                                          18.188.137.104

                                                                          We can see the destination contains other elements, indicating that the CNAME is pointing to an endpoint and correctly configured.

                                                                          The SSL / TLS Certificate is generated for the whole group of custom domains you define:

                                                                          • if one custom domain is misconfigured: the certificate can't be generated
                                                                          • if the certificate has been generated once, but later one custom domain configuration is changed and misconfigured: the certificate can't be generated again

                                                                          If you experience some invalid certificate, here is how you can fix the issue:

                                                                          1. Identify the misconfigured custom domain(s) in your application settings.

                                                                          2. Fix or delete them.

                                                                          3. Redeploy your impacted application(s).

                                                                          Git Submodules - Error while checkout submodules

                                                                          Error Message:

                                                                          Error message: Error while checkout submodules from repository https://github.com/user/repo.git.
                                                                          Error: Error { code: -1, klass: 23, message: "authentication required but no callback set" }

                                                                          There are limitations with the support for Git Submodules. Only public Submodules over HTTPS or private with embedded basic authentication are supported.

                                                                          Solution: Follow our Git Submodules guide to make your application working with Git Submodules on Qovery.

                                                                          Container image xxxxxx.xxx.xx failed to build: Cannot build Application "zXXXXXXXXX" due to an error with docker: Timeout

                                                                          This error shows up in your deployment logs when the application takes more time to build than the maximum build allowed time (today 1800 seconds).

                                                                          If your application needs more time to build, increase parameter build.timeout_max_sec within your application advanced settings and trigger again the deployment.

                                                                          +If you don't make a copy, doing this procedure directly on the PRODUCTION application will lead to a downtime in your service. Be sure of what you're doing before going ahead!

                                                                          Your app is crashing very quickly, here is how to keep the full control of your container:

                                                                          1. Temporary delete the application port from your application configuration. This to avoid Kubernetes to restart the container when the port is not open.

                                                                          2. Into your Dockerfile, comment your EXEC or ENTRYPOINT and add a way to make your container sleep. For example:

                                                                            #CMD ["npm", "run", "start"]
                                                                            CMD ["tail", "-f", "/dev/null"]

                                                                            Commit and push your changes to trigger a new deployment (trigger it manually from the Qovery console if it's not the case).

                                                                          3. Once the deployment done, you can use qovery shell command to connect to your container and debug.

                                                                          0/x nodes are available: x insufficient cpu/ram

                                                                          If you encounter this kind of error during an application deployment phase:

                                                                          0/1 nodes are available: 1 Insufficient cpu (or ram).

                                                                          That means that we cannot reserve the necessary resources to deploy your application or database on your cluster due to an insufficient amount of CPU or RAM. Moreover, the cluster auto-scaler cannot be triggered since it has already reached the maximum number of instances for your cluster (valid only for Managed Kubernetes clusters).

                                                                          Here are the possible solutions you can apply:

                                                                          • Reduce the resources (CPU/RAM) allocated to your existing/new service. Have a review of the deployed services and see if you can save up some resources by reducing their CPU/RAM setting. If you are using a K3S (EC2) cluster, stop your service before changing the settings. Remember to re-deploy the applications when you edit the resource. Have a look at the resource section for more information.

                                                                          • Select a bigger instance type for your cluster (in terms of CPU/RAM). By increasing it, it will unlock the deployment of your application (since new resources have been added). Check your cluster settings, and change the instance type of your cluster.

                                                                          • (only for Managed kubernets clusters) Increase the maximum number of nodes of your cluster. By increasing it, it will allow the cluster autoscaler to add a new node and allow the deployment of your application (since new resources have been added). Check your cluster settings, and increase the maximum number of nodes of your cluster.

                                                                          Please note that application resource consumption and application resource allocation are not the same. Have a look at the resource section for more information

                                                                          Can't get my SSL / TLS Certificate

                                                                          When a custom domain is added to an application, it must be configured on your side according to the instructions displayed:

                                                                          Custom Domain Configuration

                                                                          You can check that your custom domain is well configured using the following command: dig CNAME ${YOUR_CUSTOM_DOMAIN} +short. On the domain above, we can check the configuration is correct on Google DNS servers:

                                                                          $ dig CNAME new.console.qovery.com +short @8.8.8.8
                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.

                                                                          It should return the same value as the one configured on Qovery. Otherwise, be patient (some minutes depending on DNS registrars) and ensure the DNS modification has been applied. Finally, you can check the content of the CNAME with:

                                                                          $ dig A new.console.qovery.com +short @8.8.8.8
                                                                          zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh.
                                                                          ac8ad80d15e534c549ee10c87aaf82b4-bba68d8f58c6755d.elb.us-east-2.amazonaws.com.
                                                                          3.19.99.1
                                                                          18.188.137.104

                                                                          We can see the destination contains other elements, indicating that the CNAME is pointing to an endpoint and correctly configured.

                                                                          The SSL / TLS Certificate is generated for the whole group of custom domains you define:

                                                                          • if one custom domain is misconfigured: the certificate can't be generated
                                                                          • if the certificate has been generated once, but later one custom domain configuration is changed and misconfigured: the certificate can't be generated again

                                                                          If you experience some invalid certificate, here is how you can fix the issue:

                                                                          1. Identify the misconfigured custom domain(s) in your application settings.

                                                                          2. Fix or delete them.

                                                                          3. Redeploy your impacted application(s).

                                                                          Git Submodules - Error while checkout submodules

                                                                          Error Message:

                                                                          Error message: Error while checkout submodules from repository https://github.com/user/repo.git.
                                                                          Error: Error { code: -1, klass: 23, message: "authentication required but no callback set" }

                                                                          There are limitations with the support for Git Submodules. Only public Submodules over HTTPS or private with embedded basic authentication are supported.

                                                                          Solution: Follow our Git Submodules guide to make your application working with Git Submodules on Qovery.

                                                                          Container image xxxxxx.xxx.xx failed to build: Cannot build Application "zXXXXXXXXX" due to an error with docker: Timeout

                                                                          This error shows up in your deployment logs when the application takes more time to build than the maximum build allowed time (today 1800 seconds).

                                                                          If your application needs more time to build, increase parameter build.timeout_max_sec within your application advanced settings and trigger again the deployment.

                                                                          - + - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html index c51c5fc600..761a99e54e 100644 --- a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          Cluster Troubleshoot

                                                                          Within this section you will find the common errors you might encounter when deploying or running your clusters with Qovery

                                                                          I don't have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?

                                                                          Unfortunately, there is no automatic way to do it with Qovery once we don't have access. However, AWS provides an easy way to retrieve those resources, so you can manually perform the delete. To do so, go on the AWS web console, and search for "Resource Groups & Tag Editor" service, then:

                                                                          Resource groups search by tag

                                                                          1. Click on "Create Resource Group".
                                                                          2. In Tags, enter: "ClusterLongId".
                                                                          3. In the "Optional Tag value", enter the Qovery cluster ID. If you don't have it, let AWS suggest it for you. If you have Qovery deployed elements remainings, it will propose the Cluster long ID automatically.
                                                                          4. Click on "Add".
                                                                          5. You should see the filter with the information you just entered.
                                                                          6. Click on "Preview groups resources".
                                                                          7. You'll have all elements deployed by Qovery and you can delete what you want.

                                                                          My cloud account has been blocked, what should I do?

                                                                          If you encounter this kind of error during an infrastructure deployment (including managed DBs):

                                                                          This account is currently blocked by your cloud provider, please contact them directly.

                                                                          Or

                                                                          This AWS account is currently blocked and not recognized as a valid account.
                                                                          Please contact aws-verification@amazon.com directly to get more details.
                                                                          Maybe you are not allowed to use your free tier in this region?
                                                                          Maybe you need to provide billing info?

                                                                          This error is likely due to a billing issue or blocked free-tier usage in the given region.

                                                                          Unfortunately, there is nothing Qovery can do. You need to reach out directly to your cloud provider to get more details and get your account unblocked.

                                                                          More

                                                                          You are looking to troubleshoot your application with Qovery? Read this very short guide

                                                                          +

                                                                          Cluster Troubleshoot

                                                                          Within this section you will find the common errors you might encounter when deploying or running your clusters with Qovery

                                                                          I don't have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?

                                                                          Unfortunately, there is no automatic way to do it with Qovery once we don't have access. However, AWS provides an easy way to retrieve those resources, so you can manually perform the delete. To do so, go on the AWS web console, and search for "Resource Groups & Tag Editor" service, then:

                                                                          Resource groups search by tag

                                                                          1. Click on "Create Resource Group".
                                                                          2. In Tags, enter: "ClusterLongId".
                                                                          3. In the "Optional Tag value", enter the Qovery cluster ID. If you don't have it, let AWS suggest it for you. If you have Qovery deployed elements remainings, it will propose the Cluster long ID automatically.
                                                                          4. Click on "Add".
                                                                          5. You should see the filter with the information you just entered.
                                                                          6. Click on "Preview groups resources".
                                                                          7. You'll have all elements deployed by Qovery and you can delete what you want.

                                                                          My cloud account has been blocked, what should I do?

                                                                          If you encounter this kind of error during an infrastructure deployment (including managed DBs):

                                                                          This account is currently blocked by your cloud provider, please contact them directly.

                                                                          Or

                                                                          This AWS account is currently blocked and not recognized as a valid account.
                                                                          Please contact aws-verification@amazon.com directly to get more details.
                                                                          Maybe you are not allowed to use your free tier in this region?
                                                                          Maybe you need to provide billing info?

                                                                          This error is likely due to a billing issue or blocked free-tier usage in the given region.

                                                                          Unfortunately, there is nothing Qovery can do. You need to reach out directly to your cloud provider to get more details and get your account unblocked.

                                                                          More

                                                                          You are looking to troubleshoot your application with Qovery? Read this very short guide

                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/database-troubleshoot/index.html b/docs/using-qovery/troubleshoot/database-troubleshoot/index.html index 8541e84bd2..3e566d28a5 100644 --- a/docs/using-qovery/troubleshoot/database-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/database-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          Database Troubleshoot

                                                                          Within this section you will find the common errors you might encounter when deploying or running your databases with Qovery

                                                                          During a managed database delete, I've this error: SnapshotQuotaExceeded

                                                                          This errors occurs because Qovery creates a snapshot before the delete of the database. This to avoid a user mistake who delete a database accidentally.

                                                                          To fix this issue, you have 2 solutions:

                                                                          1. You certainly have useless snapshots, from old databases or old ones you don't want to keep anymore. Delete them directly from your Cloud Provider web interface. Here is an example on AWS:

                                                                            • Search for the database service (here RDS)
                                                                            • Select the Snapshots menu
                                                                            • Select the snapshots to delete

                                                                            Database snapshots

                                                                          2. Open a ticket to the Cloud Provider support, and as to raise this limit.

                                                                          +

                                                                          Database Troubleshoot

                                                                          Within this section you will find the common errors you might encounter when deploying or running your databases with Qovery

                                                                          During a managed database delete, I've this error: SnapshotQuotaExceeded

                                                                          This errors occurs because Qovery creates a snapshot before the delete of the database. This to avoid a user mistake who delete a database accidentally.

                                                                          To fix this issue, you have 2 solutions:

                                                                          1. You certainly have useless snapshots, from old databases or old ones you don't want to keep anymore. Delete them directly from your Cloud Provider web interface. Here is an example on AWS:

                                                                            • Search for the database service (here RDS)
                                                                            • Select the Snapshots menu
                                                                            • Select the snapshots to delete

                                                                            Database snapshots

                                                                          2. Open a ticket to the Cloud Provider support, and as to raise this limit.

                                                                          - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/index.html b/docs/using-qovery/troubleshoot/index.html index cd0dd80681..a99482a7fd 100644 --- a/docs/using-qovery/troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                          -

                                                                          Troubleshoot

                                                                          This guide is divided into three sections that will guide you through your troubleshooting depending on the issue you face

                                                                          • Deployment issues: guide through to fix the deployment
                                                                          • Run issues : App in error -> provide Pod errors, performance issues (?), dropped request(nginx investigations)
                                                                          • Cluster issues:
                                                                          Application troubleshoot
                                                                          Cluster troubleshoot
                                                                          Database troubleshoot
                                                                          Lifecycle troubleshoot
                                                                          Resources
                                                                            +

                                                                            Troubleshoot

                                                                            This guide is divided into three sections that will guide you through your troubleshooting depending on the issue you face

                                                                            • Deployment issues: guide through to fix the deployment
                                                                            • Run issues : App in error -> provide Pod errors, performance issues (?), dropped request(nginx investigations)
                                                                            • Cluster issues:
                                                                            Application troubleshoot
                                                                            Cluster troubleshoot
                                                                            Database troubleshoot
                                                                            Lifecycle troubleshoot
                                                                            Resources
                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html b/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html index de9794aa96..fc94a6c3a4 100644 --- a/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@

                                                                              Lifecycle Job Troubleshoot

                                                                              Within this section you will find the common errors you might encounter when deploying or running your Lifecycle Job with Qovery

                                                                              Joib failed: either it couldn't be executed correctly after X retries or its execution didn't finish after Y minutes

                                                                              This errors occurs in the following two cases:

                                                                              Job code execution failures The pod running your lifecycle job is crashing due to an exception in your code or OOM issue. Have a look at the Live Logs of your Lifecycle job to understand from where the issue is coming from your code.

                                                                              Job execution timeout -The code run in your job is taking more time than expected and thus it's execution is stopped. If your code needs more time to be excecuted, increase the Max Duration value within the Lifecycle Job configuration page

                                                                              +The code run in your job is taking more time than expected and thus it's execution is stopped. If your code needs more time to be excecuted, increase the Max Duration value within the Lifecycle Job configuration page

                                                                              - + - + @@ -67,7 +67,7 @@ - + diff --git a/guides/advanced/build-on-top/index.html b/guides/advanced/build-on-top/index.html index cc10f52d5c..9e03fb8496 100644 --- a/guides/advanced/build-on-top/index.html +++ b/guides/advanced/build-on-top/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Build on Top of Qovery

                                                                              Learn how to use Qovery as an infrastructure layer to build on top of it.

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              Contents

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index 529969ea37..02ba970fad 100644 --- a/guides/advanced/continuous-integration/index.html +++ b/guides/advanced/continuous-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Continuous Integration

                                                                              Learn how to integrate your Continuous Integration (CI) platform with Qovery

                                                                              Qovery integrates with all existing Continuous Integration platforms. We have a guide for the most popular CI platforms. However, even if you don't find your CI platform, you can see here that integrating Qovery into a CI is just a matter of:

                                                                              1. Adding a new step into your CI pipeline
                                                                              2. Installing the Qovery CLI
                                                                              3. Running the qovery <application|container|lifecycle|cronjob> deploy ... commands

                                                                              Resources

                                                                              Here are some resources you can use to integrate Qovery into your CI platform:

                                                                              TitleDescriptionAuthor
                                                                              Step-by-step guide to integrate GitHub ActionsStep-by-step guide to learn how to integrate GitHub Actions with QoveryQovery
                                                                              Integrate GitHub ActionsLearn how to integrate GitHub Actions with QoveryQovery
                                                                              Integrate GitLab CILearn how to integrate GitLab CI with QoveryQovery
                                                                              Integrate Circle CILearn how to integrate Circle CI with QoveryQovery
                                                                              Integrate JenkinsLearn how to integrate Jenkins with QoveryQovery
                                                                              Forum "GitHub Actions"List "GitHub Actions" threads from Qovery community forumCommunity
                                                                              Forum "GitLab CI"List "GitLab CI" threads from Qovery community forumCommunity
                                                                              Forum "Circle CI"List "Circle CI" threads from Qovery community forumCommunity
                                                                              Forum "Jenkins"List "Jenkins" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              2 min read
                                                                              Updated

                                                                              Qovery integrates with all existing Continuous Integration platforms. We have a guide for the most popular CI platforms. However, even if you don't find your CI platform, you can see here that integrating Qovery into a CI is just a matter of:

                                                                              1. Adding a new step into your CI pipeline
                                                                              2. Installing the Qovery CLI
                                                                              3. Running the qovery <application|container|lifecycle|cronjob> deploy ... commands

                                                                              Resources

                                                                              Here are some resources you can use to integrate Qovery into your CI platform:

                                                                              TitleDescriptionAuthor
                                                                              Step-by-step guide to integrate GitHub ActionsStep-by-step guide to learn how to integrate GitHub Actions with QoveryQovery
                                                                              Integrate GitHub ActionsLearn how to integrate GitHub Actions with QoveryQovery
                                                                              Integrate GitLab CILearn how to integrate GitLab CI with QoveryQovery
                                                                              Integrate Circle CILearn how to integrate Circle CI with QoveryQovery
                                                                              Integrate JenkinsLearn how to integrate Jenkins with QoveryQovery
                                                                              Forum "GitHub Actions"List "GitHub Actions" threads from Qovery community forumCommunity
                                                                              Forum "GitLab CI"List "GitLab CI" threads from Qovery community forumCommunity
                                                                              Forum "Circle CI"List "Circle CI" threads from Qovery community forumCommunity
                                                                              Forum "Jenkins"List "Jenkins" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/costs-control/index.html b/guides/advanced/costs-control/index.html index d74e34a646..5b64b3c2e7 100644 --- a/guides/advanced/costs-control/index.html +++ b/guides/advanced/costs-control/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Costs Control

                                                                              Learn how to keep control of your costs with Qovery

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              Contents

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/deploy-api-gateway/index.html b/guides/advanced/deploy-api-gateway/index.html index 987f2c2bdb..6104b1d858 100644 --- a/guides/advanced/deploy-api-gateway/index.html +++ b/guides/advanced/deploy-api-gateway/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Deploy API Gateway

                                                                              Learn how to deploy an API Gateway with Qovery

                                                                              An API Gateway is a web service that acts as an interface between consumers and your services. It acts as a single point of entry into a system and is responsible for request routing, composition, and protocol translation. It's essentially a middleman that processes requests from clients to services.

                                                                              Resources

                                                                              Here are some resources you can use to deploy your API Gateway with Qovery

                                                                              TitleDescriptionAuthor
                                                                              NGINX API GatewayDeploy a NGINX API Gateway with QoveryQovery
                                                                              Forum "API Gateway"List "API Gateway" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated

                                                                              An API Gateway is a web service that acts as an interface between consumers and your services. It acts as a single point of entry into a system and is responsible for request routing, composition, and protocol translation. It's essentially a middleman that processes requests from clients to services.

                                                                              Resources

                                                                              Here are some resources you can use to deploy your API Gateway with Qovery

                                                                              TitleDescriptionAuthor
                                                                              NGINX API GatewayDeploy a NGINX API Gateway with QoveryQovery
                                                                              Forum "API Gateway"List "API Gateway" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/deploy-aws-services/index.html b/guides/advanced/deploy-aws-services/index.html index 4b9e3c48a3..1ac269776f 100644 --- a/guides/advanced/deploy-aws-services/index.html +++ b/guides/advanced/deploy-aws-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Deploy AWS Services

                                                                              Learn how to deploy any AWS services with Qovery
                                                                              +
                                                                              Stats
                                                                              2 min read
                                                                              Updated
                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/deploy-external-services/index.html b/guides/advanced/deploy-external-services/index.html index b1bd1fa7bb..7c9694f7dc 100644 --- a/guides/advanced/deploy-external-services/index.html +++ b/guides/advanced/deploy-external-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Deploy External Services

                                                                              Learn how to deploy any external services with Qovery

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              Contents

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/deploy-frontend/index.html b/guides/advanced/deploy-frontend/index.html index 0489dbfdc4..977153a6f0 100644 --- a/guides/advanced/deploy-frontend/index.html +++ b/guides/advanced/deploy-frontend/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              Stats
                                                                              2 min read
                                                                              Updated

                                                                              Qovery is versatile and has the ability to cater to a wide range of frontend applications. Whether you're working with a Single-Page Application (SPA), a Server-Side Rendered (SSR) applications, or a general web app, Qovery has you covered.

                                                                              Resources

                                                                              Here are some resources you can use to deploy your different type of Frontend apps with Qovery.

                                                                              TitleDescriptionAuthor
                                                                              Deploy SPA containerDeploy your frontend SPA (React) app inside a container with a NGINX web serverQovery
                                                                              Deploy SPA container with CloudfrontDeploy your frontend SPA (React) app inside a container with a NGINX web server and expose it via Cloudfront CDNQovery
                                                                              Use Cloudflare as a CDNUse Cloudflare as a CDN for your frontend SPA (React) appQovery
                                                                              Deploy SSR containerDeploy your frontend SSR (NextJS) app inside a container with a NGINX web serverQovery
                                                                              Deploy SSR on CloudfrontDeploy your frontend SSR (NextJS) app on AWS CloudfrontQovery
                                                                              "React" forum threadsList "React" threads from Qovery community forumCommunity
                                                                              "NextJS" forum threadsList "NextJS" threads from Qovery community forumCommunity
                                                                              "Angular" forum threadsList "Angular" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +You can change them in your app advanced settings.

                                                                              TitleDescriptionAuthor
                                                                              Deploy SPA containerDeploy your frontend SPA (React) app inside a container with a NGINX web serverQovery
                                                                              Deploy SPA container with CloudfrontDeploy your frontend SPA (React) app inside a container with a NGINX web server and expose it via Cloudfront CDNQovery
                                                                              Use Cloudflare as a CDNUse Cloudflare as a CDN for your frontend SPA (React) appQovery
                                                                              Deploy SSR containerDeploy your frontend SSR (NextJS) app inside a container with a NGINX web serverQovery
                                                                              Deploy SSR on CloudfrontDeploy your frontend SSR (NextJS) app on AWS CloudfrontQovery
                                                                              "React" forum threadsList "React" threads from Qovery community forumCommunity
                                                                              "NextJS" forum threadsList "NextJS" threads from Qovery community forumCommunity
                                                                              "Angular" forum threadsList "Angular" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/advanced/helm-chart/index.html b/guides/advanced/helm-chart/index.html index 991f6a924a..3433e5f74f 100644 --- a/guides/advanced/helm-chart/index.html +++ b/guides/advanced/helm-chart/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Helm Charts

                                                                              Learn how to deploy Helm charts with Qovery

                                                                              Qovery runs on top of Kubernetes and allows you to deploy any Helm chart on your cluster. To learn more about Helm, please visit the official website.

                                                                              Resources

                                                                              Here are some resources you can use to deploy your Helm Charts with Qovery.

                                                                              TitleDescriptionOfficial
                                                                              Deploy your Helm ChartsHow to deploy your Helm Charts (example with Kubecost)Yes
                                                                              ForumList "Helm Charts" threads from Qovery community forumno

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated

                                                                              Qovery runs on top of Kubernetes and allows you to deploy any Helm chart on your cluster. To learn more about Helm, please visit the official website.

                                                                              Resources

                                                                              Here are some resources you can use to deploy your Helm Charts with Qovery.

                                                                              TitleDescriptionOfficial
                                                                              Deploy your Helm ChartsHow to deploy your Helm Charts (example with Kubecost)Yes
                                                                              ForumList "Helm Charts" threads from Qovery community forumno

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/index.html b/guides/advanced/index.html index 7530fde1e4..6e4fae0175 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -76,14 +76,14 @@
                                                                              - +
                                                                              - + - + @@ -91,7 +91,7 @@ - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index dae9350925..db94c9bc09 100644 --- a/guides/advanced/microservices/index.html +++ b/guides/advanced/microservices/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -53,14 +53,14 @@
                                                                              client.connect(err => {
                                                                              if (err) {
                                                                              console.error('connection error', err.stack)
                                                                              } else {
                                                                              console.log('connected')
                                                                              }
                                                                              })

                                                                              This is it! After deploying the database, application and executing the code snippet, you should see the message connected.

                                                                              We made use of BUILT_IN variables injected by Qovery to make it easy to consume all the services within the environment.

                                                                            • Consume internal APIs

                                                                              In this step, we'll use the private API of our APP_B in our APP_A over a private network. We have already configured everything to make it work. The only missing step is the configuration in APP_A - it needs to know how to access our APP_B.

                                                                              In the example below, we'll use Node.js and axios to create an HTTP client able to consume the API of APP_B:

                                                                              Now, you can configure your HTTP client in the frontend application to target your backend API:

                                                                              const axios = require('axios');
                                                                              const appBAddress = "http://" + process.env.QOVERY_APPLICATION_APP_B_HOST + ":" + process.env.QOVERY_APPLICATION_APP_B_PORT
                                                                              axios.get(appBAddress + '/api/users')
                                                                              .then(response => {
                                                                              console.log(response.data);
                                                                              })
                                                                              .catch(error => {
                                                                              console.log(error);
                                                                              });

                                                                              This is it! Every request using the API client we have just configured will consume the API of APP_B over the secure, internal network.

                                                                              Once again, we used the BUILT_IN secrets. Read more about them here

                                                                            • Consume the public API in the frontend application

                                                                              In this step, we'll deploy a frontend application and consume our public API exposed by APP_A.

                                                                              In the first step, create your frontend application.

                                                                              After the application is created, we can easily configure it to consume our public API. All we need to do is to make use of the BUILT_IN secrets. See how to achieve it in a Nuxt.js example below:

                                                                              export default {
                                                                              env: {
                                                                              apiUrl: process.env.QOVERY_APPLICATION_APP_A_URL
                                                                              }
                                                                              }
                                                                              import axios from 'axios'
                                                                              -
                                                                              export default axios.create({
                                                                              baseURL: process.env.apiUrl
                                                                              })

                                                                              After providing the configuration from above, deploy your frontend application.

                                                                              Now our frontend application will be able to consume the API exposed by the publicly exposed APP_A.

                                                                            • Summary

                                                                              In this guide, we deployed two microservices that communicate over the internal network. We also deployed a frontend application that makes use of a public API exposed by one of our applications. At the same time, we deployed a database and connected it to the second of our backend microservices.

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              export default axios.create({
                                                                              baseURL: process.env.apiUrl
                                                                              })

                                                                              After providing the configuration from above, deploy your frontend application.

                                                                              Now our frontend application will be able to consume the API exposed by the publicly exposed APP_A.

                                                                              Summary

                                                                              In this guide, we deployed two microservices that communicate over the internal network. We also deployed a frontend application that makes use of a public API exposed by one of our applications. At the same time, we deployed a database and connected it to the second of our backend microservices.

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -68,7 +68,7 @@ - + diff --git a/guides/advanced/migration/index.html b/guides/advanced/migration/index.html index 892589c909..f08be20fc0 100644 --- a/guides/advanced/migration/index.html +++ b/guides/advanced/migration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Migration

                                                                              Learn how to migrate your applications with Qovery

                                                                              You plan to migrate to AWS (Amazon Web Services), GCP (Google Cloud Platform) or Microsoft Azure with Qovery? This guide is for you.

                                                                              Resources

                                                                              Here are some resources you can use to migrate your applications to your favorite cloud provider with Qovery.

                                                                              TitleDescriptionAuthor
                                                                              Migrate from Heroku to AWSComplete guide to migrate from Heroku to AWS with QoveryQovery
                                                                              Migration checklistComprehensive migration checklist to read before migrating your applications with Qovery (coming soon)Qovery
                                                                              ForumList "Migration" threads from Qovery community forumCommunity

                                                                              Migration assistance

                                                                              Qovery provides a migration assistance to help you migrate your applications with Qovery. Contact us via the Qovery Console and ask for migration assistance via the chat.

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              2 min read
                                                                              Updated

                                                                              You plan to migrate to AWS (Amazon Web Services), GCP (Google Cloud Platform) or Microsoft Azure with Qovery? This guide is for you.

                                                                              Resources

                                                                              Here are some resources you can use to migrate your applications to your favorite cloud provider with Qovery.

                                                                              TitleDescriptionAuthor
                                                                              Migrate from Heroku to AWSComplete guide to migrate from Heroku to AWS with QoveryQovery
                                                                              Migration checklistComprehensive migration checklist to read before migrating your applications with Qovery (coming soon)Qovery
                                                                              ForumList "Migration" threads from Qovery community forumCommunity

                                                                              Migration assistance

                                                                              Qovery provides a migration assistance to help you migrate your applications with Qovery. Contact us via the Qovery Console and ask for migration assistance via the chat.

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/monitoring/index.html b/guides/advanced/monitoring/index.html index b959e28e0e..e71268b8c9 100644 --- a/guides/advanced/monitoring/index.html +++ b/guides/advanced/monitoring/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Monitoring

                                                                              Learn how to monitor your infrastructure and your apps with Qovery
                                                                              • Prometheus & Grafana
                                                                              • Datadog

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              Contents
                                                                              • Prometheus & Grafana
                                                                              • Datadog

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/monorepository/index.html b/guides/advanced/monorepository/index.html index 81fd751c34..6ea07858f7 100644 --- a/guides/advanced/monorepository/index.html +++ b/guides/advanced/monorepository/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Mono repository

                                                                              How to deploy applications using Monorepository with Qovery

                                                                              Qovery provides a very simple way of working with monorepositories. You can deploy multiple applications using the same git repository or deploy the same application in many different modes/configurations.

                                                                              Deploying multiple applications using one repository

                                                                              1. Navigate to Console

                                                                              2. Create new applications or navigate to existing ones

                                                                              3. Navigate to application settings

                                                                                Monorepository

                                                                              4. To deploy multiple apps using one repository, set up the app to target your monorepo. Additionally, you need to set up the folder in which your application resides.

                                                                                First application

                                                                                Monorepository

                                                                                Second application

                                                                                Monorepository

                                                                                As you see in the examples above, we used one repository (poc-factory/tweetifier) in two applications:

                                                                                • timescale
                                                                                • core

                                                                                All we need to do to deploy multiple applications using one repository is:

                                                                                • Select the application name
                                                                                • Select our repository
                                                                                • Select the application root folder

                                                                                That's it. Using monorepositories with Qovery is that simple.

                                                                                Those applications may be a part of the same project or different projects; it's all up to you and your configuration.

                                                                              Deploying application with multiple configurations using one repository

                                                                              A special case of monorepository is a situation when one repository is used to deploy multiple applications with the same source code but different configurations or modes. Application behaviour depends on provided config, like environment variables and secrets.

                                                                              Qovery supports this case well. The steps do not differ much from the steps from the previous example:

                                                                              1. Navigate to Console

                                                                              2. Create new applications or navigate to existing ones

                                                                              3. Navigate to application settings

                                                                                Monorepository

                                                                              4. Configure application repositories:

                                                                                First application

                                                                                Monorepository

                                                                                Second application

                                                                                Monorepository

                                                                              5. As you see in the examples above, we used one repository (poc-factory/tweetifier) in two applications:

                                                                                • app-1
                                                                                • app-2

                                                                                Those applications use the same application root path - /, so they can be build using the same source code. To adjust the behavior of applications to meet your needs, use environment variables or secrets. -It allows you to run multiple applications using the same source code in different modes.

                                                                                You can set up secret or env variables in your application Environment Variables section:

                                                                                Monorepository

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +It allows you to run multiple applications using the same source code in different modes.

                                                                              You can set up secret or env variables in your application Environment Variables section:

                                                                              Monorepository

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/advanced/production/index.html b/guides/advanced/production/index.html index 201c5c3a7b..fa8047f904 100644 --- a/guides/advanced/production/index.html +++ b/guides/advanced/production/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Production

                                                                              Learn how to run your Production with Qovery

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              Contents

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/seed-database/index.html b/guides/advanced/seed-database/index.html index 29afe113a6..47500e6e3c 100644 --- a/guides/advanced/seed-database/index.html +++ b/guides/advanced/seed-database/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Seed Database

                                                                              Learn how to seed your database with Qovery

                                                                              Seeding a database is a common task when developing an application. It allows you to populate your database with some data to test your application. -Qovery provides multiple ways to seed your database.

                                                                              Resources

                                                                              Here are some resources you can use to seed your database with Qovery.

                                                                              TitleDescriptionAuthor
                                                                              Seed your database with a SQL script (simple)Seed your database with a SQL script and a Docker ENTRYPOINT instructionQovery
                                                                              Seed your database with a SQL script (advanced)Seed your database with a SQL script and a Lifecycle JobQovery
                                                                              Seed your database with Replibyte (advanced)Seed your database with Replibyte and a Lifecycle JobQovery
                                                                              Migrate your database schemaMigrate your database schema with a Docker ENTRYPOINT instructionQovery
                                                                              ForumList "Seed Database" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +Qovery provides multiple ways to seed your database.

                                                                              Resources

                                                                              Here are some resources you can use to seed your database with Qovery.

                                                                              TitleDescriptionAuthor
                                                                              Seed your database with a SQL script (simple)Seed your database with a SQL script and a Docker ENTRYPOINT instructionQovery
                                                                              Seed your database with a SQL script (advanced)Seed your database with a SQL script and a Lifecycle JobQovery
                                                                              Seed your database with Replibyte (advanced)Seed your database with Replibyte and a Lifecycle JobQovery
                                                                              Migrate your database schemaMigrate your database schema with a Docker ENTRYPOINT instructionQovery
                                                                              ForumList "Seed Database" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/advanced/terraform/index.html b/guides/advanced/terraform/index.html index 3f9823f97f..bec1c24f3d 100644 --- a/guides/advanced/terraform/index.html +++ b/guides/advanced/terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Terraform

                                                                              Learn how to use Terraform with Qovery
                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated
                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/advanced/use-preview-environments/index.html b/guides/advanced/use-preview-environments/index.html index b587231238..ce4622f542 100644 --- a/guides/advanced/use-preview-environments/index.html +++ b/guides/advanced/use-preview-environments/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -47,14 +47,14 @@

                                                                              Preview Environments

                                                                              Learn how to use and leverage Preview Environments with Qovery

                                                                              Use Preview Environment to get early feedback on your application changes by creating a dedicated environment for each of your pull requests. Your production environment runs 24/7, where your other environments may not need to run all day long. -E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                                                                              Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                                                                              Recommendations

                                                                              If you are using Qovery to run your Production, we recommend using Preview Environments on a separate cluster. This will ensure that your Production is not impacted by the Preview Environments and vice versa.

                                                                              Resources

                                                                              Here are some resources you can use to use and take advantage of Qovery Preview Environments:

                                                                              TitleDescriptionAuthor
                                                                              Getting Started with Preview EnvironmentLearn how to get started with Qovery Preview EnvironmentsQovery
                                                                              Customize preview URLLearn how to customize your Preview URL with the Qovery CLIQovery
                                                                              Automatically stop unused Preview EnvironmentsLearn how to automatically teardown your Preview Environments on a specific scheduleQovery
                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and QoveryStep-by-step guide to build e2e testing ephemeral environments with GitHub Actions and QoveryQovery
                                                                              Forum "Preview Environment"List "Preview Environments" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              +E.g. you may need to run Environments to get early feedback on your application changes before the changes are merged into production. This is what we call Preview Environment.

                                                                              Sometimes Preview Environment is also known as Ephemeral Environment, Temporary Environment, Development Environment, Review App.

                                                                              Recommendations

                                                                              If you are using Qovery to run your Production, we recommend using Preview Environments on a separate cluster. This will ensure that your Production is not impacted by the Preview Environments and vice versa.

                                                                              Resources

                                                                              Here are some resources you can use to use and take advantage of Qovery Preview Environments:

                                                                              TitleDescriptionAuthor
                                                                              Getting Started with Preview EnvironmentLearn how to get started with Qovery Preview EnvironmentsQovery
                                                                              Customize preview URLLearn how to customize your Preview URL with the Qovery CLIQovery
                                                                              Automatically stop unused Preview EnvironmentsLearn how to automatically teardown your Preview Environments on a specific scheduleQovery
                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and QoveryStep-by-step guide to build e2e testing ephemeral environments with GitHub Actions and QoveryQovery
                                                                              Forum "Preview Environment"List "Preview Environments" threads from Qovery community forumCommunity

                                                                              Q&A

                                                                              Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

                                                                              - + - + @@ -62,7 +62,7 @@ - + diff --git a/guides/cloud-provider/guide-amazon-web-services/index.html b/guides/cloud-provider/guide-amazon-web-services/index.html index 80e5b405c4..27844bd8fd 100644 --- a/guides/cloud-provider/guide-amazon-web-services/index.html +++ b/guides/cloud-provider/guide-amazon-web-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Install Qovery on your Amazon Web Services account

                                                                              Learn how to install Qovery on your Amazon Web Services (AWS) account

                                                                              Eager to know how to deploy your apps on your AWS account with Qovery? -Click 👉 here 👈 to follow the white rabbit 🐇

                                                                              +Click 👉 here 👈 to follow the white rabbit 🐇

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/cloud-provider/guide-google-cloud-platform/index.html b/guides/cloud-provider/guide-google-cloud-platform/index.html index 4f247fb8dc..4a34a155ec 100644 --- a/guides/cloud-provider/guide-google-cloud-platform/index.html +++ b/guides/cloud-provider/guide-google-cloud-platform/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Install Qovery your Google Cloud Platform account

                                                                              Learn how to install Qovery on your Google Cloud Platform (GCP) account

                                                                              Thank you for your interest! You are more and more to request the support of Qovery for Google Cloud Platform (GCP). However, we do not support it yet. You have 2 ways of speed up the support:

                                                                              1. Upvote the support of Google Cloud Platform here.
                                                                              2. We are hiring backend and frontend engineers to build the future of the Cloud. It could be you? 😄 Apply here

                                                                              Today, Qovery supports the following Cloud providers:

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated

                                                                              Thank you for your interest! You are more and more to request the support of Qovery for Google Cloud Platform (GCP). However, we do not support it yet. You have 2 ways of speed up the support:

                                                                              1. Upvote the support of Google Cloud Platform here.
                                                                              2. We are hiring backend and frontend engineers to build the future of the Cloud. It could be you? 😄 Apply here

                                                                              Today, Qovery supports the following Cloud providers:

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/cloud-provider/guide-microsoft-azure/index.html b/guides/cloud-provider/guide-microsoft-azure/index.html index aa32b9b30c..ef32500b00 100644 --- a/guides/cloud-provider/guide-microsoft-azure/index.html +++ b/guides/cloud-provider/guide-microsoft-azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Install Qovery on your Microsoft Azure account

                                                                              Learn how to install Qovery on your Microsoft Azure account

                                                                              Thank you for your interest! You are more and more to request the support of Qovery for Azure (Microsoft Azure). However, we do not support it yet. You have 2 ways of speed up the support:

                                                                              1. Upvote the support of Microsoft Azure here.
                                                                              2. We are hiring backend and frontend engineers to build the future of the Cloud. It could be you? 😄 Apply here

                                                                              Today, Qovery supports the following Cloud providers:

                                                                              +
                                                                              Stats
                                                                              1 min read
                                                                              Updated

                                                                              Thank you for your interest! You are more and more to request the support of Qovery for Azure (Microsoft Azure). However, we do not support it yet. You have 2 ways of speed up the support:

                                                                              1. Upvote the support of Microsoft Azure here.
                                                                              2. We are hiring backend and frontend engineers to build the future of the Cloud. It could be you? 😄 Apply here

                                                                              Today, Qovery supports the following Cloud providers:

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/cloud-provider/guide-scaleway/index.html b/guides/cloud-provider/guide-scaleway/index.html index 5a27e147ef..841d86532f 100644 --- a/guides/cloud-provider/guide-scaleway/index.html +++ b/guides/cloud-provider/guide-scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Install Qovery on your Scaleway account

                                                                              Learn how to install Qovery on your Scaleway account

                                                                              Scaleway (SCW) is a platform that offers flexible, reliable, and scalable Cloud computing solutions. The platform is developed with a combination of infrastructure as a service (IaaS), platform as a service (PaaS), and packaged software as a service (SaaS) offerings.

                                                                              Qovery is the simplest way to deploy your apps on Scaleway.

                                                                              In this tutorial, I will explain step by step how to deploy your app on Scaleway in 10 minutes. No Scaleway/infrastructure/Cloud knowledge required - no kidding!

                                                                              Before you start

                                                                              1. This tutorial is perfect for anyone interested into deploying their apps on Scaleway seamlessly.
                                                                              2. If you have any question or suggestion on this tutorial, please contact us via this form or Discord.

                                                                              What is Qovery

                                                                              Qovery is a platform that makes your app deployment on Scaleway very simple. The installation of Qovery on your Scaleway account takes approximately 10 minutes. Then you're ready to deploy your apps "à la" Heroku-like..

                                                                              Why you should use Scaleway

                                                                              • You want to use a European Cloud provider 🇪🇺.
                                                                              • You want to stay focus on what you are building.
                                                                              • You need to speed up your Go-To-Market and Product Market Fit.
                                                                              • You are looking for a cheapest alternative to AWS.

                                                                              Why you should not use Scaleway

                                                                              • You need to host your applications outside of Europe.
                                                                              • You need to use MongoDB in production. (They do not have managed MongoDB).
                                                                              • You need any specific AWS, GCP or Azure services.

                                                                              Let's start!

                                                                              Install Qovery on Scaleway

                                                                              Create a Scaleway account

                                                                              If you already have a Scaleway account, you can go to the next point.

                                                                              Before creating a Scaleway account, I'd recommend contacting Scaleway to see if you are eligible to free credits. Which is convenient to have at the beginning of a project. If you know that you are not eligible, you can create your account by clicking on the top right button Create an Scaleway Account of their main page.

                                                                              Create an account on Scaleway

                                                                              Get your Scaleway API keys

                                                                              To install Qovery on your Scaleway account, the project id, secret access key and access key id are required. Here is a comprehensive step-by-step guide on how to generate your secret access key and access key id. If you already have those keys, then you can go to the next point.

                                                                              Configure Qovery

                                                                              Sign-up to Qovery

                                                                              Using Qovery is as simple as connect with your Github, Gitlab or Bitbucket account on console.qovery.com.

                                                                              -> Connect to Qovery

                                                                              Create your Organization

                                                                              An organization is a shared account where developers can collaborate across many projects at once. Owners and organization administrators can manage:

                                                                              • Cloud accounts.
                                                                              • Members access.
                                                                              • Billing.

                                                                              Read more about Organizations

                                                                              To deploy on your Scaleway account, you have to choose between Free, Professional and Business plan for your organization.

                                                                              Qovery - Create an Organization and select the plan

                                                                              Install Qovery on your Scaleway account

                                                                              1/ Go to your organization settings by clicking on the "cog" icon next to your organization name.

                                                                              Go your organization settings > clusters

                                                                              2/ Create a cluster, select Scaleway and the region where you want to deploy your apps.

                                                                              Create a cluster

                                                                              3/ Set your Scaleway credentials. (Check out this guide if you have no Scaleway credentials).

                                                                              Set your cloud credentials

                                                                              4/ Under the hood, Qovery uses a managed Kubernetes (Scaleway Kapsule) to run your applications. You need to specify the CPU and RAM you want per node, and the min/max number of nodes. Qovery will keep low the number of nodes and will only scale up your nodes if your applications really need to scale.

                                                                              Set your cluster resources

                                                                              5/ Click on Save and Deploy.

                                                                              Scaleway cluster is now available

                                                                              Congrats! Qovery will be installed within 10 minutes 🎉. You will be notified when it is all good. -In the meantime, you can take a look at our guide section.

                                                                              Deploy your application

                                                                              Once Qovery is installed on your Scaleway account, you have the possibility to deploy your application. Take a look to our guide on how to deploy your first application with Qovery.

                                                                              Deploy your first application
                                                                              +In the meantime, you can take a look at our guide section.

                                                                              Deploy your application

                                                                              Once Qovery is installed on your Scaleway account, you have the possibility to deploy your application. Take a look to our guide on how to deploy your first application with Qovery.

                                                                              Deploy your first application
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/cloud-provider/index.html b/guides/cloud-provider/index.html index 67117472c0..1ad3762ac9 100644 --- a/guides/cloud-provider/index.html +++ b/guides/cloud-provider/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@
                                                                              - +
                                                                              - + - + @@ -67,7 +67,7 @@ - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index ac2a81534d..6461f918ad 100644 --- a/guides/getting-started/create-a-database/index.html +++ b/guides/getting-started/create-a-database/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@ PostgreSQL database and connect it to our NodeJS app.

                                                                              1. Create a PostgreSQL database

                                                                              2. Connect your application

                                                                                Now, we need to connect our application to our database. The credentials (URI, Username, Password ...) are available through environment variables. They are injected by Qovery when your application runs.

                                                                                To connect our NodeJS application to our PostgreSQL database, we only have to:

                                                                                • Use the NodeJS PostgreSQL client (pg)
                                                                                • Use QOVERY_DATABASE_MY_DB_CONNECTION_URI into our code

                                                                                Add the pg dependency into package.json

                                                                                {
                                                                                /* ... */
                                                                                "dependencies": {
                                                                                /* ... */
                                                                                "pg": "^7.17.0"
                                                                                }
                                                                                }

                                                                                Connect our application to PostgreSQL (see documentation)

                                                                                const { Pool } = require('pg')
                                                                                const pool = new Pool({
                                                                                connectionString: process.env.QOVERY_DATABASE_MY_DB_CONNECTION_URI,
                                                                                })
                                                                                -
                                                                                // your can use your connection pool now ...

                                                                                Nothing more, well done! You can now be able to use your database.

                                                                              Next Steps

                                                                              Congratulations, your application has access to your PostgreSQL database. Now we will see how to add your custom domain to your service.

                                                                              +
                                                                              // your can use your connection pool now ...

                                                                              Nothing more, well done! You can now be able to use your database.

                                                                              Next Steps

                                                                              Congratulations, your application has access to your PostgreSQL database. Now we will see how to add your custom domain to your service.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/getting-started/debugging/index.html b/guides/getting-started/debugging/index.html index d912cfb962..98fb596502 100644 --- a/guides/getting-started/debugging/index.html +++ b/guides/getting-started/debugging/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -47,14 +47,14 @@

                                                                              Debugging

                                                                              How to debug your application

                                                                              Your application is running, but something goes wrong? In this guide, you'll learn how to debug your application and solve your problem to make it running smoothly.

                                                                              Your application is running, but for some reason, it is not working as expected. Here are a few tips to find out what's going on.

                                                                              Check the status of your app

                                                                              Qovery expose in the interface the running status of your application which provides you some highlevel information of its healthiness. You can look in this section to know more about the Running Status

                                                                              If the service crashes, its Running Status will be displayed as a red dot. If that's the case, you can have a look at the logs to investigate the reason behind.

                                                                              Live Logs

                                                                              If you need to see the log output of your application while it's running, qovery expose them to you in real-time thanks to the Logs interface. You can have a look at this section to know more.

                                                                              You can use this information to find out what causes your application to behave incorrectly.

                                                                              Deployment Logs

                                                                              If your application fails to start, you can check what's the cause in its deployment logs. You can have a look at this section to have more information on the deployment logs and how to access them.

                                                                              This view provides insight into the build and deployment process. If anything goes wrong, you can see all the required information to fix the problem here.

                                                                              You can check the Troubleshoot section to investigate any issue you might encounter during the deployment of your services.

                                                                              Monitoring

                                                                              If you need more information about the resources consumed by your application, Qovery provides basic metrics about your CPU, memory and storage usage.

                                                                              1. Navigate to Console

                                                                              2. Choose your project, environment, and application.

                                                                              3. In the main application view, you can see a table with the current application resource consumption.

                                                                                Metrics

                                                                              Alerting

                                                                              We highly recommend using tools like Datadog, Sentry or NewRelic to manage your alerting. -Qovery will provide easy integrations in the coming release. Check out our roadmap

                                                                              Do you need any help? Reach us on Discord

                                                                              +Qovery will provide easy integrations in the coming release. Check out our roadmap

                                                                              Do you need any help? Reach us on Discord

                                                                              - + - + @@ -62,7 +62,7 @@ - + diff --git a/guides/getting-started/deploy-your-first-application/index.html b/guides/getting-started/deploy-your-first-application/index.html index 33d0e64869..c9b729135d 100644 --- a/guides/getting-started/deploy-your-first-application/index.html +++ b/guides/getting-started/deploy-your-first-application/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Hello World. Deploy your first application.

                                                                              How to deploy your first application with Qovery

                                                                              Qovery is an easy way to deploy a full-stack application. Meaning, you can deploy a backend, frontend and a database seamlessly. In this guide, I'll show you how to deploy a template app.

                                                                              Step-by-step tutorial

                                                                              1. Sign up

                                                                                Sign in to the Qovery web interface.

                                                                                Qovery Sign-up page

                                                                              2. Install Qovery on your AWS account

                                                                                Here is a video showing how to install Qovery on your AWS account. (Check out our written tutorial here)

                                                                              3. Deploy your first application

                                                                                Here is a short video showing how to deploy your app with the Qovery Web interface.

                                                                              Next Steps

                                                                              To deploy your application, it's as simple as that. In the following article, we will see how to add a database. Let's get started!

                                                                              +
                                                                              Stats
                                                                              2 min read
                                                                              Updated

                                                                              Qovery is an easy way to deploy a full-stack application. Meaning, you can deploy a backend, frontend and a database seamlessly. In this guide, I'll show you how to deploy a template app.

                                                                              Step-by-step tutorial

                                                                              1. Sign up

                                                                                Sign in to the Qovery web interface.

                                                                                Qovery Sign-up page

                                                                              2. Install Qovery on your AWS account

                                                                                Here is a video showing how to install Qovery on your AWS account. (Check out our written tutorial here)

                                                                              3. Deploy your first application

                                                                                Here is a short video showing how to deploy your app with the Qovery Web interface.

                                                                              Next Steps

                                                                              To deploy your application, it's as simple as that. In the following article, we will see how to add a database. Let's get started!

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/getting-started/index.html b/guides/getting-started/index.html index 8be4a5e5f8..7edffa3317 100644 --- a/guides/getting-started/index.html +++ b/guides/getting-started/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@
                                                                              - +
                                                                              - + - + @@ -69,7 +69,7 @@ - + diff --git a/guides/getting-started/managing-environment-variables/index.html b/guides/getting-started/managing-environment-variables/index.html index 78d0a30300..5fe81fecff 100644 --- a/guides/getting-started/managing-environment-variables/index.html +++ b/guides/getting-started/managing-environment-variables/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -55,14 +55,14 @@
                                                                              server.listen(port, hostname, () => {
                                                                              console.log(`Server running at http://${hostname}:${port}/`);
                                                                              });

                                                                              As you can see, to get access to your environment variable you just need to use process.env.ENABLE_DEBUG. Environment variables are injected at the build and run time.

                                                                              This guide was an introduction on how to use the Environment Variables. To know more about Environment Variables and Secrets, -go to our detailed documentation.

                                                                              +go to our detailed documentation.

                                                                              - + - + @@ -70,7 +70,7 @@ - + diff --git a/guides/getting-started/setting-custom-domain/index.html b/guides/getting-started/setting-custom-domain/index.html index 63288705c9..54cb8e4588 100644 --- a/guides/getting-started/setting-custom-domain/index.html +++ b/guides/getting-started/setting-custom-domain/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -47,14 +47,14 @@

                                                                              Custom domain

                                                                              How to set and use your own domain

                                                                              On Qovery, every application exposed publicly automatically gets a temporary qovery.io domain. You can also bring your domains to Qovery quickly. We handle TLS/SSL certificate creation and renewal, as well as automatic HTTP to HTTPS redirects for all your custom domains. Let’s -learn how to set up your domains on Qovery!

                                                                              Tutorial

                                                                              1. Add the domain to your app

                                                                              2. Configure your DNS

                                                                                Configure your DNS by adding a CNAME record pointing to the domain provided by Qovery in the previous step

                                                                                If you have multiple public ports (or you want to have them in the future), make sure you add a CNAME for both yourdomain.com and *.yourdomain.com.

                                                                                In this way:

                                                                                • your application default port will be accessible via the domain yourdomain.com or by a subdomain equal to the port name (portNameA.yourdomain.com).
                                                                                • the other application public port will be accessible via a subdomain equal to the portName (portNameB.yourdomain.com).

                                                                                See the port setup of your application for more information on the port name setup.

                                                                              3. Your domain is ready

                                                                                You need to restart your app to use your custom domain on your application.

                                                                              If you run into any trouble, find us on Discord. Our team and the community will be glad to help out.

                                                                              +learn how to set up your domains on Qovery!

                                                                              Tutorial

                                                                              1. Add the domain to your app

                                                                              2. Configure your DNS

                                                                                Configure your DNS by adding a CNAME record pointing to the domain provided by Qovery in the previous step

                                                                                If you have multiple public ports (or you want to have them in the future), make sure you add a CNAME for both yourdomain.com and *.yourdomain.com.

                                                                                In this way:

                                                                                • your application default port will be accessible via the domain yourdomain.com or by a subdomain equal to the port name (portNameA.yourdomain.com).
                                                                                • the other application public port will be accessible via a subdomain equal to the portName (portNameB.yourdomain.com).

                                                                                See the port setup of your application for more information on the port name setup.

                                                                              3. Your domain is ready

                                                                                You need to restart your app to use your custom domain on your application.

                                                                              If you run into any trouble, find us on Discord. Our team and the community will be glad to help out.

                                                                              - + - + @@ -62,7 +62,7 @@ - + diff --git a/guides/index.html b/guides/index.html index 6465795a6d..cadae1311b 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -176,14 +176,14 @@
                                                                              -

                                                                              Qovery Guides

                                                                              Thoughtful guides to help you get the most out of Qovery. Created and curated by the Qovery team.

                                                                              Cloud Provider

                                                                              Install Qovery on your favorite cloud provider.

                                                                              Advanced

                                                                              Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.

                                                                              Tutorial

                                                                              Additional step-by-step resources to leverage even more Qovery
                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              +

                                                                              Qovery Guides

                                                                              Thoughtful guides to help you get the most out of Qovery. Created and curated by the Qovery team.

                                                                              Cloud Provider

                                                                              Install Qovery on your favorite cloud provider.

                                                                              Advanced

                                                                              Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.

                                                                              Tutorial

                                                                              Additional step-by-step resources to leverage even more Qovery
                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              - + - + @@ -191,7 +191,7 @@ - + diff --git a/guides/tags/cloud-provider-aws/index.html b/guides/tags/cloud-provider-aws/index.html index b9f5164eb8..abd7e67f29 100644 --- a/guides/tags/cloud-provider-aws/index.html +++ b/guides/tags/cloud-provider-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -70,14 +70,14 @@
                                                                              - +
                                                                              - + - + @@ -85,7 +85,7 @@ - + diff --git a/guides/tags/cloud-provider-azure/index.html b/guides/tags/cloud-provider-azure/index.html index bdfb0ef4e4..cdb10eb4a8 100644 --- a/guides/tags/cloud-provider-azure/index.html +++ b/guides/tags/cloud-provider-azure/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/cloud-provider-gcp/index.html b/guides/tags/cloud-provider-gcp/index.html index 9313bc2a44..f6d6761c09 100644 --- a/guides/tags/cloud-provider-gcp/index.html +++ b/guides/tags/cloud-provider-gcp/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/cloud-provider-scaleway/index.html b/guides/tags/cloud-provider-scaleway/index.html index 0b30142a6d..e823e363c7 100644 --- a/guides/tags/cloud-provider-scaleway/index.html +++ b/guides/tags/cloud-provider-scaleway/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index 4af6e00016..95a27468d5 100644 --- a/guides/tags/database-postgresql/index.html +++ b/guides/tags/database-postgresql/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@
                                                                              - +
                                                                              - + - + @@ -67,7 +67,7 @@ - + diff --git a/guides/tags/framework-rails/index.html b/guides/tags/framework-rails/index.html index 2c692dceb3..17a9e461e4 100644 --- a/guides/tags/framework-rails/index.html +++ b/guides/tags/framework-rails/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/index.html b/guides/tags/index.html index 461194ed56..86767f9890 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -44,14 +44,14 @@
                                                                              - +
                                                                              - + - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index 1e09ac1282..612ed7324f 100644 --- a/guides/tags/language-javascript/index.html +++ b/guides/tags/language-javascript/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              - +
                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tags/language-kotlin/index.html b/guides/tags/language-kotlin/index.html index 2af0fba44b..3455fd687e 100644 --- a/guides/tags/language-kotlin/index.html +++ b/guides/tags/language-kotlin/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              - +
                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tags/language-ruby/index.html b/guides/tags/language-ruby/index.html index 65d049d506..2c4012faff 100644 --- a/guides/tags/language-ruby/index.html +++ b/guides/tags/language-ruby/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/language-rust/index.html b/guides/tags/language-rust/index.html index 399eb2ed40..4d80927325 100644 --- a/guides/tags/language-rust/index.html +++ b/guides/tags/language-rust/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                              - +
                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tags/technology-docker/index.html b/guides/tags/technology-docker/index.html index 89e210fad2..13c1c72898 100644 --- a/guides/tags/technology-docker/index.html +++ b/guides/tags/technology-docker/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              -

                                                                              1 guide tagged with "technology: docker"

                                                                              +

                                                                              1 guide tagged with "technology: docker"

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/technology-github/index.html b/guides/tags/technology-github/index.html index 83324161a7..946545d7fb 100644 --- a/guides/tags/technology-github/index.html +++ b/guides/tags/technology-github/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              - +
                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/technology-helm/index.html b/guides/tags/technology-helm/index.html index ebed4cda34..fbe724187b 100644 --- a/guides/tags/technology-helm/index.html +++ b/guides/tags/technology-helm/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              -

                                                                              1 guide tagged with "technology: helm"

                                                                              +

                                                                              1 guide tagged with "technology: helm"

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/technology-qovery/index.html b/guides/tags/technology-qovery/index.html index a98c96df83..88eedd63f3 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -126,14 +126,14 @@
                                                                              -

                                                                              40 guides tagged with "technology: qovery"

                                                                              getting-started

                                                                              1. Hello World. Deploy your first application.

                                                                              read now
                                                                              getting-started

                                                                              2. Create a database

                                                                              read now
                                                                              getting-started

                                                                              3. Custom domain

                                                                              read now
                                                                              getting-started

                                                                              4. Environment variables

                                                                              read now
                                                                              getting-started

                                                                              5. Debugging

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              advanced

                                                                              Build on Top of Qovery

                                                                              read now
                                                                              advanced

                                                                              Continuous Integration

                                                                              read now
                                                                              advanced

                                                                              Costs Control

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              advanced

                                                                              Deploy API Gateway

                                                                              read now
                                                                              advanced

                                                                              Deploy External Services

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              advanced

                                                                              Microservices

                                                                              read now
                                                                              advanced

                                                                              Migration

                                                                              read now
                                                                              advanced

                                                                              Monitoring

                                                                              read now
                                                                              advanced

                                                                              Mono repository

                                                                              read now
                                                                              advanced

                                                                              Preview Environments

                                                                              read now
                                                                              advanced

                                                                              Production

                                                                              read now
                                                                              advanced

                                                                              Seed Database

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              +

                                                                              40 guides tagged with "technology: qovery"

                                                                              getting-started

                                                                              1. Hello World. Deploy your first application.

                                                                              read now
                                                                              getting-started

                                                                              2. Create a database

                                                                              read now
                                                                              getting-started

                                                                              3. Custom domain

                                                                              read now
                                                                              getting-started

                                                                              4. Environment variables

                                                                              read now
                                                                              getting-started

                                                                              5. Debugging

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              advanced

                                                                              Build on Top of Qovery

                                                                              read now
                                                                              advanced

                                                                              Continuous Integration

                                                                              read now
                                                                              advanced

                                                                              Costs Control

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              advanced

                                                                              Deploy API Gateway

                                                                              read now
                                                                              advanced

                                                                              Deploy External Services

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              advanced

                                                                              Microservices

                                                                              read now
                                                                              advanced

                                                                              Migration

                                                                              read now
                                                                              advanced

                                                                              Monitoring

                                                                              read now
                                                                              advanced

                                                                              Mono repository

                                                                              read now
                                                                              advanced

                                                                              Preview Environments

                                                                              read now
                                                                              advanced

                                                                              Production

                                                                              read now
                                                                              advanced

                                                                              Seed Database

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              - + - + @@ -141,7 +141,7 @@ - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 4a0e80f537..d961ef1e6f 100644 --- a/guides/tags/technology-terraform/index.html +++ b/guides/tags/technology-terraform/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@
                                                                              -

                                                                              1 guide tagged with "technology: terraform"

                                                                              +

                                                                              1 guide tagged with "technology: terraform"

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tags/type-guide/index.html b/guides/tags/type-guide/index.html index 63e28f948b..b90c849406 100644 --- a/guides/tags/type-guide/index.html +++ b/guides/tags/type-guide/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -94,14 +94,14 @@
                                                                              - +
                                                                              - + - + @@ -109,7 +109,7 @@ - + diff --git a/guides/tags/type-tutorial/index.html b/guides/tags/type-tutorial/index.html index 35119c64fb..973b9f5ace 100644 --- a/guides/tags/type-tutorial/index.html +++ b/guides/tags/type-tutorial/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -126,14 +126,14 @@
                                                                              -

                                                                              40 guides tagged with "type: tutorial"

                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              +

                                                                              40 guides tagged with "type: tutorial"

                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              - + - + @@ -141,7 +141,7 @@ - + diff --git a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html index fa6fcff82a..5b8d3e9d08 100644 --- a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html +++ b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              How to integrate Amazon SQS and Lambda on Qovery

                                                                              Message queuing service enables you to decouple and scale microservices, distributed systems, and serverless applications. In this guide, we'll show you how to leverage a queue system (Amazon SQS) to build a highly scalable backend.

                                                                              Using Amazon SQS eliminates the complexity and overhead associated with managing and operating message-oriented middleware and empowers developers to focus on differentiating work. With SQS, you can send, store, and receive messages between software components at any volume without losing messages or requiring other services to be available.

                                                                              Goal

                                                                              In this guide, we'll create a backend microservice that sends messages on an event queue. Additionally, we'll go through two ways of consuming and processing those messages:

                                                                              • We will use AWS Lambda to process events from the queue in a serverless way
                                                                              • We will use Qovery-managed backend application workers to process events from the queue

                                                                              AWS SQS Lambda

                                                                              As for now, Qovery does not natively integrate with AWS Lambda and SQS, but the integration part is quite easy, and we will go through it in the following steps.

                                                                              The backend application and workers servers that consume messages from the queue will be fully managed and deployed by Qovery.

                                                                              Let's get started.

                                                                              Configure SQS

                                                                              Open Amazon SQS service in AWS Console and click on Create Queue

                                                                              AWS SQS Lambda

                                                                              We will use the Standard queue and leave all the settings in defaults for now. Type in the name of the queue and click Create.

                                                                              AWS SQS Lambda

                                                                              Create Message Producer

                                                                              In this step, we will deploy an app that pushes messages to the SQS queue. The source code of the app is available here.

                                                                              The source code of the app is simple - it's a web server that sends messages to the SQS queue each time someone hits its API endpoint:

                                                                              const command = new SendMessageCommand({});
                                                                              -
                                                                              client.send(command).then(
                                                                              (data) => {
                                                                              console.log(data);
                                                                              res.end('Success');
                                                                              // process data.
                                                                              },
                                                                              (error) => {
                                                                              console.error(error);
                                                                              res.end('Error');
                                                                              // error handling.
                                                                              }
                                                                              );

                                                                              To deploy the app on Qovery, all you need to do is to fork the repository from above and create a new app adding port 3000:

                                                                              AWS SQS Lambda

                                                                              Afterwards, we need to add two environment variables:

                                                                              • accessKeyId - your AWS access key ID
                                                                              • secretAccessKey - your AWS secret access key

                                                                              You can add them in Environment Variebles Secret section in your application settings:

                                                                              AWS SQS Lambda

                                                                              AWS SQS Lambda

                                                                              After all the setup is all done, click the Deploy button - the application will be shortly deployed.

                                                                              Create Lambda Consumers

                                                                              In AWS Console, open AWS Lambda panel.

                                                                              AWS SQS Lambda

                                                                              For the sake of the guide, we will use a simple hello-world lambda from AWS serverless app repository.

                                                                              Browse the app repository and pick the hello-world function as shown in the screenshot above, and deploy the function

                                                                              AWS SQS Lambda

                                                                              Create Lambda Trigger

                                                                              To make our Lambdas consume messages from SQS, we will need to add a Lambda Trigger in the SQS configuration.

                                                                              AWS SQS Lambda

                                                                              Click on Configure Lambda Function Trigger as shown in the screenshot above and select your lambda function from the dropdown, then save the changes:

                                                                              AWS SQS Lambda

                                                                              Configure Permissions

                                                                              Let's now grant our Lambda functions access to the SQS queue we created before.

                                                                              In our lambda view, click on Configure:

                                                                              AWS SQS Lambda

                                                                              Then, click on a role in Execution role to get redirected to a view where we can alter our Lambda permissions.

                                                                              In the role summary screen, click on Edit policy next to helloWorldrolePolicy

                                                                              AWS SQS Lambda

                                                                              In the SQS section, grant permissions to all Read/Write options in the Actions Access level and accept the changes:

                                                                              AWS SQS Lambda

                                                                              Test Lambda as an SQS Consumer Flow

                                                                              To push messages to our SQS queue from the backend app deployed on Qovery, click on the Open button in the application we deployed in the previous step. It will redirect you to the API endpoint exposed by the backend app - the logic inside the application is made so that it sends messages to the SQS queue.

                                                                              AWS SQS Lambda

                                                                              Now, in the Monitoring section of SQS in AWS Console, we will see messages received on metrics charts:

                                                                              AWS SQS Lambda

                                                                              To validate that our consumer Lambdas processed the messages, navigate to your lambda Monitor panel:

                                                                              AWS SQS Lambda

                                                                              In the Invocations chart, you'll notice that our Lambda was triggered several times by the messages sent over the SQS.

                                                                              Conclusions

                                                                              In this part of the tutorial, we learned how to send messages over from an application deployed on Qovery to SQS and consume them from serverless Lambda functions. In the next part, we will create a scalable group of worker applications deployed by Qovery that consume messages from the same Queue.

                                                                              +
                                                                              client.send(command).then(
                                                                              (data) => {
                                                                              console.log(data);
                                                                              res.end('Success');
                                                                              // process data.
                                                                              },
                                                                              (error) => {
                                                                              console.error(error);
                                                                              res.end('Error');
                                                                              // error handling.
                                                                              }
                                                                              );

                                                                              To deploy the app on Qovery, all you need to do is to fork the repository from above and create a new app adding port 3000:

                                                                              AWS SQS Lambda

                                                                              Afterwards, we need to add two environment variables:

                                                                              • accessKeyId - your AWS access key ID
                                                                              • secretAccessKey - your AWS secret access key

                                                                              You can add them in Environment Variebles Secret section in your application settings:

                                                                              AWS SQS Lambda

                                                                              AWS SQS Lambda

                                                                              After all the setup is all done, click the Deploy button - the application will be shortly deployed.

                                                                              Create Lambda Consumers

                                                                              In AWS Console, open AWS Lambda panel.

                                                                              AWS SQS Lambda

                                                                              For the sake of the guide, we will use a simple hello-world lambda from AWS serverless app repository.

                                                                              Browse the app repository and pick the hello-world function as shown in the screenshot above, and deploy the function

                                                                              AWS SQS Lambda

                                                                              Create Lambda Trigger

                                                                              To make our Lambdas consume messages from SQS, we will need to add a Lambda Trigger in the SQS configuration.

                                                                              AWS SQS Lambda

                                                                              Click on Configure Lambda Function Trigger as shown in the screenshot above and select your lambda function from the dropdown, then save the changes:

                                                                              AWS SQS Lambda

                                                                              Configure Permissions

                                                                              Let's now grant our Lambda functions access to the SQS queue we created before.

                                                                              In our lambda view, click on Configure:

                                                                              AWS SQS Lambda

                                                                              Then, click on a role in Execution role to get redirected to a view where we can alter our Lambda permissions.

                                                                              In the role summary screen, click on Edit policy next to helloWorldrolePolicy

                                                                              AWS SQS Lambda

                                                                              In the SQS section, grant permissions to all Read/Write options in the Actions Access level and accept the changes:

                                                                              AWS SQS Lambda

                                                                              Test Lambda as an SQS Consumer Flow

                                                                              To push messages to our SQS queue from the backend app deployed on Qovery, click on the Open button in the application we deployed in the previous step. It will redirect you to the API endpoint exposed by the backend app - the logic inside the application is made so that it sends messages to the SQS queue.

                                                                              AWS SQS Lambda

                                                                              Now, in the Monitoring section of SQS in AWS Console, we will see messages received on metrics charts:

                                                                              AWS SQS Lambda

                                                                              To validate that our consumer Lambdas processed the messages, navigate to your lambda Monitor panel:

                                                                              AWS SQS Lambda

                                                                              In the Invocations chart, you'll notice that our Lambda was triggered several times by the messages sent over the SQS.

                                                                              Conclusions

                                                                              In this part of the tutorial, we learned how to send messages over from an application deployed on Qovery to SQS and consume them from serverless Lambda functions. In the next part, we will create a scalable group of worker applications deployed by Qovery that consume messages from the same Queue.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/aws-vpc-peering-with-qovery/index.html b/guides/tutorial/aws-vpc-peering-with-qovery/index.html index e19b13309a..39c58858e4 100644 --- a/guides/tutorial/aws-vpc-peering-with-qovery/index.html +++ b/guides/tutorial/aws-vpc-peering-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@ On the peering connection view, click on Actions then Accept request

                                                                              AWS accept VPC peering request

                                                                              You should see your peering connection marked as Active

                                                                              AWS VPC peering active

                                                                            • Update existing VPC route table

                                                                              In the AWS console of your non Qovery VPC, go to VPC > Route Tables. You can filter the list using the IDs you noted at step 1 to find the routing table for your existing VPC.

                                                                              Thanks Kevin M. for your contribution here 😊

                                                                              For your existing VPC edit the route table:

                                                                              AWS VPC Qovery Route Table

                                                                              Click on the Edit routes button then Add route.

                                                                              AWS VPC Qovery Route Table add route

                                                                              • As a destination, enter the CIDR of your Qovery VPC
                                                                              • As a target, select the Peering connection you created earlier

                                                                              Click Save changes.

                                                                            • Update Qovery VPC route table

                                                                              This part needs to be done through the Qovery console.

                                                                              In the cluster settings, under the Network tab, click ADD ROUTE

                                                                              AWS VPC Qovery Route Table add route

                                                                              • As a destination, enter the CIDR of your existing VPC
                                                                              • As a target, enter the ID of the peering connection you created earlier
                                                                              • You can put anything you want as a description.

                                                                              AWS VPC Qovery Route Table add route

                                                                            • Update the security groups

                                                                              Our two VPCs are now connected, but we still need to update the security groups to allow communication between the Qovery applications and your existing resources.

                                                                              What rules to put on your security groups depends on what you are trying to achieve. In our case, we would like to access an RDS instance from our Qovery applications.

                                                                              We will edit the RDS security group in our existing VPC to add an inbound rule allowing PostgreSQL traffic from our Qovery instances:

                                                                              AWS Security Group inbound rules

                                                                            • Deploy an application

                                                                              You should now be able to deploy an application using the RDS PostgreSQL database on your Qovery cluster. -Refer to this guide if you need help deploying an application on Qovery.

                                                                            • You can learn more about VPC peering on AWS here: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html

                                                                              +Refer to this guide if you need help deploying an application on Qovery.

                                                                              You can learn more about VPC peering on AWS here: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html

                                                                              - + - + @@ -66,7 +66,7 @@ - + diff --git a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html index 299705e768..a4deb56e21 100644 --- a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html +++ b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@
                                                                              const imageSchema = new mongoose.Schema({
                                                                              title: String,
                                                                              size: String,
                                                                              source: String
                                                                              });
                                                                              mongoose.connect(databaseUrl);
                                                                              router.get('/', (req, res) => {
                                                                              imageSchema.find().then((data) => {
                                                                              res.json(
                                                                              data
                                                                              )
                                                                              });
                                                                              });

                                                                              Let's now create a new branch in our repository and create a pull request to our production (master branch) environment. Preview Environments feature will spin up a new environment for us so that we can safely test changes we just introduced!

                                                                              AWS Preview Environments

                                                                              Once the PR is created, an automatic comment has been dropped on our PR to let us know that the new preview environment has been created.

                                                                              AWS Preview Environments

                                                                              Now, when we display environments in our project, we will see that a new environment for the pull request is being deployed:

                                                                              AWS Preview Environments

                                                                              with all the resources we need! A database, backend, frontend - we can now test our changes in complete separation from the production without any manual setting up work:

                                                                              AWS Preview Environments

                                                                              Preview Environment Explained

                                                                              The Preview Environment feature can be enabled or disabled per app. It creates a complete copy of your environment so that you can test new changes from pull requests in separation. It deploys your databases, backend, and frontend applications to a completely new environment once a pull request is opened. If you update your pull request, all new changes are also reflected in the new environment so that you can test them or fix problems during the review. What is great is that Qovery takes care of managing all environment variables for you as well, creates new aliases just as you had in your prod environment, so that everything is really tested separately and it all happens automagically. After the pull request is merged, Qovery automatically cleans up the preview environment to save your money.

                                                                              Testing Preview Environments PT II

                                                                              After a few minutes, your preview environment should be up and running. You can now navigate to the frontend app and click Open - in the image gallery, you will see an empty list because we don't yet have any images in the database.

                                                                              You can add a few images manually by connecting to your mongo instance via CLI. The credentials can be found in the database overview:

                                                                              AWS Preview Environments

                                                                              After connecting, let's add images by executing the following:

                                                                              db.createCollection("images")
                                                                              -
                                                                              db.images.insert([
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              },
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              },
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              }
                                                                              ])

                                                                              Now, after opening the frontend app in our preview environment, we will see all the images we put in the database! It looks like the feature is working well, so let's merge the PR:

                                                                              AWS Preview Environments

                                                                              What now happens is automatically after the PR merge, the preview environment is automatically cleaned up:

                                                                              AWS Preview Environments

                                                                              Great job! Thanks to Qovery Preview Environments, we managed to develop a new feature in a complete separation from our production, we tested it in a real environment deployed in the cloud, and we didn't have to spend any time preparing our environment for tests at all.

                                                                              Conclusion

                                                                              In the article, we quickly went through the process of creating a full-stack application with frontend, backend, and database. We enabled the Preview Environment feature to develop new features more quickly. We learned what the benefits of Preview Environments are, how to use them, and how to integrate them to day to day development workflow.

                                                                              +
                                                                              db.images.insert([
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              },
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              },
                                                                              {
                                                                              title: 'IMG_4985.HEIC',
                                                                              size: '3.9 MB',
                                                                              source:
                                                                              'https://images.unsplash.com/photo-1582053433976-25c00369fc93?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=512&q=80',
                                                                              }
                                                                              ])

                                                                              Now, after opening the frontend app in our preview environment, we will see all the images we put in the database! It looks like the feature is working well, so let's merge the PR:

                                                                              AWS Preview Environments

                                                                              What now happens is automatically after the PR merge, the preview environment is automatically cleaned up:

                                                                              AWS Preview Environments

                                                                              Great job! Thanks to Qovery Preview Environments, we managed to develop a new feature in a complete separation from our production, we tested it in a real environment deployed in the cloud, and we didn't have to spend any time preparing our environment for tests at all.

                                                                              Conclusion

                                                                              In the article, we quickly went through the process of creating a full-stack application with frontend, backend, and database. We enabled the Preview Environment feature to develop new features more quickly. We learned what the benefits of Preview Environments are, how to use them, and how to integrate them to day to day development workflow.

                                                                              - + - + @@ -69,7 +69,7 @@ - + diff --git a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html index 9ee9982a65..d5aa12d4cc 100644 --- a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html +++ b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -76,14 +76,14 @@
                                                                              echo "Organization name: ${{ vars.QOVERY_ORGANIZATION_NAME }}"
                                                                              echo "Project name: ${{ vars.QOVERY_PROJECT_NAME }}"
                                                                              echo "Blueprint name: ${{ vars.QOVERY_BLUEPRINT_ENVIRONMENT_NAME }}"
                                                                              new_environment_name="${GITHUB_HEAD_REF}"
                                                                              echo "Let's delete '$new_environment_name' environment and release its resources"
                                                                              -
                                                                              qovery environment delete \
                                                                              --organization "${{ vars.QOVERY_ORGANIZATION_NAME }}" \
                                                                              --project "${{ vars.QOVERY_PROJECT_NAME }}" \
                                                                              --environment "$new_environment_name" \
                                                                              -w

                                                                              The complete file is available here

                                                                              We just use the qovery environment delete command to delete the ephemeral environment. The option -w is used to wait for the deletion to be completed. Qovery will automatically release the resources used by the environment.

                                                                              Wrapping up

                                                                              Congratulations! You've successfully built an automated E2E testing pipeline with GitHub Actions and Qovery. You can now run your tests in a fully isolated environment, provisioned and de-provisioned automatically, and integrated with your GitHub repository.

                                                                              Some resources:

                                                                              +
                                                                              qovery environment delete \
                                                                              --organization "${{ vars.QOVERY_ORGANIZATION_NAME }}" \
                                                                              --project "${{ vars.QOVERY_PROJECT_NAME }}" \
                                                                              --environment "$new_environment_name" \
                                                                              -w

                                                                              The complete file is available here

                                                                              We just use the qovery environment delete command to delete the ephemeral environment. The option -w is used to wait for the deletion to be completed. Qovery will automatically release the resources used by the environment.

                                                                              Wrapping up

                                                                              Congratulations! You've successfully built an automated E2E testing pipeline with GitHub Actions and Qovery. You can now run your tests in a fully isolated environment, provisioned and de-provisioned automatically, and integrated with your GitHub repository.

                                                                              Some resources:

                                                                              - + - + @@ -91,7 +91,7 @@ - + diff --git a/guides/tutorial/cloudwatch-integration/index.html b/guides/tutorial/cloudwatch-integration/index.html index 4a28c05e90..dfeb4c92f6 100644 --- a/guides/tutorial/cloudwatch-integration/index.html +++ b/guides/tutorial/cloudwatch-integration/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -49,14 +49,14 @@
                                                                              env:
                                                                              - name: "AWS_ACCESS_KEY_ID"
                                                                              value: "<your access key>"
                                                                              - name: "AWS_SECRET_ACCESS_KEY"
                                                                              value: "<your secret access key>"
                                                                              firehose:
                                                                              enabled: false
                                                                              kinesis:
                                                                              enabled: false
                                                                              -
                                                                              elasticsearch:
                                                                              enabled: false

                                                                              You can take a look at additional configuration options on the AWS provided chart

                                                                              Then deploy fluent-bit with the following command:

                                                                              helm upgrade --install aws-for-fluent-bit -f values.yaml --namespace fluent-bit --create-namespace eks/aws-for-fluent-bit --version 0.1.21

                                                                              You should start seeing fluent-bit pods. Take a look at the logs to ensure there is no configuration issue.

                                                                              Cloudwatch usage

                                                                              You can now use Cloudwatch to look at your logs. Connect to Cloudwatch, go into the Logs insight section, then you can perform queries:

                                                                              cloudwatch search

                                                                              1. Select the fluent-bit group of logs
                                                                              2. Create a query (syntax examples)
                                                                              3. Run your query
                                                                              4. See the result and expand to filter on other elements
                                                                              +
                                                                              elasticsearch:
                                                                              enabled: false

                                                                              You can take a look at additional configuration options on the AWS provided chart

                                                                              Then deploy fluent-bit with the following command:

                                                                              helm upgrade --install aws-for-fluent-bit -f values.yaml --namespace fluent-bit --create-namespace eks/aws-for-fluent-bit --version 0.1.21

                                                                              You should start seeing fluent-bit pods. Take a look at the logs to ensure there is no configuration issue.

                                                                              Cloudwatch usage

                                                                              You can now use Cloudwatch to look at your logs. Connect to Cloudwatch, go into the Logs insight section, then you can perform queries:

                                                                              cloudwatch search

                                                                              1. Select the fluent-bit group of logs
                                                                              2. Create a query (syntax examples)
                                                                              3. Run your query
                                                                              4. See the result and expand to filter on other elements
                                                                              - + - + @@ -64,7 +64,7 @@ - + diff --git a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html index 2ad30abe0e..017c6367d2 100644 --- a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html +++ b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -64,14 +64,14 @@
                                                                              # list likes from a tweet
                                                                              curl https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                              # add one like to a tweet
                                                                              curl -X POST https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                              # remove one like to a tweet
                                                                              curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>/likes
                                                                              -
                                                                              # delete a tweet
                                                                              curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>

                                                                              What's next

                                                                              In this first part we saw how to create a Rust API with Actix and Diesel. In the second part we will compare its performance with a Go application to see which one is the most performant.

                                                                              Special thanks to Jason and Kokou for your reviews

                                                                              Useful resources

                                                                              Do you want to know more about Rust?

                                                                              Tutorial
                                                                              +
                                                                              # delete a tweet
                                                                              curl -X DELETE https://main-gxbuagyvgnkbrp5l-gtw.qovery.io/tweets/<change_with_a_valid_id>

                                                                              What's next

                                                                              In this first part we saw how to create a Rust API with Actix and Diesel. In the second part we will compare its performance with a Go application to see which one is the most performant.

                                                                              Special thanks to Jason and Kokou for your reviews

                                                                              Useful resources

                                                                              Do you want to know more about Rust?

                                                                              Tutorial
                                                                              - + - + @@ -79,7 +79,7 @@ - + diff --git a/guides/tutorial/create-a-playground-environment-on-aws/index.html b/guides/tutorial/create-a-playground-environment-on-aws/index.html index 85324d8a99..e18d31b4ed 100644 --- a/guides/tutorial/create-a-playground-environment-on-aws/index.html +++ b/guides/tutorial/create-a-playground-environment-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Create a Playground Environment on AWS

                                                                              Step-by-step guide to create a Playground environment on AWS

                                                                              A Playground Environment is an environment where you can do all your testing without impacting an existing environment.

                                                                              Playground environments

                                                                              Here are some use cases where a playground environment is helpful for:

                                                                              • Experimenting: Test your code without the fear to break anything from your original environment.
                                                                              • Benchmarking: You want to stress your application without affecting the original environment.
                                                                              • Debugging: You have a bug in production that you want to reproduce but without impacting the production environment.
                                                                              • Product Demo: Your Sales or Product Manager needs to make an important demo and want to be sure it will work.

                                                                              In this guide, we will create a playground environment on AWS.

                                                                              Create your Playground Environment

                                                                              To create your Playground Environment you simply need to:

                                                                              1. Go into the base environment that you want to clone
                                                                              2. Click on the Actions and Clone button
                                                                              3. Enter a name for your playground environment
                                                                              4. Select the cluster where you want to deploy it
                                                                              5. Set the Environment mode to Development
                                                                              6. Click on the Create button
                                                                              7. Deploy your Playground Environment

                                                                              Once deployed, your applications within this environment will have dedicated URLs to get access to. You can use these URLs to test your application.

                                                                              Then you can check that your playground environment is working by visiting the temporary URL.

                                                                              Delete your Playground Environment

                                                                              To delete your Playground Environment you simply need to:

                                                                              1. Go into the playground environment
                                                                              2. Click on the Actions and Delete button
                                                                              3. Confirm and Delete the environment

                                                                              All the resources will be freed.

                                                                              Optional: Create a Playground Cluster

                                                                              To prevent your playground environment from impacting your production environment, you can create a dedicated cluster. So every playground environments will be on the same cluster and will not disturb your production.

                                                                              Playground environments with 2 clusters

                                                                              Here is how to create a playground cluster.

                                                                              And how to create a playground environment on our playground cluster.

                                                                              Wrapping up

                                                                              In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                              +
                                                                              Stats
                                                                              3 min read
                                                                              Updated

                                                                              A Playground Environment is an environment where you can do all your testing without impacting an existing environment.

                                                                              Playground environments

                                                                              Here are some use cases where a playground environment is helpful for:

                                                                              • Experimenting: Test your code without the fear to break anything from your original environment.
                                                                              • Benchmarking: You want to stress your application without affecting the original environment.
                                                                              • Debugging: You have a bug in production that you want to reproduce but without impacting the production environment.
                                                                              • Product Demo: Your Sales or Product Manager needs to make an important demo and want to be sure it will work.

                                                                              In this guide, we will create a playground environment on AWS.

                                                                              Create your Playground Environment

                                                                              To create your Playground Environment you simply need to:

                                                                              1. Go into the base environment that you want to clone
                                                                              2. Click on the Actions and Clone button
                                                                              3. Enter a name for your playground environment
                                                                              4. Select the cluster where you want to deploy it
                                                                              5. Set the Environment mode to Development
                                                                              6. Click on the Create button
                                                                              7. Deploy your Playground Environment

                                                                              Once deployed, your applications within this environment will have dedicated URLs to get access to. You can use these URLs to test your application.

                                                                              Then you can check that your playground environment is working by visiting the temporary URL.

                                                                              Delete your Playground Environment

                                                                              To delete your Playground Environment you simply need to:

                                                                              1. Go into the playground environment
                                                                              2. Click on the Actions and Delete button
                                                                              3. Confirm and Delete the environment

                                                                              All the resources will be freed.

                                                                              Optional: Create a Playground Cluster

                                                                              To prevent your playground environment from impacting your production environment, you can create a dedicated cluster. So every playground environments will be on the same cluster and will not disturb your production.

                                                                              Playground environments with 2 clusters

                                                                              Here is how to create a playground cluster.

                                                                              And how to create a playground environment on our playground cluster.

                                                                              Wrapping up

                                                                              In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html index a7385299d6..43471cb8c6 100644 --- a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html +++ b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              Step-by-step guide to create your Staging environment from your Production environment on AWS

                                                                              Let's say you have your production environment deployed, and you want to create a staging environment. You have two options:

                                                                              1. Create a staging environment from scratch.
                                                                              2. Clone your production environment and create a staging environment from it.

                                                                              This is where the Environment Clone feature of Qovery is useful. No need to create a new environment, just clone your production environment and create a staging environment from it.

                                                                              In this guide, we will go through the steps to create a staging environment from your production environment. While applying the best practices by isolating the staging and production environments on two separated clusters and VPCs.

                                                                              Complete Production and Staging infrastructure

                                                                              Create a Staging cluster

                                                                              Isolating the staging and production environments on two separate clusters and VPCs is a good practice to avoid any potential issues on your production caused by your staging. This is not a mandatory step, but it is well recommended.

                                                                              To create your staging cluster it's also recommended creating a new AWS IAM access key and secret access key in a dedicated subaccount. Then you are sure that both environment are also isolated at the AWS level:

                                                                              1. Go to your Organization cluster settings
                                                                              2. Add a cluster with a name "staging"
                                                                              3. Deploy your staging cluster

                                                                              Create your Staging environment from your Production environment

                                                                              Now, to create your staging environment from your production environment, you need to:

                                                                              1. Go inside your production environment and click on the "Clone" button.
                                                                              2. Give a name to your staging environment (E.g "staging")
                                                                              3. Set the mode to "Staging"
                                                                              4. Set the cluster to "staging"
                                                                              5. Click on "Create"
                                                                              6. That's it!

                                                                              Your environment has been created, but it's not deployed yet. Before we will make some adjustment to change the branch of our applications.

                                                                              Update your Staging applications

                                                                              Your Staging applications have the same branch as your Production applications. To update your Staging applications branch, you need to:

                                                                              1. Go into the settings of each of your applications.
                                                                              2. Update the branch to your Staging branch.
                                                                              3. Click on "Save"

                                                                              We are almost done, now we need to smartly change our environment variables and secrets to not use the one used in production.

                                                                              Override your environment variables and secrets

                                                                              Let's say you have a production environment with the following environment variables:

                                                                              • NODE_ENV=production
                                                                              • STRIPE_API_KEY=a-secret-production-key

                                                                              You might need to keep the same keys but change the values. That's exactly what Qovery makes you do with the Environment Variable Override feature. You can keep the same keys but change the values.

                                                                              Deploy your Staging environment

                                                                              Finally, your Staging environment has been created and set up correctly. To deploy your Staging environment, you just need to go to your Staging environment and click on the "Deploy" button.

                                                                              Wrapping up

                                                                              In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                              +
                                                                              Stats
                                                                              4 min read
                                                                              Updated

                                                                              Let's say you have your production environment deployed, and you want to create a staging environment. You have two options:

                                                                              1. Create a staging environment from scratch.
                                                                              2. Clone your production environment and create a staging environment from it.

                                                                              This is where the Environment Clone feature of Qovery is useful. No need to create a new environment, just clone your production environment and create a staging environment from it.

                                                                              In this guide, we will go through the steps to create a staging environment from your production environment. While applying the best practices by isolating the staging and production environments on two separated clusters and VPCs.

                                                                              Complete Production and Staging infrastructure

                                                                              Create a Staging cluster

                                                                              Isolating the staging and production environments on two separate clusters and VPCs is a good practice to avoid any potential issues on your production caused by your staging. This is not a mandatory step, but it is well recommended.

                                                                              To create your staging cluster it's also recommended creating a new AWS IAM access key and secret access key in a dedicated subaccount. Then you are sure that both environment are also isolated at the AWS level:

                                                                              1. Go to your Organization cluster settings
                                                                              2. Add a cluster with a name "staging"
                                                                              3. Deploy your staging cluster

                                                                              Create your Staging environment from your Production environment

                                                                              Now, to create your staging environment from your production environment, you need to:

                                                                              1. Go inside your production environment and click on the "Clone" button.
                                                                              2. Give a name to your staging environment (E.g "staging")
                                                                              3. Set the mode to "Staging"
                                                                              4. Set the cluster to "staging"
                                                                              5. Click on "Create"
                                                                              6. That's it!

                                                                              Your environment has been created, but it's not deployed yet. Before we will make some adjustment to change the branch of our applications.

                                                                              Update your Staging applications

                                                                              Your Staging applications have the same branch as your Production applications. To update your Staging applications branch, you need to:

                                                                              1. Go into the settings of each of your applications.
                                                                              2. Update the branch to your Staging branch.
                                                                              3. Click on "Save"

                                                                              We are almost done, now we need to smartly change our environment variables and secrets to not use the one used in production.

                                                                              Override your environment variables and secrets

                                                                              Let's say you have a production environment with the following environment variables:

                                                                              • NODE_ENV=production
                                                                              • STRIPE_API_KEY=a-secret-production-key

                                                                              You might need to keep the same keys but change the values. That's exactly what Qovery makes you do with the Environment Variable Override feature. You can keep the same keys but change the values.

                                                                              Deploy your Staging environment

                                                                              Finally, your Staging environment has been created and set up correctly. To deploy your Staging environment, you just need to go to your Staging environment and click on the "Deploy" button.

                                                                              Wrapping up

                                                                              In this guide, we have covered everything you need to know to create a secure staging environment from your production. Now, you can take a look at how to seed your Staging database (Guide for Postgres but applicable for most databases).

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html index bc953a49dc..2855e60061 100644 --- a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html +++ b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Customizing Preview URL with Qovery CLI

                                                                              How to customize preview url with qovery cli

                                                                              In this quick guide, we will show you how to automatically customize your preview URL when a new environment has been created using the Qovery CLI. By following these steps, you can create a custom domain for your service and link it to your DNS provider.

                                                                              1. Create a Custom Domain for Your Service

                                                                                To create a custom domain for your service, run the following command in your terminal:

                                                                                # Get Pull Request ID from Qovery Environment Variables
                                                                                $ PR_ID=`qovery application env list -n "Backend" --show-values | grep "QOVERY_PROJECT_ID" | awk '{print $10}'`
                                                                                -
                                                                                # Create a custom domain
                                                                                $ qovery application domain create -n "app name" --domain app-$PR_ID.domain.name

                                                                                Replace app name with the name of your application and app.domain.name with your desired custom domain.

                                                                                User --organization, --project, --environment flags to specify the organization, project, and environment where you want to create the custom domain.

                                                                              2. Retrieve the Validation Domain

                                                                                To get the validation domain required for the next step, run the following command:

                                                                                $ qovery application domain list -n "app name" | grep "app-$PR_ID.domain.name" | awk '{print $7}'

                                                                                Replace app name and app.domain.name with the appropriate values. This command will output the validation domain.

                                                                              3. Create a CNAME Record in Your DNS Provider

                                                                                Use the validation domain from the previous step to create a CNAME record in your DNS provider. The CNAME record should point to the validation domain.

                                                                                Example with Route53:

                                                                                $ aws cli route53 change-resource-record-sets --hosted-zone-id "hosted zone id" --change-batch '{"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"app-$PR_ID.domain.name","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":"validation-domain"}]}}]}'

                                                                                Example with Cloudflare:

                                                                                $ curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
                                                                                -H "X-Auth-Email: {email}" \
                                                                                -H "X-Auth-Key: {key}" \
                                                                                -H "Content-Type: application/json" \
                                                                                --data '{"type":"CNAME","name":"app-$PR_ID.domain.name","content":"validation-domain","ttl":1,"proxied":false}'

                                                                                The idea here is to create a CNAME record that points to the validation domain. The validation domain is a temporary domain that is used to validate the ownership of the custom domain.

                                                                              4. Redeploy your application

                                                                                Once the DNS changes have propagated, redeploy your application to complete the process.

                                                                                $ qovery application redeploy -n "app name" -w

                                                                                Your application should now be available at app-{PR ID}.domain.name.

                                                                              Wrapping up

                                                                              Congratulations! You have successfully customized your preview URL using the Qovery CLI. Now, whenever a new environment is created, the custom domain will be automatically configured. If you encounter any issues, please reach out to our support team on the Qovery forum.

                                                                              +
                                                                              # Create a custom domain
                                                                              $ qovery application domain create -n "app name" --domain app-$PR_ID.domain.name

                                                                              Replace app name with the name of your application and app.domain.name with your desired custom domain.

                                                                              User --organization, --project, --environment flags to specify the organization, project, and environment where you want to create the custom domain.

                                                                            • Retrieve the Validation Domain

                                                                              To get the validation domain required for the next step, run the following command:

                                                                              $ qovery application domain list -n "app name" | grep "app-$PR_ID.domain.name" | awk '{print $7}'

                                                                              Replace app name and app.domain.name with the appropriate values. This command will output the validation domain.

                                                                            • Create a CNAME Record in Your DNS Provider

                                                                              Use the validation domain from the previous step to create a CNAME record in your DNS provider. The CNAME record should point to the validation domain.

                                                                              Example with Route53:

                                                                              $ aws cli route53 change-resource-record-sets --hosted-zone-id "hosted zone id" --change-batch '{"Changes":[{"Action":"CREATE","ResourceRecordSet":{"Name":"app-$PR_ID.domain.name","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":"validation-domain"}]}}]}'

                                                                              Example with Cloudflare:

                                                                              $ curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
                                                                              -H "X-Auth-Email: {email}" \
                                                                              -H "X-Auth-Key: {key}" \
                                                                              -H "Content-Type: application/json" \
                                                                              --data '{"type":"CNAME","name":"app-$PR_ID.domain.name","content":"validation-domain","ttl":1,"proxied":false}'

                                                                              The idea here is to create a CNAME record that points to the validation domain. The validation domain is a temporary domain that is used to validate the ownership of the custom domain.

                                                                            • Redeploy your application

                                                                              Once the DNS changes have propagated, redeploy your application to complete the process.

                                                                              $ qovery application redeploy -n "app name" -w

                                                                              Your application should now be available at app-{PR ID}.domain.name.

                                                                            • Wrapping up

                                                                              Congratulations! You have successfully customized your preview URL using the Qovery CLI. Now, whenever a new environment is created, the custom domain will be automatically configured. If you encounter any issues, please reach out to our support team on the Qovery forum.

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tutorial/data-seeding-in-postgres/index.html b/guides/tutorial/data-seeding-in-postgres/index.html index d88791b549..46c6081fac 100644 --- a/guides/tutorial/data-seeding-in-postgres/index.html +++ b/guides/tutorial/data-seeding-in-postgres/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -59,14 +59,14 @@
                                                                              CMD [ "node", "bin/www" ]

                                                                              Add entrypoint.sh file to be executed on each environment where the app container runs:

                                                                              #! /bin/sh
                                                                              node db/index.js
                                                                              # Execute the given or default command:
                                                                              -
                                                                              exec "$@"

                                                                              Example

                                                                              The following examples will show the application of seeding the data in dev environments after cloning an environment and using the Preview Environment feature.

                                                                              Clone Environment

                                                                              Clone environment feature allows you to make a complete clone of a chosen environment, including its all applications, services, and their configs. In the example we will clone a new environment and have our seed data injected automatically.

                                                                              First, we make a clone of our production environment:

                                                                              Seeding Postgres Database

                                                                              Then, we deploy the new environment:

                                                                              Seeding Postgres Database

                                                                              After navigating to deployment logs, we will notice our seed data inserts logged:

                                                                              Seeding Postgres Database

                                                                              Preview Environment

                                                                              Preview Environment feature allows you to automatically create new development environments to validate new changes before merging them to your production branch.

                                                                              First, we open a pull request:

                                                                              Seeding Postgres Database

                                                                              Then, in list of environments, we get a new environment automatically created for the pull request:

                                                                              Seeding Postgres Database

                                                                              When you open the logs of the deployment, you’ll see the seed data injection logs:

                                                                              Seeding Postgres Database

                                                                              +
                                                                              exec "$@"

                                                                              Example

                                                                              The following examples will show the application of seeding the data in dev environments after cloning an environment and using the Preview Environment feature.

                                                                              Clone Environment

                                                                              Clone environment feature allows you to make a complete clone of a chosen environment, including its all applications, services, and their configs. In the example we will clone a new environment and have our seed data injected automatically.

                                                                              First, we make a clone of our production environment:

                                                                              Seeding Postgres Database

                                                                              Then, we deploy the new environment:

                                                                              Seeding Postgres Database

                                                                              After navigating to deployment logs, we will notice our seed data inserts logged:

                                                                              Seeding Postgres Database

                                                                              Preview Environment

                                                                              Preview Environment feature allows you to automatically create new development environments to validate new changes before merging them to your production branch.

                                                                              First, we open a pull request:

                                                                              Seeding Postgres Database

                                                                              Then, in list of environments, we get a new environment automatically created for the pull request:

                                                                              Seeding Postgres Database

                                                                              When you open the logs of the deployment, you’ll see the seed data injection logs:

                                                                              Seeding Postgres Database

                                                                              - + - + @@ -74,7 +74,7 @@ - + diff --git a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html index 9d6171ab0f..c14d8f681e 100644 --- a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html +++ b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -99,14 +99,14 @@
                                                                              # Execute the given or default command:
                                                                              exec "$@"

                                                                              Make this script executable:

                                                                              chmod +x docker-entrypoint.sh

                                                                              Deploy your application to Qovery

                                                                              1. Create a project

                                                                                Now that your Rails application is ready to be dockerized, we can create a project on the Qovery console:

                                                                                Qovery console

                                                                              2. Create an environment

                                                                                Now we'll create an environment. Let's start with our staging environment:

                                                                                Qovery console

                                                                                Qovery console

                                                                              3. Add your Rails app

                                                                                We'll now add our Rails app to the environment:

                                                                                Qovery console

                                                                                On the form you'll need to enter the following information:

                                                                                • The app name: it can be whatever you want. Here web.
                                                                                • Pick your Git privider, then the repository for your application
                                                                                • The branch you want to deploy for this application. We chose main
                                                                                • The Root application path. In case your application is not at the root of your repository (e.g. you have a monorepo), otherwise it will be /.
                                                                                • For the Build mode, pick Dockerfile.
                                                                                • Enter the path to your Dockerfile.

                                                                                Qovery console

                                                                                Qovery console

                                                                                You can then click Create. You'll be redirected to your application dashboard.

                                                                                Qovery console

                                                                              4. Add a PostgreSQL database

                                                                                Our application will use a PostgreSQL database. Let's add one to our environment:

                                                                                Click on ADD, then Database

                                                                                Qovery console

                                                                                • Give a name to your database.
                                                                                • For the Type, select POSTGRESQL.
                                                                                • For the Mode, we'll pick CONTAINER.
                                                                                • Chose the Version you need.

                                                                                Qovery console

                                                                                You can then click Create

                                                                              5. Add a Redis database

                                                                                Since we're using Sidekiq, we'll also need a Redis database as a backend.

                                                                                If you didn't close the Database modal, you can click the ADD button, then in the dropbox for Database 2 click Create database.

                                                                                Qovery console

                                                                                Fill the form the same way you did for PostgreSQL:

                                                                                Qovery console

                                                                                Click Create and close the Databases modal.

                                                                                Qovery console

                                                                              6. Configure your application ENV variables

                                                                                Go back to your environment view:

                                                                                Qovery console

                                                                                Then click on your application:

                                                                                Qovery console

                                                                                On your application dashboard, go to Environment variables:

                                                                                Qovery console

                                                                                Here you can add any environment variable your application needs.

                                                                                We'll now configure a few secrets for our application. Click on the Secret variables tab:

                                                                                Qovery console

                                                                                First since our Demo application uses the Rails Encrypted Secrets, we'll add the RAILS_MASTER_KEY secret Click on CREATE SECRET, then fill the form:

                                                                                • Variable: enter the variable name, RAILS_MASTER_KEY.
                                                                                • Value: enter the actual value for your RAILS_MASTER_KEY.
                                                                                • Scope: chose ENVIRONMENT since the secret will be used by our Sidekiq worker too.

                                                                                Qovery console

                                                                                Now we'll need to add the DATABASE_URL and REDIS_URL, that Rails will use to connect to PostgreSQL and Redis. Those are secrets as well, since the URLs contain passwords.

                                                                                But instead of creating new secrets like we did for the RAILS_MASTER_KEY, we'll use aliases. Aliases are just a way of giving a different name to an existing ENV variable or secret. -Since Qovery provides us with the secrets corresponding to the two databases we created earlier, we can alias them.

                                                                                First, create an alias to the QOVERY_POSTGRESQL_ZXXXXXXXX_DATABASE_URL_INTERNAL:

                                                                                Qovery console

                                                                                In the form, chose DATABASE_URL for the alias name and set it at the ENVIRONMENT level:

                                                                                Qovery console

                                                                                Click Create then do the same thing with a REDIS_URL alias to the QOVERY_REDIS_ZXXXXXXXX_DATABASE_URL_INTERNAL.

                                                                                You should see your two aliases created:

                                                                                Qovery console

                                                                              7. Deploy the environment

                                                                                Go back to the staging environment view and deploy it:

                                                                                Qovery console

                                                                                You should see it switch to the DEPLOYING status. Wait until the status turns to RUNNING.

                                                                                Qovery console

                                                                                Once your environment is RUNNING, open the web application to see if it works. It will open a new tab showing your application.

                                                                                Qovery console

                                                                              8. Add the Sidekiq worker

                                                                                The last step is to add your Sidekiq Worker. We'll follow the same steps as in the Add your Rails app section with a few differences:

                                                                                Add a new application:

                                                                                Qovery console

                                                                                The settigs are the same as for the Rails application, except:

                                                                                • We use the Dockerfile.sidekiq Dockerfile this time
                                                                                • We don't declare a port since our worker is not a web service but communicates with our application through Redis.

                                                                                Qovery console

                                                                                Qovery console

                                                                                Click Create.

                                                                                If we check the ENV variables and secrets, we notice that it directly inherited the ones we set at the Environment level. So we don't need to do the configuration again.

                                                                                Qovery console

                                                                                You can now deploy your worker application:

                                                                                Qovery console

                                                                                Wait for it to switch to the RUNNING status.

                                                                              Conclusion

                                                                              You now have a Rails application with PostgreSQL and Sidekiq running on Qovery.

                                                                              +Since Qovery provides us with the secrets corresponding to the two databases we created earlier, we can alias them.

                                                                              First, create an alias to the QOVERY_POSTGRESQL_ZXXXXXXXX_DATABASE_URL_INTERNAL:

                                                                              Qovery console

                                                                              In the form, chose DATABASE_URL for the alias name and set it at the ENVIRONMENT level:

                                                                              Qovery console

                                                                              Click Create then do the same thing with a REDIS_URL alias to the QOVERY_REDIS_ZXXXXXXXX_DATABASE_URL_INTERNAL.

                                                                              You should see your two aliases created:

                                                                              Qovery console

                                                                            • Deploy the environment

                                                                              Go back to the staging environment view and deploy it:

                                                                              Qovery console

                                                                              You should see it switch to the DEPLOYING status. Wait until the status turns to RUNNING.

                                                                              Qovery console

                                                                              Once your environment is RUNNING, open the web application to see if it works. It will open a new tab showing your application.

                                                                              Qovery console

                                                                            • Add the Sidekiq worker

                                                                              The last step is to add your Sidekiq Worker. We'll follow the same steps as in the Add your Rails app section with a few differences:

                                                                              Add a new application:

                                                                              Qovery console

                                                                              The settigs are the same as for the Rails application, except:

                                                                              • We use the Dockerfile.sidekiq Dockerfile this time
                                                                              • We don't declare a port since our worker is not a web service but communicates with our application through Redis.

                                                                              Qovery console

                                                                              Qovery console

                                                                              Click Create.

                                                                              If we check the ENV variables and secrets, we notice that it directly inherited the ones we set at the Environment level. So we don't need to do the configuration again.

                                                                              Qovery console

                                                                              You can now deploy your worker application:

                                                                              Qovery console

                                                                              Wait for it to switch to the RUNNING status.

                                                                            • Conclusion

                                                                              You now have a Rails application with PostgreSQL and Sidekiq running on Qovery.

                                                                              - + - + @@ -114,7 +114,7 @@ - + diff --git a/guides/tutorial/deploy-temporal-on-kubernetes/index.html b/guides/tutorial/deploy-temporal-on-kubernetes/index.html index b8d743e4b6..cca402b9d8 100644 --- a/guides/tutorial/deploy-temporal-on-kubernetes/index.html +++ b/guides/tutorial/deploy-temporal-on-kubernetes/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@ Save the settings and close the modal.

                                                                              Qovery - Disable Public Port

                                                                            • Add a PostgreSQL database

                                                                              We will now add a PostgreSQL database to serve as a persistence layer to our Temporal server.

                                                                              Click on Add then Database then fill the form:

                                                                              • Pick a name for your DB.
                                                                              • Type: PostgreSQL
                                                                              • Mode: Container (less expensive than Managed for non-production environments)
                                                                              • Version: 13
                                                                              • Accessibility: Private

                                                                              Qovery - Add Database

                                                                              Qovery - Configure PosgreSQL

                                                                              Your database is created:

                                                                              Qovery - Application Created

                                                                              Don't deploy it. We're not done setting-up our environment.

                                                                            • Set the environment variables

                                                                              Now we need to set a bunch of environment variables. Go back to your Temporal server app and click on Environment variables:

                                                                              Qovery - Environment Variables

                                                                              Add the following environment variables:

                                                                              • DB=postgresql
                                                                              • LOG_LEVEL=debug,info

                                                                              Now create the following aliases on environment variables:

                                                                              • QOVERY_POSTGRESQL_Z[DB ID]_HOST_INTERNAL: POSTGRES_SEEDS
                                                                              • QOVERY_POSTGRESQL_[DB ID]_LOGIN: POSTGRES_USER
                                                                              • QOVERY_POSTGRESQL_[DB ID]_PORT: DB_PORT

                                                                              On an alias on secrets:

                                                                              • QOVERY_POSTGRESQL_[DB ID]_PASSWORD: POSTGRES_PWD
                                                                            • Deploy the Web UI

                                                                              1. Create the Temporal UI application

                                                                                Now go to the environment level, and click on Add. Similar to what you did for the server:

                                                                                • Select your forked GitHub repository.
                                                                                • Select Dockerfile as the build mode.
                                                                                • Put Dockerfile.web for the Dockerfile path.
                                                                                • Put 8088 as a port.
                                                                                • Click Create.

                                                                                Qovery - Create application 1

                                                                                Qovery - Create application 2

                                                                              2. Get the application ID of the Temporal server

                                                                                To get the application ID of the Temporal server, go back to the corresponding app, and note the first part of the UUID in the browser URL.

                                                                                Qovery - Get Application ID

                                                                                Copy this ID somewhere.

                                                                              3. Set the environment variables

                                                                                Add the following environment variable:

                                                                                • TEMPORAL_SERVER_PORT: 7233

                                                                                Now create the following alias on environment variables:

                                                                                • QOVERY_APPLICATION_Z[SERVER APPLICATION ID]_HOST_INTERNAL: TEMPORAL_SERVER_HOST

                                                                              Deploy your environment

                                                                              You can now deploy your environment. Go back to your environment view and click DEPLOY.

                                                                              Qovery - Deploy Application

                                                                              Once it's deployed and the status is RUNNING, you can go to the Web UI application and open it.

                                                                              Qovery - Open Application

                                                                              If you see the Temporal Web UI with no error, well done. Your server is deployed!

                                                                              Temporal - UI

                                                                              Split the temporal services for independent scaling.

                                                                              Temporal server is composed of four different services. By default, they will all be running in the same process. But if you would like to scale them independently, you still have the option to deploy them separately.

                                                                              See the Temporal docs for more information on the architecture: https://docs.temporal.io/docs/concepts/what-is-a-temporal-cluster

                                                                              1. Clone your environment

                                                                                We could start again from scratch or edit the running environment (which would require resetting the DB), but instead we will leverage the clone feature of Qovery, to start with an identical, clean environment.

                                                                                On your environment page, click Actions then Clone.

                                                                                Qovery - Clone Environment

                                                                                Pick a name and click Create

                                                                                Qovery - Clone Modal

                                                                                You will land in an identical environment, not deployed yet. Don't deploy it right away, we will first split our services.

                                                                              2. Switch your server service to frontend gateway

                                                                                First we will rename the server application to call it temporal-frontend. Go to the server application and click Settings. Then change the name and save.

                                                                                Qovery - Clone Modal

                                                                              3. Add an env variable to flag the service

                                                                                In order to tell our application that it should only start the frontend service, we'll add an env variable with the APPLICATION scope:

                                                                                • SERVICES=frontend
                                                                              4. Create the other services

                                                                                Create three new application, following the steps you did for the server initially:

                                                                                • temporal-history with an env variable SERVICES=history.
                                                                                • temporal-matching with an env variable SERVICES=matching.
                                                                                • temporal-worker with an env variable SERVICES=worker.

                                                                                Each time set the port to 7233 and disable the public endpoint.

                                                                                You should end up with something like this:

                                                                                Qovery - Environment

                                                                              5. Deploy your environment

                                                                                You can now deploy your environment. -Once it is RUNNING, you can open the UI again and check everything is ok.

                                                                              Conclusion

                                                                              We have successfully deployed Temporal on Qovery. It can be useful for Staging or Preview environments but this is a very minimal deployment and we would not advise doing it for production.

                                                                              There is no one-size-fits-all configuration for this type of products.

                                                                              You would probably like to setup authentication on your Web UI as well. We include the config file in the GitHub repository. You can edit it to your needs, following this documentation.

                                                                              For deploying on your Kubernetes cluster, check the documentation and the following article: https://docs.temporal.io/blog/temporal-and-kubernetes. The first video is worth watching.

                                                                              +Once it is RUNNING, you can open the UI again and check everything is ok.

                                                                              Conclusion

                                                                              We have successfully deployed Temporal on Qovery. It can be useful for Staging or Preview environments but this is a very minimal deployment and we would not advise doing it for production.

                                                                              There is no one-size-fits-all configuration for this type of products.

                                                                              You would probably like to setup authentication on your Web UI as well. We include the config file in the GitHub repository. You can edit it to your needs, following this documentation.

                                                                              For deploying on your Kubernetes cluster, check the documentation and the following article: https://docs.temporal.io/blog/temporal-and-kubernetes. The first video is worth watching.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tutorial/generate-qovery-api-client/index.html b/guides/tutorial/generate-qovery-api-client/index.html index 7cbcfe8af8..a1efa35c26 100644 --- a/guides/tutorial/generate-qovery-api-client/index.html +++ b/guides/tutorial/generate-qovery-api-client/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@ After generating the client, we simply published the out/client folder as a Git Repository and then simply imported the code in the CLI application as a dependency:

                                                                              package utils
                                                                              import (
                                                                              "github.com/qovery/qovery-client-go"
                                                                              )

                                                                              This allowed us to use the generated client code to interact with Qovery API very easily:

                                                                              token, err := GetAccessToken()
                                                                              if err != nil {
                                                                              return err
                                                                              }
                                                                              auth := context.WithValue(context.Background(), qovery.ContextAccessToken, string(token))
                                                                              client := qovery.NewAPIClient(qovery.NewConfiguration())
                                                                              -
                                                                              organizations, res, err := client.OrganizationMainCallsApi.ListOrganization(auth).Execute()
                                                                              if err != nil {
                                                                              return err
                                                                              }
                                                                              if res.StatusCode >= 400 {
                                                                              return errors.New("Received " + res.Status + " response while listing organizations. ")
                                                                              }

                                                                              Summary

                                                                              Qovery Open API specification allows creating Qovery API stubs extremely quickly. At Qovery, we officially support only Golang Client, but if you use a different language, you can generate your own client in a matter of seconds following the steps of this article.

                                                                              +
                                                                              organizations, res, err := client.OrganizationMainCallsApi.ListOrganization(auth).Execute()
                                                                              if err != nil {
                                                                              return err
                                                                              }
                                                                              if res.StatusCode >= 400 {
                                                                              return errors.New("Received " + res.Status + " response while listing organizations. ")
                                                                              }

                                                                              Summary

                                                                              Qovery Open API specification allows creating Qovery API stubs extremely quickly. At Qovery, we officially support only Golang Client, but if you use a different language, you can generate your own client in a matter of seconds following the steps of this article.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html index bcc8fc6faf..b6283a7596 100644 --- a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html +++ b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Getting Started with Preview Environments on AWS

                                                                              Step-by-step guide to get started with the preview environment on AWS

                                                                              It is critical to have testing and staging environments accurately reflect production, but achieving this can be a major operational hassle. Most engineering teams use a single staging environment which makes it hard for developers to test their changes in isolation; the alternative is for DevOps teams to spin up new testing or staging environments manually and tear them down after testing is done.

                                                                              Qovery’s Preview Environments solve this problem by automatically creating a clone of your production environment (including applications, databases and configuration) on every pull request, so you can test your changes with confidence without affecting your production.

                                                                              Flow on how Qovery Preview Environment works

                                                                              Qovery keeps your preview environments up to date on every commit and automatically destroys them when the original pull request is merged or closed. You can also set up an expiry time to automatically clean up preview environments after a period of inactivity.

                                                                              Preview Environments can be helpful in a lot of cases:

                                                                              • Share your changes live in code reviews: no more Git diffs for visual changes!
                                                                              • Get shareable links for upcoming features and collaborate more effectively with internal and external stakeholders.
                                                                              • Run CI tests against a high fidelity copy of your production environment before merging.

                                                                              In this step-by-step guide you will learn how to get started using the Preview Environments on AWS with Qovery.

                                                                              Please contact us via our forum if you have any questions concerning the Preview Environments

                                                                              Steps

                                                                              1. Create a "Blueprint" environment
                                                                              2. Enable Preview Environment feature
                                                                              3. Create a Preview Environment
                                                                              4. Delete a Preview Environment
                                                                              5. Seed your database
                                                                              6. Auto stop and start your Preview Environments
                                                                              7. Integrate your CI (Continuous Deployment) platform

                                                                              Create your Blueprint Environment

                                                                              Even if not required, we recommend creating an environment that will serve as a root to create your Preview Environments. The idea is to keep this environment as a template of a fully working environment. This environment should not be directly used. This is what we call "blueprint environment".

                                                                              I assume you already have a working environment, so to create a blueprint environment you need to:

                                                                              1. Go to your working environment
                                                                              2. Click on "Actions" > "Clone"
                                                                              3. Name your environment "blueprint"
                                                                              4. Click on "Create"

                                                                              Enable Preview Environment

                                                                              Now, you can go to turn on Preview Environments by:

                                                                              1. Click on your Blueprint environment "Settings".
                                                                              2. Click on the Preview Env. tab
                                                                              3. Turn on Preview Environment feature for all your applications by clicking on Activate preview environment for all apps.

                                                                              Change your base branch

                                                                              Now that you have turned on the Preview Environment feature, you need to change the base branch from your applications inside your Blueprint Environment. Let's say, every new feature branch you create are coming from staging. Then you will need to change all your applications to target the staging branch.

                                                                              Here is a flow example showing what happen when you create a new Pull Request from a feat/xxx branch that has been created from the base branch staging.

                                                                              Flow on how Qovery Preview Environment Branching works

                                                                              1. A developer creates a git branch feat/xxx is created from staging.
                                                                              2. A developer creates a Pull Request for feat/xxx.
                                                                              3. Qovery creates a Preview Environment feat/xxx from the blueprint environment. The frontend, backend, PostgreSQL and Redis instances are cloned!
                                                                              4. The frontend app from the environment feat/xxx is accessible via a dedicated URL.

                                                                              Validate your Blueprint Environment

                                                                              Before creating a Preview Environment, validate that your Blueprint environment works.

                                                                              Once done, you need to:

                                                                              1. Stop your Blueprint environment by clicking on "Actions" > "Stop".
                                                                              2. Turn off "auto-deploy" by clicking on "Settings" > "Deployment" > "Auto-deploy off" > "Save".

                                                                              We are now ready to try out our Preview Environment configuration.

                                                                              Create a Preview Environment

                                                                              To create a Preview Environment, here are the steps:

                                                                              1. Checkout your staging branch.
                                                                              2. Create a branch test_qovery_preview_environment and push it.
                                                                              3. Create a Pull Request/Merge Request.

                                                                              You must see a new environment appearing in your environment list on Qovery. Wait until it is fully deployed, then you will be able to connect to it. This environment is fully isolated from your base environment.

                                                                              Delete a Preview Environment

                                                                              To delete you need to merge test_qovery_preview_environment into staging. You also have the ability to delete it manually on Qovery.

                                                                              Advanced

                                                                              Eager to know how to go integrate Qovery Preview Environments with your CI and much more? Check out our the following guides:

                                                                              Wrapping up

                                                                              Congrats! You have set up your Preview Environments features. Feel free to check out our forum and open a thread if you have any question. In the next guide, we will go deeper configuration to integrate the Preview Environment with your existing products and workflow.

                                                                              +
                                                                              Stats
                                                                              6 min read
                                                                              Updated

                                                                              It is critical to have testing and staging environments accurately reflect production, but achieving this can be a major operational hassle. Most engineering teams use a single staging environment which makes it hard for developers to test their changes in isolation; the alternative is for DevOps teams to spin up new testing or staging environments manually and tear them down after testing is done.

                                                                              Qovery’s Preview Environments solve this problem by automatically creating a clone of your production environment (including applications, databases and configuration) on every pull request, so you can test your changes with confidence without affecting your production.

                                                                              Flow on how Qovery Preview Environment works

                                                                              Qovery keeps your preview environments up to date on every commit and automatically destroys them when the original pull request is merged or closed. You can also set up an expiry time to automatically clean up preview environments after a period of inactivity.

                                                                              Preview Environments can be helpful in a lot of cases:

                                                                              • Share your changes live in code reviews: no more Git diffs for visual changes!
                                                                              • Get shareable links for upcoming features and collaborate more effectively with internal and external stakeholders.
                                                                              • Run CI tests against a high fidelity copy of your production environment before merging.

                                                                              In this step-by-step guide you will learn how to get started using the Preview Environments on AWS with Qovery.

                                                                              Please contact us via our forum if you have any questions concerning the Preview Environments

                                                                              Steps

                                                                              1. Create a "Blueprint" environment
                                                                              2. Enable Preview Environment feature
                                                                              3. Create a Preview Environment
                                                                              4. Delete a Preview Environment
                                                                              5. Seed your database
                                                                              6. Auto stop and start your Preview Environments
                                                                              7. Integrate your CI (Continuous Deployment) platform

                                                                              Create your Blueprint Environment

                                                                              Even if not required, we recommend creating an environment that will serve as a root to create your Preview Environments. The idea is to keep this environment as a template of a fully working environment. This environment should not be directly used. This is what we call "blueprint environment".

                                                                              I assume you already have a working environment, so to create a blueprint environment you need to:

                                                                              1. Go to your working environment
                                                                              2. Click on "Actions" > "Clone"
                                                                              3. Name your environment "blueprint"
                                                                              4. Click on "Create"

                                                                              Enable Preview Environment

                                                                              Now, you can go to turn on Preview Environments by:

                                                                              1. Click on your Blueprint environment "Settings".
                                                                              2. Click on the Preview Env. tab
                                                                              3. Turn on Preview Environment feature for all your applications by clicking on Activate preview environment for all apps.

                                                                              Change your base branch

                                                                              Now that you have turned on the Preview Environment feature, you need to change the base branch from your applications inside your Blueprint Environment. Let's say, every new feature branch you create are coming from staging. Then you will need to change all your applications to target the staging branch.

                                                                              Here is a flow example showing what happen when you create a new Pull Request from a feat/xxx branch that has been created from the base branch staging.

                                                                              Flow on how Qovery Preview Environment Branching works

                                                                              1. A developer creates a git branch feat/xxx is created from staging.
                                                                              2. A developer creates a Pull Request for feat/xxx.
                                                                              3. Qovery creates a Preview Environment feat/xxx from the blueprint environment. The frontend, backend, PostgreSQL and Redis instances are cloned!
                                                                              4. The frontend app from the environment feat/xxx is accessible via a dedicated URL.

                                                                              Validate your Blueprint Environment

                                                                              Before creating a Preview Environment, validate that your Blueprint environment works.

                                                                              Once done, you need to:

                                                                              1. Stop your Blueprint environment by clicking on "Actions" > "Stop".
                                                                              2. Turn off "auto-deploy" by clicking on "Settings" > "Deployment" > "Auto-deploy off" > "Save".

                                                                              We are now ready to try out our Preview Environment configuration.

                                                                              Create a Preview Environment

                                                                              To create a Preview Environment, here are the steps:

                                                                              1. Checkout your staging branch.
                                                                              2. Create a branch test_qovery_preview_environment and push it.
                                                                              3. Create a Pull Request/Merge Request.

                                                                              You must see a new environment appearing in your environment list on Qovery. Wait until it is fully deployed, then you will be able to connect to it. This environment is fully isolated from your base environment.

                                                                              Delete a Preview Environment

                                                                              To delete you need to merge test_qovery_preview_environment into staging. You also have the ability to delete it manually on Qovery.

                                                                              Advanced

                                                                              Eager to know how to go integrate Qovery Preview Environments with your CI and much more? Check out our the following guides:

                                                                              Wrapping up

                                                                              Congrats! You have set up your Preview Environments features. Feel free to check out our forum and open a thread if you have any question. In the next guide, we will go deeper configuration to integrate the Preview Environment with your existing products and workflow.

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/github-organization-repository-access/index.html b/guides/tutorial/github-organization-repository-access/index.html index e21d4bff8c..305474b653 100644 --- a/guides/tutorial/github-organization-repository-access/index.html +++ b/guides/tutorial/github-organization-repository-access/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              How to use Github Organizations with Qovery

                                                                              How to configure Github and Qovery to use your Github Organization repositories with Qovery

                                                                              When you create a new application, you need to connect it to a Git repository. If your code is stored in a Github Organization, Qovery needs privileges to access your Organization's repositories -in order to run deployments.

                                                                              Github Organization

                                                                              If Organization repositories are missing in the repository selector, you will need to grant Qovery access to your organization.

                                                                              1. Navigate to Qovery Github Application

                                                                              2. Make sure Qovery has access to the organization you want to use (grant permissions if necessary)

                                                                                Github Organization

                                                                              After following the steps from above, you should be able to select your organization repositories in Qovery Console while creating an application.

                                                                              +in order to run deployments.

                                                                              Github Organization

                                                                              If Organization repositories are missing in the repository selector, you will need to grant Qovery access to your organization.

                                                                              1. Navigate to Qovery Github Application

                                                                              2. Make sure Qovery has access to the organization you want to use (grant permissions if necessary)

                                                                                Github Organization

                                                                              After following the steps from above, you should be able to select your organization repositories in Qovery Console while creating an application.

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tutorial/grafana-install/index.html b/guides/tutorial/grafana-install/index.html index d522c0e111..fe5e5a8ad2 100644 --- a/guides/tutorial/grafana-install/index.html +++ b/guides/tutorial/grafana-install/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              Grafana setup with Qovery

                                                                              Easily setup Grafana with Qovery

                                                                              Grafana is a famous Open Source solution to observe graphs and logs, supporting many data sources.

                                                                              This tutorial explains how to install Grafana on Qovery, and you will see how easy it is.

                                                                              Grafana setup

                                                                              First of all, create a project and an environment. Then let's create Grafana application.

                                                                              Create a Grafana application

                                                                              Connect to the console and add a new application:

                                                                              create gafana app

                                                                              1. Set an application name
                                                                              2. Select the application source type: Container registry
                                                                              3. Select DockerHub Public (or the one you have. If you do not have one, create a registry pointing to DockerHub)
                                                                              4. Set the image name: grafana/grafana
                                                                              5. Take a look at the latest Grafana tags and set the tag you want to use (do not use latest one to avoid later issues)

                                                                              Then set the resources to 1 instance and let other default values (Grafana doesn't consume a lot of resources):

                                                                              set resources

                                                                              Add a port mapping to the application, and set it to 3000:

                                                                              set port

                                                                              Finally, click on the Create button:

                                                                              create app

                                                                              Configure database storage

                                                                              We're now going to create a volume that will contain Grafana default database:

                                                                              create app

                                                                              Go into Settings > Storage > Add Storage. Set the Path to /var/lib/grafana and the Size to 4Gi. Click on Create.

                                                                              Usage

                                                                              Now you can deploy Grafana :). On the top right, you have the Open links button which will help you to get quick access. Then connect with those credentials:

                                                                              • Login: admin
                                                                              • Password: admin

                                                                              Cloudwatch Datasource

                                                                              You can add several data sources to Grafana. One we recommend at Qovery for full-text search is Cloudwatch. First of all, you have to follow this guide to ensure all your logs are sent to Cloudwatch. Then, you can add a new data source in Grafana:

                                                                              grafana cloudwatch

                                                                              We advise you to use assume role or use a dedicated service account in read-only to access your logs. In this case, those permissions will be required:

                                                                              {
                                                                              "Version": "2012-10-17",
                                                                              "Statement": [
                                                                              {
                                                                              "Sid": "AllowReadingLogsFromCloudWatch",
                                                                              "Effect": "Allow",
                                                                              "Action": [
                                                                              "logs:DescribeLogGroups",
                                                                              "logs:GetLogGroupFields",
                                                                              "logs:StartQuery",
                                                                              "logs:StopQuery",
                                                                              "logs:GetQueryResults",
                                                                              "logs:GetLogEvents"
                                                                              ],
                                                                              "Resource": "*"
                                                                              },
                                                                              {
                                                                              "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
                                                                              "Effect": "Allow",
                                                                              "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
                                                                              "Resource": "*"
                                                                              },
                                                                              {
                                                                              "Sid": "AllowReadingResourcesForTags",
                                                                              "Effect": "Allow",
                                                                              "Action": "tag:GetResources",
                                                                              "Resource": "*"
                                                                              }
                                                                              ]
                                                                              }

                                                                              More info: https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/

                                                                              Once done, you're able to create dashboards using Cloudwatch datasource and perform queries to your logs.

                                                                              Links

                                                                              +The currently used database is stored on the volume, so data will be lost on an application deletion. Qovery is going to implement configuration files for Docker in the coming weeks

                                                                              Create a Grafana application

                                                                              Connect to the console and add a new application:

                                                                              create gafana app

                                                                              1. Set an application name
                                                                              2. Select the application source type: Container registry
                                                                              3. Select DockerHub Public (or the one you have. If you do not have one, create a registry pointing to DockerHub)
                                                                              4. Set the image name: grafana/grafana
                                                                              5. Take a look at the latest Grafana tags and set the tag you want to use (do not use latest one to avoid later issues)

                                                                              Then set the resources to 1 instance and let other default values (Grafana doesn't consume a lot of resources):

                                                                              set resources

                                                                              Add a port mapping to the application, and set it to 3000:

                                                                              set port

                                                                              Finally, click on the Create button:

                                                                              create app

                                                                              Configure database storage

                                                                              We're now going to create a volume that will contain Grafana default database:

                                                                              create app

                                                                              Go into Settings > Storage > Add Storage. Set the Path to /var/lib/grafana and the Size to 4Gi. Click on Create.

                                                                              Usage

                                                                              Now you can deploy Grafana :). On the top right, you have the Open links button which will help you to get quick access. Then connect with those credentials:

                                                                              • Login: admin
                                                                              • Password: admin

                                                                              Cloudwatch Datasource

                                                                              You can add several data sources to Grafana. One we recommend at Qovery for full-text search is Cloudwatch. First of all, you have to follow this guide to ensure all your logs are sent to Cloudwatch. Then, you can add a new data source in Grafana:

                                                                              grafana cloudwatch

                                                                              We advise you to use assume role or use a dedicated service account in read-only to access your logs. In this case, those permissions will be required:

                                                                              {
                                                                              "Version": "2012-10-17",
                                                                              "Statement": [
                                                                              {
                                                                              "Sid": "AllowReadingLogsFromCloudWatch",
                                                                              "Effect": "Allow",
                                                                              "Action": [
                                                                              "logs:DescribeLogGroups",
                                                                              "logs:GetLogGroupFields",
                                                                              "logs:StartQuery",
                                                                              "logs:StopQuery",
                                                                              "logs:GetQueryResults",
                                                                              "logs:GetLogEvents"
                                                                              ],
                                                                              "Resource": "*"
                                                                              },
                                                                              {
                                                                              "Sid": "AllowReadingTagsInstancesRegionsFromEC2",
                                                                              "Effect": "Allow",
                                                                              "Action": ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
                                                                              "Resource": "*"
                                                                              },
                                                                              {
                                                                              "Sid": "AllowReadingResourcesForTags",
                                                                              "Effect": "Allow",
                                                                              "Action": "tag:GetResources",
                                                                              "Resource": "*"
                                                                              }
                                                                              ]
                                                                              }

                                                                              More info: https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/

                                                                              Once done, you're able to create dashboards using Cloudwatch datasource and perform queries to your logs.

                                                                              Links

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html index bc49ba5131..3843b621dd 100644 --- a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html +++ b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@ https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

                                                                            • Select IAM user group you configured for Qovery as admin

                                                                              In AWS console, go to IAM > User Groups

                                                                              AWS console - go to user groups

                                                                              then select the group you configured as admin group for Qovery (Admins in the example below).

                                                                              AWS console - select admin user group

                                                                            • Create a new policy to this group allowing full access to EKS resources

                                                                              In this admin group, go to permissions tab. Click on Add permissions > Create inline policy.

                                                                              AWS console - create new inline policy

                                                                              Switch to JSON view.

                                                                              AWS console - switch to inline policy creation json view

                                                                              Put this content to the Policy editor:

                                                                              {
                                                                              "Version": "2012-10-17",
                                                                              "Statement": [
                                                                              {
                                                                              "Effect": "Allow",
                                                                              "Action": [
                                                                              "eks:*",
                                                                              "sts:AssumeRole"
                                                                              ],
                                                                              "Resource": "*"
                                                                              }
                                                                              ]
                                                                              }

                                                                              Then click on Next.

                                                                              AWS console - edit inline policy content

                                                                              Give a name to this new policy, for example SSO_EKSClusterAdminAccess. Then click on Create Policy.

                                                                              AWS console - create inline policy

                                                                            • Set up CLI with SSO access to EKS

                                                                              Create a named SSO profile using AWS CLI.

                                                                              aws configure sso

                                                                              You will be prompted an SSO session name, put what you want, I used sso-benjamin.

                                                                              SSO session name (Recommended): sso-benjamin
                                                                              Attempting to automatically open the SSO authorization page in your default browser.
                                                                              If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
                                                                              https://device.sso.us-east-2.amazonaws.com/
                                                                              Then enter the code:
                                                                              -
                                                                              FHTG-****

                                                                              You will be redirected to your browser, validate the form.

                                                                              Then you will be prompted to select your AWS account.

                                                                              There are 1 AWS account available to you.
                                                                              > qovery, q@qovery.com (283389****)

                                                                              Then you will be prompted for default region (eu-west-3 in my case), output format (json in my case) and profile name (bchastanier_sso in my case, but feel free to pick whatever you want).

                                                                              Using the account ID 283389****
                                                                              The only role available to you is: AdministratorAccess
                                                                              Using the role name "AdministratorAccess"
                                                                              CLI default client Region [None]: eu-west-3
                                                                              CLI default output format [None]: json
                                                                              CLI profile name: bchastanier_sso
                                                                            • Get SSO role ARN

                                                                              Go to AWS console > IAM > Roles.

                                                                              AWS console - go to aws iam roles

                                                                              Look for a role named AWSReservedSSO_xx and select it (name can varies based on what you have configured / how you named your Admins user group, but it should start with AWSReservedSSO_).

                                                                              AWS console - look for SSO role

                                                                              Copy its ARN and keep it somewhere, you will need it in next step.

                                                                              AWS console - copy SSO role ARN

                                                                            • Enable SSO on your cluster

                                                                              Go to your clusters in Qovery console and click on cluster you want to activate SSO on settings.

                                                                              AWS console - go to qovery cluster settings

                                                                              Then go to advanced settings, and set:

                                                                              • aws.iam.enable_sso to true
                                                                              • aws.iam.sso_role_arn to the SSO role ARN string you copy from previous step.

                                                                              AWS console - set qovery cluster advanced settings to enable SSO

                                                                              Redeploy your cluster once advanced settings are saved.

                                                                            • Download the Kubeconfig file

                                                                              To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                              When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                              Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                              Set the context for kubectl, run the following command:

                                                                              export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                              AWS console - get Kubeconfig

                                                                            • Connect to your cluster

                                                                              Connect via the CLI running this command:

                                                                              aws sso login --profile <your-sso-profile-you-set-before>

                                                                              This will open your browser and prompt you to connect, validate the form.

                                                                              AWS console - validate SSO connection in browser

                                                                              Now you should be able to access your cluster without anything else, let's try to get aws-auth configmap showing users and roles allowed to connect to the cluster:

                                                                              AWS_PROFILE=<your-sso-profile-you-set-before> kubectl describe -n kube-system configmap/aws-auth

                                                                              This should give you the config map content. If not, something is not properly configured.

                                                                            • Conclusion

                                                                              You can access your Qovery clusters via your SSO directly.

                                                                              +
                                                                              FHTG-****

                                                                              You will be redirected to your browser, validate the form.

                                                                              Then you will be prompted to select your AWS account.

                                                                              There are 1 AWS account available to you.
                                                                              > qovery, q@qovery.com (283389****)

                                                                              Then you will be prompted for default region (eu-west-3 in my case), output format (json in my case) and profile name (bchastanier_sso in my case, but feel free to pick whatever you want).

                                                                              Using the account ID 283389****
                                                                              The only role available to you is: AdministratorAccess
                                                                              Using the role name "AdministratorAccess"
                                                                              CLI default client Region [None]: eu-west-3
                                                                              CLI default output format [None]: json
                                                                              CLI profile name: bchastanier_sso
                                                                            • Get SSO role ARN

                                                                              Go to AWS console > IAM > Roles.

                                                                              AWS console - go to aws iam roles

                                                                              Look for a role named AWSReservedSSO_xx and select it (name can varies based on what you have configured / how you named your Admins user group, but it should start with AWSReservedSSO_).

                                                                              AWS console - look for SSO role

                                                                              Copy its ARN and keep it somewhere, you will need it in next step.

                                                                              AWS console - copy SSO role ARN

                                                                            • Enable SSO on your cluster

                                                                              Go to your clusters in Qovery console and click on cluster you want to activate SSO on settings.

                                                                              AWS console - go to qovery cluster settings

                                                                              Then go to advanced settings, and set:

                                                                              • aws.iam.enable_sso to true
                                                                              • aws.iam.sso_role_arn to the SSO role ARN string you copy from previous step.

                                                                              AWS console - set qovery cluster advanced settings to enable SSO

                                                                              Redeploy your cluster once advanced settings are saved.

                                                                            • Download the Kubeconfig file

                                                                              To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                              When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                              Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                              Set the context for kubectl, run the following command:

                                                                              export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                              AWS console - get Kubeconfig

                                                                            • Connect to your cluster

                                                                              Connect via the CLI running this command:

                                                                              aws sso login --profile <your-sso-profile-you-set-before>

                                                                              This will open your browser and prompt you to connect, validate the form.

                                                                              AWS console - validate SSO connection in browser

                                                                              Now you should be able to access your cluster without anything else, let's try to get aws-auth configmap showing users and roles allowed to connect to the cluster:

                                                                              AWS_PROFILE=<your-sso-profile-you-set-before> kubectl describe -n kube-system configmap/aws-auth

                                                                              This should give you the config map content. If not, something is not properly configured.

                                                                            • Conclusion

                                                                              You can access your Qovery clusters via your SSO directly.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html index d8ab962fa4..fc03d4c085 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              Open-source eat the world. More and more great open-source projects are used. One standard method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. This guide will attempt to explain how to build a cloud-managed version of an open-source project.

                                                                              As a developer, I am super impressed by the number of great open-source projects popping around. I think of Supabase (an open-source alternative to Firebase), Strapi (open-source headless CMS), Meilisearch (open-source search engine), Posthog (open-source product analytics tool), and so many others. For me, these are the tools that most developers will use in the future. One common method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. It is exactly what Hasura did with its cloud version - and it is pretty convenient to use their product in production. However, building a cloud version takes months (sometimes years). What takes time? Hiring platform engineers, building the infrastructure, testing it, monitoring it... All of that takes a considerable amount of time and effort. Luckily, at Qovery, we provide the infrastructure stack that every open-source project needs to build 90% of their cloud-managed version. The remaining 10% are the UI and the business model logic. In this 6-part article series, I will attempt to explain how to build a cloud-managed version of AppWrite. Let’s go!

                                                                              Articles:

                                                                              • Part 1: Introduction and architecture
                                                                              • Part 2: Build our AppWrite cloud backend and integrate it with the Qovery API
                                                                              • Part 3: Build our AppWrite cloud frontend and combine it with our cloud backend
                                                                              • Part 4: Monitor our AppWrite cloud version
                                                                              • Part 5: Integrate the payment system with Stripe (optional)
                                                                              • Part 6: Integrate email notification with Courier (optional)
                                                                              • Part 7: Give your customer a production, staging, and dev environment (optional)

                                                                              Before getting started

                                                                              Motivation

                                                                              Since I launched Qovery in 2019, I have talked to dozens of founders from great open-source software companies. Most of them were looking to build their cloud-managed service at some point. Some of them even asked me for feedback on building one and asked me to use Qovery as a white-label technology when they discovered it was a full-time job. Qovery is a product simplifying app deployment and infrastructure management on AWS. Time flies, and as Qovery evolves, it is now possible for any open-source project to use Qovery as a white-label technology to provide a cloud version of an open-source project. No hidden cost. Just pick the plan that fits you best and build your cloud version in days instead of months. My team will be proud to help you in your success.

                                                                              Why AppWrite

                                                                              AppWrite is quite representative of a “modern web open-source project”. In this guide, AppWrite is used as a demo project to demonstrate the concept of building a cloud-managed version for an open-source web project. AppWrite is written in PHP for the backend and JS for the frontend. It provides a user-friendly web interface connected to a web API, and it stores the data in MariaDB and Redis databases. The idea is: if it works for AppWrite, then it is good to work for any other web open-source project with a similar technical stack. Feel free to contact me if you have any concerns.

                                                                              Technologies

                                                                              AppWrite is a Backend as a Service open-source software. It is similar to Supabase and Firebase to create a backend in a few minutes.

                                                                              Our goal is to provide a fully managed cloud version of AppWrite. Meaning we need to deliver to our customers a way to order their AppWrite instance and use it, while the maintenance is handled by us. It is the most common managed version out there - think MongoDB Atlas. To achieve this, we will use the following technologies:

                                                                              • AppWrite: We will use AppWrite Docker container image to run the latest version of AppWrite.
                                                                              • MariaDB: AppWrite is using a MariaDB server for managing persistent database data.
                                                                              • Redis: AppWrite uses a Redis server for managing cache, queues, and scheduled tasks.
                                                                              • AWS: We will host AppWrite on AWS EKS (Kubernetes), Redis (in-memory database), and MariaDB (AWS RDS) for each customer on AWS.
                                                                              • Qovery: Qovery will create an environment composed of AppWrite, Redis, and MariaDB for each customer on our AWS account.
                                                                              • Hasura: Low-code GraphQL backend to manage our customers’ data.
                                                                              • GatsbyJS: JS frontend framework to provide a web interface to our customers.
                                                                              • PostgreSQL: database to store our customers’ data
                                                                              • Auth0: To manage the auth of our customers.
                                                                              • Stripe: To charge our customers.
                                                                              • Courier: To send an email and Slack notifications to our customers.

                                                                              This bunch of technologies combined enable us to build a cloud version for AppWrite. Let’s take a deeper look at how all of them are interconnected.

                                                                              Architecture

                                                                              architecture schema

                                                                              This schema represents the different layers composing the cloud version of AppWrite. From top to bottom, we will give the details of each layer.

                                                                              User flow 1: Customer request an AppWrite instance

                                                                              customer request an appwrite instance - behind the scene

                                                                              Here is what happens when the customer requests a cloud AppWrite instance:

                                                                              1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                              2. The customer requests a new AppWrite instance.
                                                                              3. The AppWrite cloud backend calls the Qovery API to create an Environment.
                                                                              4. The AppWrite cloud backend calls the Qovery API to create a MariaDB database.
                                                                              5. The AppWrite cloud backend calls the Qovery API to create a Redis database.
                                                                              6. The AppWrite cloud backend calls the Qovery API to create an AppWrite application.
                                                                              7. The AppWrite cloud backend calls the Qovery API to bind the AppWrite application to the MariaDB and Redis databases.
                                                                              8. The AppWrite cloud backend calls the Qovery API to start the Environment.
                                                                              9. The Qovery API returns the temporary URL to the AppWrite cloud backend.
                                                                              10. The customer receives the URL of his instance via the AppWrite cloud frontend.
                                                                              11. The customer can use his AppWrite instance.

                                                                              User flow 2: customer deletes an AppWrite instance

                                                                              customer deletes an appwrite instance - behind the scene

                                                                              Let’s say our customer now wants to delete his cloud AppWrite instance; this is what happens:

                                                                              1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                              2. The customer removes his AppWrite instance.
                                                                              3. The AppWrite cloud backend calls the Qovery API to delete the customer Environment.
                                                                              4. Qovery deletes the AppWrite application, MariaDB, and Redis databases.

                                                                              We can add other steps like payment (part 5), notifications (part 6), and everything you want - they are not required to make our cloud version functional. Let’s now take a deeper look at the infrastructure.

                                                                              AppWrite cloud frontend and backend (control plane)

                                                                              The AppWrite cloud frontend and backend are the two components that we have to build from scratch. It includes our business logic and customer management system. We will use Hasura for the backend and GatsbyJS for the frontend. We will connect the frontend to the backend via a GraphQL API. The advantage of using Hasura instead of coding our web backend is that we have access to many features (Auth0, Stripe support...) right away. Saving days of work.

                                                                              The goal here is to provide to the customers a web interface to:

                                                                              • Create, update, stop, restart, delete AppWrite instances.
                                                                              • Configure their custom domain.
                                                                              • Charge our customers and let them pay for their subscriptions

                                                                              Qovery and AWS

                                                                              Qovery is the simplest way to deploy apps and manage your infrastructure on AWS. We will use Qovery as an Infrastructure as Code (IaC) API.

                                                                              Qovery provides a production-ready infrastructure on our AWS account in 30 minutes that we will use to host our customers’ instances. The Qovery API provides a high-level abstraction to create for each customer an isolated Environment including:

                                                                              1. An AppWrite app instance with the possibility to scale it horizontally.
                                                                              2. A MariaDB database.
                                                                              3. A Redis database.
                                                                              4. An HTTPS endpoint.
                                                                              5. The option to bind a custom domain with TLS.
                                                                              6. A secure API to manage Environment variables and Secrets.

                                                                              Each Environment is isolated and will be accessible for only one customer. And as admin, Qovery provides a web interface to manage all our customers’ instances and troubleshoot any of their issues.

                                                                              Curious to know more about how Qovery works? Take a look at this page.

                                                                              Qovery and other cloud providers

                                                                              Qovery supports AWS, Digital Ocean, and Scaleway. In this guide, we will focus on AWS to make it simpler. But keep in mind that you can use another supported cloud provider. You can even imagine a feature where your customers can choose the cloud provider of their choice. This is exactly what “MongoDB Atlas” and “Hasura Cloud” do.

                                                                              Side note: Qovery will support Google Cloud Platform and Microsoft Azure for S1 2022.

                                                                              MariaDB - Data persistence and backup

                                                                              Our customers expect us to provide a reliable service and manage the database backups by using a cloud version. For AppWrite, MariaDB is the persistent database and needs to be backed up. Four options with pros and cons do exist:

                                                                              1st option: single-tenant MariaDB container

                                                                              Pros:

                                                                              • Cheap
                                                                              • Fast to spawn
                                                                              • Physical isolation per customer
                                                                              • Decent performance

                                                                              Cons:

                                                                              • You have to manage the backups

                                                                              2nd option: multi-tenant MariaDB container

                                                                              Pros:

                                                                              • The cheapest option (1 container divided by the number of customers means higher margins)
                                                                              • Fast to spawn

                                                                              Cons:

                                                                              • You have to manage the backups
                                                                              • No physical isolation per customer
                                                                              • The more you have customers, the poorest the performance is.
                                                                              • Potential security breaches as many customers are using the same database instance.

                                                                              3rd option: single-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                              Pros:

                                                                              • Backup managed by AWS (point-in-time recovery included)
                                                                              • Physical isolation per customer (security++)
                                                                              • The most performant
                                                                              • Scalable (managed by AWS)

                                                                              Cons:

                                                                              • The most expensive option (~$11 per instance for the cheapest one on AWS US-EAST-2)

                                                                              4th option: multi-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                              Pros:

                                                                              • Backup managed by AWS (point-in-time recovery included)
                                                                              • Higher performance than container version
                                                                              • Scalable (managed by AWS)
                                                                              • Expensive for a few customers, but the more customers you have, the cheaper it is.

                                                                              Cons:

                                                                              • The most expensive option (~$11 per instance for the cheapest one on AWS us-east-2)
                                                                              • Potential security breaches as many customers are using the same database instance.

                                                                              We will pick the third option (single-tenant with managed MariaDB database) to create a state-of-the-art cloud version, but you are free to choose the one you want for your customer. Do not forget your customer expects you to take care of their business.

                                                                              Side note: AppWrite uses Redis as a caching system. Then, we will use a Redis container instance which is the cheapest.

                                                                              Contributors

                                                                              Here is the list of contributors to this first part:

                                                                              • Ricardo Sueiras - Principal Advocate in OSS at AWS
                                                                              • Raman Sharma - VP Product Marketing at DigitalOcean
                                                                              • Anton Babenko - AWS Community Hero and Hashicorp Ambassador
                                                                              • Javier Viola Villanueva - Simulation Network Lead at Parity
                                                                              • Ziad Ghalleb - Product Marketing Manager at Gitguardian
                                                                              • Oliver Juhl - CTO and co-founder at Medusa
                                                                              • Yann Irbah - SRE at Fewlines
                                                                              • Laurent Doguin - ex VP Developer Relation at Clever Cloud
                                                                              • Qovery Team and our community ambassadors (Aggis, Stun3r, Kartik)

                                                                              Thank you to our contributors for their review and suggestions.

                                                                              What’s next

                                                                              Thank you all for taking the time to read until the end. We will build our AppWrite cloud backend and integrate it into the Qovery API in the next part.

                                                                              Tutorial
                                                                              +
                                                                              Stats
                                                                              11 min read
                                                                              Updated

                                                                              As a developer, I am super impressed by the number of great open-source projects popping around. I think of Supabase (an open-source alternative to Firebase), Strapi (open-source headless CMS), Meilisearch (open-source search engine), Posthog (open-source product analytics tool), and so many others. For me, these are the tools that most developers will use in the future. One common method to make those products financially sustainable is to provide a managed version. Meaning, you can enjoy using their product without the hassle of managing the product updates, the backups, the security, and the scaling. It is exactly what Hasura did with its cloud version - and it is pretty convenient to use their product in production. However, building a cloud version takes months (sometimes years). What takes time? Hiring platform engineers, building the infrastructure, testing it, monitoring it... All of that takes a considerable amount of time and effort. Luckily, at Qovery, we provide the infrastructure stack that every open-source project needs to build 90% of their cloud-managed version. The remaining 10% are the UI and the business model logic. In this 6-part article series, I will attempt to explain how to build a cloud-managed version of AppWrite. Let’s go!

                                                                              Articles:

                                                                              • Part 1: Introduction and architecture
                                                                              • Part 2: Build our AppWrite cloud backend and integrate it with the Qovery API
                                                                              • Part 3: Build our AppWrite cloud frontend and combine it with our cloud backend
                                                                              • Part 4: Monitor our AppWrite cloud version
                                                                              • Part 5: Integrate the payment system with Stripe (optional)
                                                                              • Part 6: Integrate email notification with Courier (optional)
                                                                              • Part 7: Give your customer a production, staging, and dev environment (optional)

                                                                              Before getting started

                                                                              Motivation

                                                                              Since I launched Qovery in 2019, I have talked to dozens of founders from great open-source software companies. Most of them were looking to build their cloud-managed service at some point. Some of them even asked me for feedback on building one and asked me to use Qovery as a white-label technology when they discovered it was a full-time job. Qovery is a product simplifying app deployment and infrastructure management on AWS. Time flies, and as Qovery evolves, it is now possible for any open-source project to use Qovery as a white-label technology to provide a cloud version of an open-source project. No hidden cost. Just pick the plan that fits you best and build your cloud version in days instead of months. My team will be proud to help you in your success.

                                                                              Why AppWrite

                                                                              AppWrite is quite representative of a “modern web open-source project”. In this guide, AppWrite is used as a demo project to demonstrate the concept of building a cloud-managed version for an open-source web project. AppWrite is written in PHP for the backend and JS for the frontend. It provides a user-friendly web interface connected to a web API, and it stores the data in MariaDB and Redis databases. The idea is: if it works for AppWrite, then it is good to work for any other web open-source project with a similar technical stack. Feel free to contact me if you have any concerns.

                                                                              Technologies

                                                                              AppWrite is a Backend as a Service open-source software. It is similar to Supabase and Firebase to create a backend in a few minutes.

                                                                              Our goal is to provide a fully managed cloud version of AppWrite. Meaning we need to deliver to our customers a way to order their AppWrite instance and use it, while the maintenance is handled by us. It is the most common managed version out there - think MongoDB Atlas. To achieve this, we will use the following technologies:

                                                                              • AppWrite: We will use AppWrite Docker container image to run the latest version of AppWrite.
                                                                              • MariaDB: AppWrite is using a MariaDB server for managing persistent database data.
                                                                              • Redis: AppWrite uses a Redis server for managing cache, queues, and scheduled tasks.
                                                                              • AWS: We will host AppWrite on AWS EKS (Kubernetes), Redis (in-memory database), and MariaDB (AWS RDS) for each customer on AWS.
                                                                              • Qovery: Qovery will create an environment composed of AppWrite, Redis, and MariaDB for each customer on our AWS account.
                                                                              • Hasura: Low-code GraphQL backend to manage our customers’ data.
                                                                              • GatsbyJS: JS frontend framework to provide a web interface to our customers.
                                                                              • PostgreSQL: database to store our customers’ data
                                                                              • Auth0: To manage the auth of our customers.
                                                                              • Stripe: To charge our customers.
                                                                              • Courier: To send an email and Slack notifications to our customers.

                                                                              This bunch of technologies combined enable us to build a cloud version for AppWrite. Let’s take a deeper look at how all of them are interconnected.

                                                                              Architecture

                                                                              architecture schema

                                                                              This schema represents the different layers composing the cloud version of AppWrite. From top to bottom, we will give the details of each layer.

                                                                              User flow 1: Customer request an AppWrite instance

                                                                              customer request an appwrite instance - behind the scene

                                                                              Here is what happens when the customer requests a cloud AppWrite instance:

                                                                              1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                              2. The customer requests a new AppWrite instance.
                                                                              3. The AppWrite cloud backend calls the Qovery API to create an Environment.
                                                                              4. The AppWrite cloud backend calls the Qovery API to create a MariaDB database.
                                                                              5. The AppWrite cloud backend calls the Qovery API to create a Redis database.
                                                                              6. The AppWrite cloud backend calls the Qovery API to create an AppWrite application.
                                                                              7. The AppWrite cloud backend calls the Qovery API to bind the AppWrite application to the MariaDB and Redis databases.
                                                                              8. The AppWrite cloud backend calls the Qovery API to start the Environment.
                                                                              9. The Qovery API returns the temporary URL to the AppWrite cloud backend.
                                                                              10. The customer receives the URL of his instance via the AppWrite cloud frontend.
                                                                              11. The customer can use his AppWrite instance.

                                                                              User flow 2: customer deletes an AppWrite instance

                                                                              customer deletes an appwrite instance - behind the scene

                                                                              Let’s say our customer now wants to delete his cloud AppWrite instance; this is what happens:

                                                                              1. The customer connects on cloud.appwrite.com (fake domain to represent “AppWrite cloud frontend”).
                                                                              2. The customer removes his AppWrite instance.
                                                                              3. The AppWrite cloud backend calls the Qovery API to delete the customer Environment.
                                                                              4. Qovery deletes the AppWrite application, MariaDB, and Redis databases.

                                                                              We can add other steps like payment (part 5), notifications (part 6), and everything you want - they are not required to make our cloud version functional. Let’s now take a deeper look at the infrastructure.

                                                                              AppWrite cloud frontend and backend (control plane)

                                                                              The AppWrite cloud frontend and backend are the two components that we have to build from scratch. It includes our business logic and customer management system. We will use Hasura for the backend and GatsbyJS for the frontend. We will connect the frontend to the backend via a GraphQL API. The advantage of using Hasura instead of coding our web backend is that we have access to many features (Auth0, Stripe support...) right away. Saving days of work.

                                                                              The goal here is to provide to the customers a web interface to:

                                                                              • Create, update, stop, restart, delete AppWrite instances.
                                                                              • Configure their custom domain.
                                                                              • Charge our customers and let them pay for their subscriptions

                                                                              Qovery and AWS

                                                                              Qovery is the simplest way to deploy apps and manage your infrastructure on AWS. We will use Qovery as an Infrastructure as Code (IaC) API.

                                                                              Qovery provides a production-ready infrastructure on our AWS account in 30 minutes that we will use to host our customers’ instances. The Qovery API provides a high-level abstraction to create for each customer an isolated Environment including:

                                                                              1. An AppWrite app instance with the possibility to scale it horizontally.
                                                                              2. A MariaDB database.
                                                                              3. A Redis database.
                                                                              4. An HTTPS endpoint.
                                                                              5. The option to bind a custom domain with TLS.
                                                                              6. A secure API to manage Environment variables and Secrets.

                                                                              Each Environment is isolated and will be accessible for only one customer. And as admin, Qovery provides a web interface to manage all our customers’ instances and troubleshoot any of their issues.

                                                                              Curious to know more about how Qovery works? Take a look at this page.

                                                                              Qovery and other cloud providers

                                                                              Qovery supports AWS, Digital Ocean, and Scaleway. In this guide, we will focus on AWS to make it simpler. But keep in mind that you can use another supported cloud provider. You can even imagine a feature where your customers can choose the cloud provider of their choice. This is exactly what “MongoDB Atlas” and “Hasura Cloud” do.

                                                                              Side note: Qovery will support Google Cloud Platform and Microsoft Azure for S1 2022.

                                                                              MariaDB - Data persistence and backup

                                                                              Our customers expect us to provide a reliable service and manage the database backups by using a cloud version. For AppWrite, MariaDB is the persistent database and needs to be backed up. Four options with pros and cons do exist:

                                                                              1st option: single-tenant MariaDB container

                                                                              Pros:

                                                                              • Cheap
                                                                              • Fast to spawn
                                                                              • Physical isolation per customer
                                                                              • Decent performance

                                                                              Cons:

                                                                              • You have to manage the backups

                                                                              2nd option: multi-tenant MariaDB container

                                                                              Pros:

                                                                              • The cheapest option (1 container divided by the number of customers means higher margins)
                                                                              • Fast to spawn

                                                                              Cons:

                                                                              • You have to manage the backups
                                                                              • No physical isolation per customer
                                                                              • The more you have customers, the poorest the performance is.
                                                                              • Potential security breaches as many customers are using the same database instance.

                                                                              3rd option: single-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                              Pros:

                                                                              • Backup managed by AWS (point-in-time recovery included)
                                                                              • Physical isolation per customer (security++)
                                                                              • The most performant
                                                                              • Scalable (managed by AWS)

                                                                              Cons:

                                                                              • The most expensive option (~$11 per instance for the cheapest one on AWS US-EAST-2)

                                                                              4th option: multi-tenant managed MariaDB database (AWS RDS MariaDB)

                                                                              Pros:

                                                                              • Backup managed by AWS (point-in-time recovery included)
                                                                              • Higher performance than container version
                                                                              • Scalable (managed by AWS)
                                                                              • Expensive for a few customers, but the more customers you have, the cheaper it is.

                                                                              Cons:

                                                                              • The most expensive option (~$11 per instance for the cheapest one on AWS us-east-2)
                                                                              • Potential security breaches as many customers are using the same database instance.

                                                                              We will pick the third option (single-tenant with managed MariaDB database) to create a state-of-the-art cloud version, but you are free to choose the one you want for your customer. Do not forget your customer expects you to take care of their business.

                                                                              Side note: AppWrite uses Redis as a caching system. Then, we will use a Redis container instance which is the cheapest.

                                                                              Contributors

                                                                              Here is the list of contributors to this first part:

                                                                              • Ricardo Sueiras - Principal Advocate in OSS at AWS
                                                                              • Raman Sharma - VP Product Marketing at DigitalOcean
                                                                              • Anton Babenko - AWS Community Hero and Hashicorp Ambassador
                                                                              • Javier Viola Villanueva - Simulation Network Lead at Parity
                                                                              • Ziad Ghalleb - Product Marketing Manager at Gitguardian
                                                                              • Oliver Juhl - CTO and co-founder at Medusa
                                                                              • Yann Irbah - SRE at Fewlines
                                                                              • Laurent Doguin - ex VP Developer Relation at Clever Cloud
                                                                              • Qovery Team and our community ambassadors (Aggis, Stun3r, Kartik)

                                                                              Thank you to our contributors for their review and suggestions.

                                                                              What’s next

                                                                              Thank you all for taking the time to read until the end. We will build our AppWrite cloud backend and integrate it into the Qovery API in the next part.

                                                                              Tutorial
                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html index 150fd1f809..3cd69169d3 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              response = StopProjectOutput{
                                                                              Ok: false,
                                                                              }
                                                                              // try to stop a project using Qovery API
                                                                              err = callQoveryApi(args.Input.Id)
                                                                              if err != nil {
                                                                              return response, err
                                                                              }
                                                                              response.Ok = true
                                                                              -
                                                                              return response, nil
                                                                              }

                                                                              You can see the whole code in your forked repository on Github.

                                                                              Testing AppWrite Cloud Backend

                                                                              Signup

                                                                              After a few minutes of deployment, the first version of our managed cloud solution should be ready. Let's use the Hasura GraphQL API to create a new user.

                                                                              To do so, open your Hasura by clicking the Open button in your Hasura application. Then, run the following mutation in the GraphQL explorer:

                                                                              mutation {
                                                                              Signup(input: {email: "pjeziorowski@qovery.com", password: "mysecret"}) {
                                                                              accessToken
                                                                              }
                                                                              }

                                                                              You'll end up with a response like this:

                                                                              {
                                                                              "data": {
                                                                              "Signup": {
                                                                              "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLXVzZXItaWQiOiIyIiwieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoiYWRtaW4iLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbImFkbWluIl19LCJleHAiOjE2Mzc0ODAxNDR9.aNv72YwjWXkKItDPxQOe5bB7LPo8ZCZ0Gqb3mR6_KQI"
                                                                              }
                                                                              }
                                                                              }

                                                                              Great! We have just created our first user and received a token to interact with AppWrite Cloud API.

                                                                              Create Project

                                                                              Now, let's create our first managed AppWrite instance. In headers, include Authorization header with the Bearer token received when signing up:

                                                                              mutation {
                                                                              CreateProject(input: {name: "myproject"}) {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }

                                                                              You should see a response similar to this one:

                                                                              {
                                                                              "data": {
                                                                              "CreateProject": {
                                                                              "id": 10,
                                                                              "name": "myproject",
                                                                              "url": "<https://zf3f05b5a-zab0fb2f8-gtw.oom.sh>"
                                                                              }
                                                                              }
                                                                              }

                                                                              Great! In the response, we have received the URL we can use to access our managed AppWrite instance.

                                                                              When we peek into Qovery UI, we see the created project for our managed AppWrite:

                                                                              AppWrite Qovery Case Study

                                                                              Start / Stop Project

                                                                              It's the time to start our project. To do so, run the following mutation:

                                                                              mutation {
                                                                              StartProject(input: {id: 10}) {
                                                                              ok
                                                                              }
                                                                              }

                                                                              We should get this response:

                                                                              {
                                                                              "data": {
                                                                              "StartProject": {
                                                                              "ok": true
                                                                              }
                                                                              }
                                                                              }

                                                                              And looking into Qovery, we'll see our environment is starting:

                                                                              AppWrite Qovery Case Study

                                                                              After a few minutes, our AppWrite instance should be available up and running using the URL from the previous response. We can also list our projects to get all projects' URLs:

                                                                              {
                                                                              project(where: {user: {id: {_eq: 1}}}) {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }

                                                                              Response:

                                                                              {
                                                                              "data": {
                                                                              "project": [
                                                                              {
                                                                              "id": 9,
                                                                              "name": "appwrite1",
                                                                              "url": "https://zd3da7904-z24aae066-gtw.oom.sh"
                                                                              },
                                                                              {
                                                                              "id": 10,
                                                                              "name": "myproject",
                                                                              "url": "https://zf3f05b5a-zab0fb2f8-gtw.oom.sh"
                                                                              }
                                                                              ]
                                                                              }
                                                                              }

                                                                              AppWrite Cloud API domain

                                                                              Now, as the last step of this part of tutorial, let's set up a custom domain for our AppWrite Cloud.

                                                                              To do so, all we need to do is to follow a few simple steps:

                                                                              1. Navigate to the Hasura GraphQL API application in Qovery Console
                                                                              2. Click Add button and select Custom Domain

                                                                              AppWrite Qovery Case Study

                                                                              1. Type the name of desired domain, click Add and copy the Value displayed in the box below

                                                                              AppWrite Qovery Case Study

                                                                              1. Add a CNAME record with value copied in the previous step in your domain provider DNS management settings

                                                                              AppWrite Qovery Case Study

                                                                              1. Restart Hasura application

                                                                              Congratulations, your AppWrite Cloud API will be exposed using your custom domain shortly.

                                                                              Conclusion

                                                                              In this tutorial, we have managed to bootstrap the backend for our AppWrite Cloud solution. Users can register, log in, create and deploy managed AppWrite projects. In the following steps, we will add more functionalities to our AppWrite Cloud offering, set up a nice to use web User Interface and continue adding new features to AppWrite Cloud on top of Qovery.

                                                                              +
                                                                              return response, nil
                                                                              }

                                                                              You can see the whole code in your forked repository on Github.

                                                                              Testing AppWrite Cloud Backend

                                                                              Signup

                                                                              After a few minutes of deployment, the first version of our managed cloud solution should be ready. Let's use the Hasura GraphQL API to create a new user.

                                                                              To do so, open your Hasura by clicking the Open button in your Hasura application. Then, run the following mutation in the GraphQL explorer:

                                                                              mutation {
                                                                              Signup(input: {email: "pjeziorowski@qovery.com", password: "mysecret"}) {
                                                                              accessToken
                                                                              }
                                                                              }

                                                                              You'll end up with a response like this:

                                                                              {
                                                                              "data": {
                                                                              "Signup": {
                                                                              "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLXVzZXItaWQiOiIyIiwieC1oYXN1cmEtZGVmYXVsdC1yb2xlIjoiYWRtaW4iLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbImFkbWluIl19LCJleHAiOjE2Mzc0ODAxNDR9.aNv72YwjWXkKItDPxQOe5bB7LPo8ZCZ0Gqb3mR6_KQI"
                                                                              }
                                                                              }
                                                                              }

                                                                              Great! We have just created our first user and received a token to interact with AppWrite Cloud API.

                                                                              Create Project

                                                                              Now, let's create our first managed AppWrite instance. In headers, include Authorization header with the Bearer token received when signing up:

                                                                              mutation {
                                                                              CreateProject(input: {name: "myproject"}) {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }

                                                                              You should see a response similar to this one:

                                                                              {
                                                                              "data": {
                                                                              "CreateProject": {
                                                                              "id": 10,
                                                                              "name": "myproject",
                                                                              "url": "<https://zf3f05b5a-zab0fb2f8-gtw.oom.sh>"
                                                                              }
                                                                              }
                                                                              }

                                                                              Great! In the response, we have received the URL we can use to access our managed AppWrite instance.

                                                                              When we peek into Qovery UI, we see the created project for our managed AppWrite:

                                                                              AppWrite Qovery Case Study

                                                                              Start / Stop Project

                                                                              It's the time to start our project. To do so, run the following mutation:

                                                                              mutation {
                                                                              StartProject(input: {id: 10}) {
                                                                              ok
                                                                              }
                                                                              }

                                                                              We should get this response:

                                                                              {
                                                                              "data": {
                                                                              "StartProject": {
                                                                              "ok": true
                                                                              }
                                                                              }
                                                                              }

                                                                              And looking into Qovery, we'll see our environment is starting:

                                                                              AppWrite Qovery Case Study

                                                                              After a few minutes, our AppWrite instance should be available up and running using the URL from the previous response. We can also list our projects to get all projects' URLs:

                                                                              {
                                                                              project(where: {user: {id: {_eq: 1}}}) {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }

                                                                              Response:

                                                                              {
                                                                              "data": {
                                                                              "project": [
                                                                              {
                                                                              "id": 9,
                                                                              "name": "appwrite1",
                                                                              "url": "https://zd3da7904-z24aae066-gtw.oom.sh"
                                                                              },
                                                                              {
                                                                              "id": 10,
                                                                              "name": "myproject",
                                                                              "url": "https://zf3f05b5a-zab0fb2f8-gtw.oom.sh"
                                                                              }
                                                                              ]
                                                                              }
                                                                              }

                                                                              AppWrite Cloud API domain

                                                                              Now, as the last step of this part of tutorial, let's set up a custom domain for our AppWrite Cloud.

                                                                              To do so, all we need to do is to follow a few simple steps:

                                                                              1. Navigate to the Hasura GraphQL API application in Qovery Console
                                                                              2. Click Add button and select Custom Domain

                                                                              AppWrite Qovery Case Study

                                                                              1. Type the name of desired domain, click Add and copy the Value displayed in the box below

                                                                              AppWrite Qovery Case Study

                                                                              1. Add a CNAME record with value copied in the previous step in your domain provider DNS management settings

                                                                              AppWrite Qovery Case Study

                                                                              1. Restart Hasura application

                                                                              Congratulations, your AppWrite Cloud API will be exposed using your custom domain shortly.

                                                                              Conclusion

                                                                              In this tutorial, we have managed to bootstrap the backend for our AppWrite Cloud solution. Users can register, log in, create and deploy managed AppWrite projects. In the following steps, we will add more functionalities to our AppWrite Cloud offering, set up a nice to use web User Interface and continue adding new features to AppWrite Cloud on top of Qovery.

                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html index cf40b7399f..ed72c48a94 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -62,14 +62,14 @@
                                                                              <Disclosure.Panel className="border-b border-gray-700 md:hidden">
                                                                              <div className="px-2 py-3 space-y-1 sm:px-3">
                                                                              {navigation.map((item) => (
                                                                              <Disclosure.Button
                                                                              key={item.name}
                                                                              as="a"
                                                                              href={item.href}
                                                                              className={classNames(
                                                                              item.current
                                                                              ? 'bg-gray-900 text-white'
                                                                              : 'text-gray-300 hover:bg-gray-700 hover:text-white',
                                                                              'block px-3 py-2 rounded-md text-base font-medium'
                                                                              )}
                                                                              aria-current={item.current ? 'page' : undefined}
                                                                              >
                                                                              {item.name}
                                                                              </Disclosure.Button>
                                                                              ))}
                                                                              </div>
                                                                              <div className="pt-4 pb-3 border-t border-gray-700">
                                                                              <div className="flex items-center px-5">
                                                                              <div className="flex-shrink-0">
                                                                              <img
                                                                              className="h-10 w-10 rounded-full"
                                                                              src={user.imageUrl}
                                                                              alt=""
                                                                              />
                                                                              </div>
                                                                              <div className="ml-3">
                                                                              <div className="text-base font-medium leading-none text-white">
                                                                              {user.name}
                                                                              </div>
                                                                              <div className="text-sm font-medium leading-none text-gray-400">
                                                                              {user.email}
                                                                              </div>
                                                                              </div>
                                                                              <button
                                                                              type="button"
                                                                              className="ml-auto bg-gray-800 flex-shrink-0 p-1 text-gray-400 rounded-full hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 focus:ring-white"
                                                                              >
                                                                              <span className="sr-only">View notifications</span>
                                                                              <BellIcon className="h-6 w-6" aria-hidden="true" />
                                                                              </button>
                                                                              </div>
                                                                              <div className="mt-3 px-2 space-y-1">
                                                                              {userNavigation.map((item) => (
                                                                              <Disclosure.Button
                                                                              key={item.name}
                                                                              as="a"
                                                                              href={item.href}
                                                                              className="block px-3 py-2 rounded-md text-base font-medium text-gray-400 hover:text-white hover:bg-gray-700"
                                                                              >
                                                                              {item.name}
                                                                              </Disclosure.Button>
                                                                              ))}
                                                                              </div>
                                                                              </div>
                                                                              </Disclosure.Panel>
                                                                              </>
                                                                              )}
                                                                              </Disclosure>
                                                                              <header className="py-10">
                                                                              <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
                                                                              <h1 className="text-3xl font-bold text-white">Dashboard</h1>
                                                                              </div>
                                                                              </header>
                                                                              </div>
                                                                              <main className="-mt-32">
                                                                              <div className="max-w-7xl mx-auto pb-12 px-4 sm:px-6 lg:px-8">
                                                                              <Signup />
                                                                              <Signin />
                                                                              <div className="bg-white rounded-lg shadow px-5 py-6 sm:px-6">
                                                                              <div className="border-4 border-dashed border-gray-200 rounded-lg h-96" />
                                                                              </div>
                                                                              </div>
                                                                              </main>
                                                                              </div>
                                                                              </>
                                                                              );
                                                                              }
                                                                              const Signin = (email, password) => {
                                                                              const mutation = useMutation((event) => {
                                                                              event.preventDefault();
                                                                              return axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'post',
                                                                              headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                              data: {
                                                                              query: `
                                                                              query Singin {
                                                                              Singin(email: "${email}", password: "${password}") {
                                                                              accessToken
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              })
                                                                              });
                                                                              return <button onClick={(event) => mutation.mutate(event)}>Login</button>;
                                                                              };
                                                                              -
                                                                              const Signup = (email, password) => {
                                                                              const mutation = useMutation((event) => {
                                                                              event.preventDefault();
                                                                              return axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'post',
                                                                              headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                              data: {
                                                                              query: `
                                                                              query Signup {
                                                                              Signup(email: "${email}", password: "${password}") {
                                                                              accessToken
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              })
                                                                              });
                                                                              return <button onClick={(event) => mutation.mutate(event)}>Signup</button>;
                                                                              };

                                                                              This makes the skeleton of our UI:

                                                                              AppWrite Qovery Case Study

                                                                              Clicking on the signup will send a test signup request to our backend - click Signup and see the response with an access token in the network tab of your browser:

                                                                              AppWrite Qovery Case Study

                                                                              To send the request, we use the following piece of code:

                                                                              axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'post',
                                                                              headers: { Authorization: 'Bearer ' + anonymous },
                                                                              data: {
                                                                              query: `
                                                                              mutation {
                                                                              Signup(input: {email: "${email}", password: "${password}"}) {
                                                                              accessToken
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              }

                                                                              We use axios HTTP library to send a POST request to our graphqlApiEndpoint (that uses the value of the environment variable we set previously) to run a GraphQL mutation that creates a new user with a given email and password in our AppWrite Cloud backend. In the response, we receive an access token that we can use in the name of the user to interact with the API.

                                                                              The anonymous token sent in the request is a way to interact with unauthenticated endpoints in the Hasura backend.

                                                                              In the next step let’s take care of the list of user projects:

                                                                              const { isLoading, error, data } = useQuery('projects', () => {
                                                                              return axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'POST',
                                                                              headers: { Authorization: 'Bearer ' + token },
                                                                              data: {
                                                                              query: `query Projects {
                                                                              project {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              });
                                                                              });

                                                                              In the snippet above, we use ReactQuery to manage the server state (store the info about the project client-side) and axios for performing the HTTP request. In the headers, we send users’ accessToken, and the payload allows us to specify data that we are interested in about projects we have access to.

                                                                              The response from the query contains info we can use to render the list of AppWrite projects managed by AppWriteCloud:

                                                                              AppWrite Qovery Case Study

                                                                              Now, to display it, add the following piece of code into our dashboard component:

                                                                              {appwriteProjects.map((project) => (
                                                                              <div
                                                                              key={project.id}
                                                                              className="relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-indigo-500"
                                                                              >
                                                                              <div className="flex-1 min-w-0">
                                                                              <a href="#" className="focus:outline-none">
                                                                              <span
                                                                              className="absolute inset-0"
                                                                              aria-hidden="true"
                                                                              />
                                                                              <p className="text-sm font-medium text-gray-900">
                                                                              {project.name}
                                                                              </p>
                                                                              <a
                                                                              href={project.url}
                                                                              className="text-sm text-gray-500 truncate hover:text-lg"
                                                                              >
                                                                              {project.url}
                                                                              </a>
                                                                              </a>
                                                                              </div>
                                                                              </div>
                                                                              ))}

                                                                              This should allow us to display a list of user’s projects in the dashboard like this:

                                                                              AppWrite Qovery Case Study

                                                                              After improving the sign in form (see the whole code repository here, the whole flow should now look like this:

                                                                              AppWrite Qovery Case Study

                                                                              Conclusion

                                                                              In this article, we bootstrapped a frontend application and added it to our app write cloud. We created the first version of our frontend that makes use of React, Next.js, ReactQuery and Tailwind. The UI is integrated with our backend GraphQL API that is deployed on Qovery and allows us to manage AppWrite projects deployed on AWS for AppWrite Cloud clients.

                                                                              +
                                                                              const Signup = (email, password) => {
                                                                              const mutation = useMutation((event) => {
                                                                              event.preventDefault();
                                                                              return axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'post',
                                                                              headers: { 'Authorization': 'Bearer ' + anonymous },
                                                                              data: {
                                                                              query: `
                                                                              query Signup {
                                                                              Signup(email: "${email}", password: "${password}") {
                                                                              accessToken
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              })
                                                                              });
                                                                              return <button onClick={(event) => mutation.mutate(event)}>Signup</button>;
                                                                              };

                                                                              This makes the skeleton of our UI:

                                                                              AppWrite Qovery Case Study

                                                                              Clicking on the signup will send a test signup request to our backend - click Signup and see the response with an access token in the network tab of your browser:

                                                                              AppWrite Qovery Case Study

                                                                              To send the request, we use the following piece of code:

                                                                              axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'post',
                                                                              headers: { Authorization: 'Bearer ' + anonymous },
                                                                              data: {
                                                                              query: `
                                                                              mutation {
                                                                              Signup(input: {email: "${email}", password: "${password}"}) {
                                                                              accessToken
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              }

                                                                              We use axios HTTP library to send a POST request to our graphqlApiEndpoint (that uses the value of the environment variable we set previously) to run a GraphQL mutation that creates a new user with a given email and password in our AppWrite Cloud backend. In the response, we receive an access token that we can use in the name of the user to interact with the API.

                                                                              The anonymous token sent in the request is a way to interact with unauthenticated endpoints in the Hasura backend.

                                                                              In the next step let’s take care of the list of user projects:

                                                                              const { isLoading, error, data } = useQuery('projects', () => {
                                                                              return axios({
                                                                              url: graphqlApiEndpoint,
                                                                              method: 'POST',
                                                                              headers: { Authorization: 'Bearer ' + token },
                                                                              data: {
                                                                              query: `query Projects {
                                                                              project {
                                                                              id
                                                                              name
                                                                              url
                                                                              }
                                                                              }
                                                                              `,
                                                                              },
                                                                              });
                                                                              });

                                                                              In the snippet above, we use ReactQuery to manage the server state (store the info about the project client-side) and axios for performing the HTTP request. In the headers, we send users’ accessToken, and the payload allows us to specify data that we are interested in about projects we have access to.

                                                                              The response from the query contains info we can use to render the list of AppWrite projects managed by AppWriteCloud:

                                                                              AppWrite Qovery Case Study

                                                                              Now, to display it, add the following piece of code into our dashboard component:

                                                                              {appwriteProjects.map((project) => (
                                                                              <div
                                                                              key={project.id}
                                                                              className="relative rounded-lg border border-gray-300 bg-white px-6 py-5 shadow-sm flex items-center space-x-3 hover:border-gray-400 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-indigo-500"
                                                                              >
                                                                              <div className="flex-1 min-w-0">
                                                                              <a href="#" className="focus:outline-none">
                                                                              <span
                                                                              className="absolute inset-0"
                                                                              aria-hidden="true"
                                                                              />
                                                                              <p className="text-sm font-medium text-gray-900">
                                                                              {project.name}
                                                                              </p>
                                                                              <a
                                                                              href={project.url}
                                                                              className="text-sm text-gray-500 truncate hover:text-lg"
                                                                              >
                                                                              {project.url}
                                                                              </a>
                                                                              </a>
                                                                              </div>
                                                                              </div>
                                                                              ))}

                                                                              This should allow us to display a list of user’s projects in the dashboard like this:

                                                                              AppWrite Qovery Case Study

                                                                              After improving the sign in form (see the whole code repository here, the whole flow should now look like this:

                                                                              AppWrite Qovery Case Study

                                                                              Conclusion

                                                                              In this article, we bootstrapped a frontend application and added it to our app write cloud. We created the first version of our frontend that makes use of React, Next.js, ReactQuery and Tailwind. The UI is integrated with our backend GraphQL API that is deployed on Qovery and allows us to manage AppWrite projects deployed on AWS for AppWrite Cloud clients.

                                                                              - + - + @@ -77,7 +77,7 @@ - + diff --git a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html index 43d304fd00..a85e239710 100644 --- a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html +++ b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              Stats
                                                                              3 min read
                                                                              Updated
                                                                              Contents

                                                                              When creating a managed MongoDB instance on AWS via Qovery, you don't get a publicly accessible endpoint. While it is good from a security point of view, you still might need to connect to it from a local client.

                                                                              Goal

                                                                              This tutorial will show you how to connect to your managed MongoDB instance private endpoint from your local machine, through your EKS cluster.

                                                                              1. Open two terminal windows with access to your Kubernetes cluster

                                                                                We will need to run two different commands to forward your local traffic to your database.

                                                                              2. Export the required environment variables

                                                                                In each terminal window, export some env variables:

                                                                                export SERVICE_NAME=mongodb-tunnel
                                                                                export ENDPOINT=<the private endpoint to your db from your AWS console>
                                                                                export PORT=<your DB port>
                                                                                export LOCAL_PORT=8080 # you can use any other port available on your computer
                                                                              3. Run a socat container in your cluster

                                                                                socat is a relay for bidirectional data transfers between two independent data channels. It will forward all traffic between your computer and your database.

                                                                                kubectl run ${SERVICE_NAME} --image=alpine/socat \
                                                                                -it --tty --rm --expose=true --port=${PORT} \
                                                                                -- \
                                                                                tcp-listen:${PORT},fork,reuseaddr \
                                                                                tcp-connect:${ENDPOINT}:${PORT}
                                                                              4. Start port-forwarding to your socat pod

                                                                                To access your socat pod from your container you will need to start a port-forwarding.

                                                                                kubectl port-forward service/${SERVICE_NAME} ${LOCAL_PORT}:${PORT}
                                                                              5. Download the MongoDB certificate

                                                                                Connections to MongoDB instances on AWS use TLS. You will need the certificate to connect. You can download it here: https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

                                                                              6. Connect to your DB instance

                                                                                In this example we are using the Mongo Shell, but you can use any other client to connect to it. -The credentials are available on the Qovery console.

                                                                                mongosh --host 127.0.0.1 \
                                                                                --port ${LOCAL_PORT} \
                                                                                --username <username> \
                                                                                --tls --tlsCAFile <path to downloaded PEM>/rds-combined-ca-bundle.pem \
                                                                                --tlsAllowInvalidCertificates
                                                                              +The credentials are available on the Qovery console.

                                                                              mongosh --host 127.0.0.1 \
                                                                              --port ${LOCAL_PORT} \
                                                                              --username <username> \
                                                                              --tls --tlsCAFile <path to downloaded PEM>/rds-combined-ca-bundle.pem \
                                                                              --tlsAllowInvalidCertificates
                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html index 6e4a2e2462..340e47ef97 100644 --- a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html +++ b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              Stats
                                                                              5 min read
                                                                              Updated

                                                                              Qovery makes it easy to create an EKS cluster on your AWS account and manage the deployment of applications on it. But you still might want to execute operations on it via kubectl like you would on any other Kubernetes cluster.

                                                                              Goal

                                                                              This tutorial will show you how to access a Qovery managed cluster on AWS with kubectl and shell into a running application container.

                                                                              1. Install and configure your toolchain

                                                                                kubectl

                                                                                To interact with your cluster, you will need kubectl installed. https://kubernetes.io/docs/tasks/tools/

                                                                                AWS CLI

                                                                                The AWS CLI must be installed and configured on your machine. https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

                                                                              2. Add your IAM user to the Admin group

                                                                                Since kubectl will use IAM to authenticate, you need to add your IAM user (the one the AWS CLI is authenticated with) to the Admins group you created when setting up Qovery.

                                                                                AWS console - add admin user

                                                                              3. Download the Kubeconfig file

                                                                                To connect to your EKS cluster you will need to set a context to kubectl. This is done with a Kubeconfig file.

                                                                                When installing a new cluster, Qovery stores it in an S3 bucket on your account.

                                                                                Go to S3, find the Qovery bucket, and download the file. The bucket should be named something like qovery-kubeconfigs-<cluster ID>.yaml.

                                                                                AWS console - get Kubeconfig

                                                                              4. Set the context for kubectl

                                                                                To set the context for kubectl, run the following command:

                                                                                export KUBECONFIG=<path to the kubeconfig file you downloaded>

                                                                                You can check that it works with a kubectl command. For example:

                                                                                kubectl get nodes

                                                                                You are good to go if you see an output like the following:

                                                                                NAME STATUS ROLES AGE VERSION
                                                                                zb81b1cd4-ub667 Ready <none> 14d v1.19.15
                                                                                zb81b1cd4-ujkm8 Ready <none> 24d v1.19.15
                                                                                zb81b1cd4-ujkmc Ready <none> 24d v1.19.15
                                                                              5. Get your application namespace

                                                                                When you deploy an application, Qovery will create a separate namespace for each environment on your Kubernetes cluster.

                                                                                You can get the list of the namespaces on your cluster using the following command:

                                                                                kubectl get namespaces

                                                                                You will get an output similar to this one:

                                                                                NAME STATUS AGE
                                                                                cert-manager Active 44d
                                                                                default Active 44d
                                                                                kube-node-lease Active 44d
                                                                                kube-public Active 44d
                                                                                kube-system Active 44d
                                                                                logging Active 44d
                                                                                nginx-ingress Active 44d
                                                                                prometheus Active 44d
                                                                                qovery Active 44d
                                                                                z0121531e-zb2daee81 Active 35d
                                                                                z016bd165-zeb51c37e Active 31d

                                                                                The Qovery application namespaces are the ones begining with z.

                                                                                In case you have several environments running, to identify the right one:

                                                                                • Go to the Qovery console
                                                                                • Go to the right environment

                                                                                In your URL bar you'll have something like:

                                                                                https://console.qovery.com/platform/organization/<organisation id>/projects/<project id>/environments/<environment id>/applications

                                                                                Qovery console - environment

                                                                                The environment namespace is defined the following way: z<project short ID>-z<environment short ID>.

                                                                                The short ID is the first section of the ID. For example, given the following ID: e0aabc0d-99cb-4867-ad39-332d6162c32c, the short ID will be e0aabc0d.

                                                                                The following environment URL: https://console.qovery.com/platform/organization/<organisation ID>/projects/e0aabc0d-99cb-4867-ad39-332d6162c32c/environments/b91d2eb8-a850-49b5-8626-ade7afc4a28b/applications -would translate to the following namespace: ze0aabc0d-zb91d2eb8.

                                                                              6. Identify the right application pod(s)

                                                                                To list the pods running in your environment namespace, run the following command:

                                                                                kubectl get pods --namespace <your namespace>

                                                                                The output should be similar to this one:

                                                                                NAME READY STATUS RESTARTS AGE
                                                                                app-z2fc29b74-5db6745975-nrw8v 1/1 Running 0 29h
                                                                                app-zabbcf976-74f969f848-kzp87 1/1 Running 0 29h

                                                                                The same principle goes for finding the right application pod. Go to the application page on the Qovery console.

                                                                                You'll get an URL looking like this:

                                                                                https://console.qovery.com/platform/organization/<organisation ID>/projects/<project ID>/environments/<environment ID>/applications/abbcf976-27a1-4531-9cdd-e4d15d7b2c27/summary

                                                                                Get the short ID of our application, in our case abbcf976 which means the application pod name will start with app-zabbcf976.

                                                                                In case you setup your app to run multiple replicas, it is possible that you see several pods begining with the same string. You can pick any of them.

                                                                                In our case the right pod corresponding to our application would be app-zabbcf976-74f969f848-kzp87.

                                                                              7. Shell into the container

                                                                                To get a shell access to the container running inside the application pod, all you have to do is:

                                                                                kubectl exec -ti --namespace <your namespace> <your pod name> -- sh

                                                                                This will open a shell inside of your application container. You can now execute any command you need.

                                                                              Conclusion

                                                                              Qovery helps you manage your Kubernetes cluster and deploy your applications on it while still giving you the power of a full access to your cluster.

                                                                              +would translate to the following namespace: ze0aabc0d-zb91d2eb8.

                                                                            • Identify the right application pod(s)

                                                                              To list the pods running in your environment namespace, run the following command:

                                                                              kubectl get pods --namespace <your namespace>

                                                                              The output should be similar to this one:

                                                                              NAME READY STATUS RESTARTS AGE
                                                                              app-z2fc29b74-5db6745975-nrw8v 1/1 Running 0 29h
                                                                              app-zabbcf976-74f969f848-kzp87 1/1 Running 0 29h

                                                                              The same principle goes for finding the right application pod. Go to the application page on the Qovery console.

                                                                              You'll get an URL looking like this:

                                                                              https://console.qovery.com/platform/organization/<organisation ID>/projects/<project ID>/environments/<environment ID>/applications/abbcf976-27a1-4531-9cdd-e4d15d7b2c27/summary

                                                                              Get the short ID of our application, in our case abbcf976 which means the application pod name will start with app-zabbcf976.

                                                                              In case you setup your app to run multiple replicas, it is possible that you see several pods begining with the same string. You can pick any of them.

                                                                              In our case the right pod corresponding to our application would be app-zabbcf976-74f969f848-kzp87.

                                                                            • Shell into the container

                                                                              To get a shell access to the container running inside the application pod, all you have to do is:

                                                                              kubectl exec -ti --namespace <your namespace> <your pod name> -- sh

                                                                              This will open a shell inside of your application container. You can now execute any command you need.

                                                                            • Conclusion

                                                                              Qovery helps you manage your Kubernetes cluster and deploy your applications on it while still giving you the power of a full access to your cluster.

                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html index e2d64ac114..da17add8d3 100644 --- a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html +++ b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -47,14 +47,14 @@

                                                                              How to create an RDS instance through the AWS console

                                                                              How to create an RDS instance through the AWS console.

                                                                              Qovery make it easy to create an RDS database on AWS with a few clicks. You might however want to create your own RDS instance in a separate VPC. For example in case you want to use the same instance with several Qovery clusters.

                                                                              Goal

                                                                              This tutorial will show you how to create an production-ready RDS PostgreSQL instance on AWS.

                                                                              To connect your Qovery cluster(s) to the created RDS database, refer to this tutorial

                                                                              1. Create RDS database

                                                                                Go to the AWS RDS console and click Create database

                                                                                AWS RDS console

                                                                              2. Select your database type

                                                                                • We will need to create a dedicated VPC, so select Standard create.
                                                                                • Then chose your database type (we'll use PostgreSQL for our example) and the version.
                                                                                • Since we're creating a production database, we'll select the Production template. You can pick Dev/Test template for non-production environments.

                                                                                AWS RDS console

                                                                              3. Settings

                                                                                Select a name for your RDS instance, here my-production-database, master username and password.

                                                                                AWS RDS console

                                                                              4. Instance class

                                                                                Pick an instance class that works for your needs. You can refer to this document for more information about the different options: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html

                                                                                AWS RDS console

                                                                              5. Storage

                                                                                General Purpose SSD should be the right option for most cases. -Chose the allocated storage that fits the needs of your application. We also advise you to Enable storage autoscaling in case you need more storage over time.

                                                                                AWS RDS console

                                                                              6. Availability & durability

                                                                                For a production setup you should Create a standby instance. For non-production usecase you can avoid it to reduce costs.

                                                                                AWS RDS console

                                                                              7. Connectivity

                                                                                • Since we want the database to live in it's own VPC, make sure to select the Create new VPC option.
                                                                                • Also select Create new DB Subnet Group.
                                                                                • We advise you to disable Public access for security reason. We'll setup VPC peering in the next guide to allow access from your Qovery clusters through private networking.
                                                                                • Finally chose Create new security group and give it a name.

                                                                                AWS RDS console

                                                                              8. Database authentication and estimated costs

                                                                                Chose Password authentication.

                                                                                AWS RDS console

                                                                                You can then click on Create database

                                                                              9. Database creation

                                                                                You should see your new RDS instance in the list of databases, with the Creating status.

                                                                                AWS RDS console

                                                                              10. Name your RDS VPC

                                                                                The VPC created for the new RDS database will be named -. For convenience you should rename it.

                                                                                Click on your database in the list, then on the VPC id.

                                                                                AWS RDS console

                                                                                You will be redirected to the VPCs list, filtered on the VPC id. Click on the edit icon in the Name column, and give it a meaningful name.

                                                                                AWS RDS console

                                                                                AWS RDS console

                                                                              Conclusion

                                                                              Your RDS database is ready. Now in order to access it from your Qovery cluster, we will need to setup VPC peering. You can find the procedure in this tutorial

                                                                              +Chose the allocated storage that fits the needs of your application. We also advise you to Enable storage autoscaling in case you need more storage over time.

                                                                              AWS RDS console

                                                                            • Availability & durability

                                                                              For a production setup you should Create a standby instance. For non-production usecase you can avoid it to reduce costs.

                                                                              AWS RDS console

                                                                            • Connectivity

                                                                              • Since we want the database to live in it's own VPC, make sure to select the Create new VPC option.
                                                                              • Also select Create new DB Subnet Group.
                                                                              • We advise you to disable Public access for security reason. We'll setup VPC peering in the next guide to allow access from your Qovery clusters through private networking.
                                                                              • Finally chose Create new security group and give it a name.

                                                                              AWS RDS console

                                                                            • Database authentication and estimated costs

                                                                              Chose Password authentication.

                                                                              AWS RDS console

                                                                              You can then click on Create database

                                                                            • Database creation

                                                                              You should see your new RDS instance in the list of databases, with the Creating status.

                                                                              AWS RDS console

                                                                            • Name your RDS VPC

                                                                              The VPC created for the new RDS database will be named -. For convenience you should rename it.

                                                                              Click on your database in the list, then on the VPC id.

                                                                              AWS RDS console

                                                                              You will be redirected to the VPCs list, filtered on the VPC id. Click on the edit icon in the Name column, and give it a meaningful name.

                                                                              AWS RDS console

                                                                              AWS RDS console

                                                                            • Conclusion

                                                                              Your RDS database is ready. Now in order to access it from your Qovery cluster, we will need to setup VPC peering. You can find the procedure in this tutorial

                                                                              - + - + @@ -62,7 +62,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html index 4bd8b79cbb..4e78cfc0f5 100644 --- a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html +++ b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -70,14 +70,14 @@
                                                                              WORKDIR /app
                                                                              # Copy our build
                                                                              COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/rust-prime-number-api ./
                                                                              # Use an unprivileged user.
                                                                              USER app:app
                                                                              -
                                                                              CMD ["/app/rust-prime-number-api"]

                                                                              Deploy our Rust REST API app on AWS

                                                                              To deploy our Rust app on AWS we are going to use Qovery. Qovery is the simplest way to deploy any app on AWS. It is the perfect candidate to deploy our Rust REST API in a few steps.

                                                                              Sign up into Qovery

                                                                              First, you need to sign up or sign in on Qovery.

                                                                            • Sign in to the Qovery web interface.

                                                                              Qovery Sign-up page

                                                                            • Connect your AWS account

                                                                              To connect your AWS account check out this guide.

                                                                              Deploy our Rust REST API app

                                                                              Once your AWS account is set-up, you can deploy your Rust app by..

                                                                              Creating a project prime number.

                                                                              Create a project

                                                                              Creating an environment prod.

                                                                              Create an environment

                                                                              Creating an app by selecting your Rust app repository, build mode > Dockerfile, and the port 8000.

                                                                              Create an app

                                                                              And deploy! That's it 🔥... nothing more. Our Rust REST API app is ready

                                                                              Our app is deployed

                                                                              Check out this video to see how I quickly deploy my Rust REST API with Qovery.

                                                                              Watch this video showing the final result 👇

                                                                              Wrapping up

                                                                              Rust combined to Rocket web framework turns building REST API super easy. Deploying your Rust app on AWS with Qovery is as simple as selecting your GitHub repository. Nothing more. Hope you liked it.

                                                                              Useful resources

                                                                              Tutorial
                                                                              +
                                                                              CMD ["/app/rust-prime-number-api"]

                                                                              Deploy our Rust REST API app on AWS

                                                                              To deploy our Rust app on AWS we are going to use Qovery. Qovery is the simplest way to deploy any app on AWS. It is the perfect candidate to deploy our Rust REST API in a few steps.

                                                                              Sign up into Qovery

                                                                              First, you need to sign up or sign in on Qovery.

                                                                            • Sign in to the Qovery web interface.

                                                                              Qovery Sign-up page

                                                                            • Connect your AWS account

                                                                              To connect your AWS account check out this guide.

                                                                              Deploy our Rust REST API app

                                                                              Once your AWS account is set-up, you can deploy your Rust app by..

                                                                              Creating a project prime number.

                                                                              Create a project

                                                                              Creating an environment prod.

                                                                              Create an environment

                                                                              Creating an app by selecting your Rust app repository, build mode > Dockerfile, and the port 8000.

                                                                              Create an app

                                                                              And deploy! That's it 🔥... nothing more. Our Rust REST API app is ready

                                                                              Our app is deployed

                                                                              Check out this video to see how I quickly deploy my Rust REST API with Qovery.

                                                                              Watch this video showing the final result 👇

                                                                              Wrapping up

                                                                              Rust combined to Rocket web framework turns building REST API super easy. Deploying your Rust app on AWS with Qovery is as simple as selecting your GitHub repository. Nothing more. Hope you liked it.

                                                                              Useful resources

                                                                              Tutorial
                                                                              - + - + @@ -85,7 +85,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-helm-charts/index.html b/guides/tutorial/how-to-deploy-helm-charts/index.html index 30ba34a3f0..b8bb8de8f1 100644 --- a/guides/tutorial/how-to-deploy-helm-charts/index.html +++ b/guides/tutorial/how-to-deploy-helm-charts/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -49,14 +49,14 @@ In all the examples, we will make use of the Lifecycle jobs to manage the deployment of your helm chart (install and uninstall). The Lifecycle job configuration will be different depending on the method you have chosen.

                                                                              Lifecycle job parameters for Helm charts

                                                                              From the Qovery Helm container, several options exist and are accessible through environment variables to help you to configure the chart deployment:

                                                                              NameDescriptionDefault ValueRequired
                                                                              HELM_REPO_ADD_NAMEThe Helm repository nameno
                                                                              HELM_REPO_ADD_URLThe Helm chart URL (if none is specified, Artifact Hub will be used)defaultno
                                                                              HELM_REPO_PATHThe local repository PATH or name from Artifact Hubyes
                                                                              HELM_RELEASE_NAMEThe release name of the chart deployment (should be unique in a given namespace)yes
                                                                              HELM_VALUESThe Helm chart values file path, containing your custom settings to override from the default valuesno
                                                                              HELM_TIMEOUT_SECThe Helm timeout in seconds, to install and uninstall chart180no
                                                                              HELM_MAX_HISTORYThe number of releases history. Useful to be able to rollback50no
                                                                              HELM_DRY_RUNEnable or disable dry run for testing purposefalseno
                                                                              HELM_SHOW_DIFFEnable or disable helm diff between the currently deployed version and the requested onefalseno
                                                                              HELM_ADDITIONAL_PARAMSAdditional Helm CLI parameters to add to the command lineno
                                                                              HELM_KUBERNETES_NAMESPACEKubernetes namespace name in which this chart will be deployed$QOVERY_KUBERNETES_NAMESPACE_NAMEno
                                                                              KUBECONFIGThe Kubeconfig file path locationno*
                                                                              KUBECONFIG_B64The encoded base64 Kubeconfig content. It will be decoded and used in KUBECONFIG environment variableno*
                                                                              KUBECONFIG_GET_EKSSet to true to get the Kubeconfig from AWS API. It will be used as KUBECONFIG environment variablefalseno*

                                                                              Chart deployment

                                                                              In this tutorial, Kubecost will be the chart to deploy. You can deploy it in an environment where other applications are already deployed or create a dedicated one for this purpose (tooling, monitoring...).

                                                                              From a 3rd party or Artifact Hub

                                                                              First of all, create a Lifecycle Job:

                                                                              create lifecycle job

                                                                              Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                              lifecycle event

                                                                              Click on continue and go up to the environment variables.

                                                                              Qovery Helm image to deploy Helm charts, proposes several options to be set with the help of environment variables:

                                                                              VariableValueSecret
                                                                              HELM_REPO_ADD_NAMEkubecostno
                                                                              HELM_REPO_ADD_URLhttps://kubecost.github.io/cost-analyzer/no
                                                                              HELM_REPO_PATHkubecost/cost-analyzerno
                                                                              HELM_RELEASE_NAMEkubecostno
                                                                              HELM_KUBERNETES_NAMESPACEkubecostno

                                                                              Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                              VariableValueSecret
                                                                              HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                              From a Helm chart from a Git repository

                                                                              If you prefer using a GitOps approach, having all your charts, etc... in a single Git repository, it is possible to deploy your charts this way.

                                                                              From a very simple repository where we could have a helm-freeze configuration looking like this:

                                                                              charts:
                                                                              - name: cost-analyzer
                                                                              version: 1.99.0
                                                                              repo_name: kubecost
                                                                              repos:
                                                                              - name: stable
                                                                              url: https://charts.helm.sh/stable
                                                                              - name: kubecost
                                                                              url: https://kubecost.github.io/cost-analyzer/
                                                                              -
                                                                              destinations:
                                                                              - name: default
                                                                              path: ./charts

                                                                              Running helm-freeze sync will download the chart cost-analyzer into the charts folder. You can then use this simple Dockerfile which will add all the content of this git repository inside a container:

                                                                              FROM qoveryrd/helm:1.0
                                                                              ADD . /helm
                                                                              ENTRYPOINT ["/helm/run.sh"]

                                                                              Finally, add the run.sh file from the Qovery Helm image inside your repository. Commit now everything. To summarize, in your Git repository you should have:

                                                                              • charts: a folder containing all the charts (here cost-analyzer chart)
                                                                              • Dockerfile: helping you to deploy helm chart and containing all your charts
                                                                              • helm-freeze.yaml: configuration file for helm-freeze
                                                                              • run.sh: the container start script

                                                                              We are now ready to create a Lifecycle job and select your repository:

                                                                              create lifecycle job

                                                                              Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                              lifecycle event

                                                                              Set the environment variables to point to the chart to deploy with the release name and other required information:

                                                                              VariableValueSecret
                                                                              HELM_REPO_PATH/helm/charts/cost-analyzerno
                                                                              HELM_RELEASE_NAMEkubecostno
                                                                              HELM_KUBERNETES_NAMESPACEkubecostno

                                                                              Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                              VariableValueSecret
                                                                              HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                              Lifecycle Job and Timeout management

                                                                              The default Helm timeout set by Qovery is 3 minutes. Qovery enables Helm options:

                                                                              • --wait: to wait for all resources to be in a ready state before marking the release as successful
                                                                              • --atomic: to roll back the release if the deployment fails

                                                                              Because of the atomic check, the rollback can take more than 5 minutes. By default, Qovery set the default Lifecycle timeout to 3 minutes, to avoid falling into this issue, but there is no guarantee, it depends on what resources are deployed:

                                                                              Qovery strongly recommends leveraging the default Qovery Lifecycle Job timeout or reducing the default Helm timeout to ensure the rollback will occur properly in case of failure.

                                                                              Conclusion

                                                                              As you can see, deploying Helm charts with Qovery is straightforward. Qovery Lifecycle jobs and its Qovery Helm image should help you a lot if you familiarize yourself with it and its options.

                                                                              +
                                                                              destinations:
                                                                              - name: default
                                                                              path: ./charts

                                                                              Running helm-freeze sync will download the chart cost-analyzer into the charts folder. You can then use this simple Dockerfile which will add all the content of this git repository inside a container:

                                                                              FROM qoveryrd/helm:1.0
                                                                              ADD . /helm
                                                                              ENTRYPOINT ["/helm/run.sh"]

                                                                              Finally, add the run.sh file from the Qovery Helm image inside your repository. Commit now everything. To summarize, in your Git repository you should have:

                                                                              • charts: a folder containing all the charts (here cost-analyzer chart)
                                                                              • Dockerfile: helping you to deploy helm chart and containing all your charts
                                                                              • helm-freeze.yaml: configuration file for helm-freeze
                                                                              • run.sh: the container start script

                                                                              We are now ready to create a Lifecycle job and select your repository:

                                                                              create lifecycle job

                                                                              Then select the Start event, and add ["install"] in the command arguments. In the Delete event, add ["uninstall"]. And configure them to run the install during the Start

                                                                              lifecycle event

                                                                              Set the environment variables to point to the chart to deploy with the release name and other required information:

                                                                              VariableValueSecret
                                                                              HELM_REPO_PATH/helm/charts/cost-analyzerno
                                                                              HELM_RELEASE_NAMEkubecostno
                                                                              HELM_KUBERNETES_NAMESPACEkubecostno

                                                                              Additionally, you can set the Kubecost token if you have a license with additional Helm args like:

                                                                              VariableValueSecret
                                                                              HELM_ADDITIONAL_PARAMS--set kubecostToken="xxx"yes

                                                                              Lifecycle Job and Timeout management

                                                                              The default Helm timeout set by Qovery is 3 minutes. Qovery enables Helm options:

                                                                              • --wait: to wait for all resources to be in a ready state before marking the release as successful
                                                                              • --atomic: to roll back the release if the deployment fails

                                                                              Because of the atomic check, the rollback can take more than 5 minutes. By default, Qovery set the default Lifecycle timeout to 3 minutes, to avoid falling into this issue, but there is no guarantee, it depends on what resources are deployed:

                                                                              Qovery strongly recommends leveraging the default Qovery Lifecycle Job timeout or reducing the default Helm timeout to ensure the rollback will occur properly in case of failure.

                                                                              Conclusion

                                                                              As you can see, deploying Helm charts with Qovery is straightforward. Qovery Lifecycle jobs and its Qovery Helm image should help you a lot if you familiarize yourself with it and its options.

                                                                              - + - + @@ -64,7 +64,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html index 398451a7cb..54b86b4b36 100644 --- a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html +++ b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@
                                                                              Stats
                                                                              6 min read
                                                                              Updated

                                                                              Amazon Web Services (AWS) is a platform that offers flexible, reliable, and scalable Cloud computing solutions. The platform is developed with a combination of infrastructure as a service (IaaS), platform as a service (PaaS), and packaged software as a service (SaaS) offerings. In 2021, thousands of companies host their apps on AWS. In 2006, AWS was composed of only 3 services (SQS, S3, EC2) that were simple to use. In 2021, more than 200 services and 2000 features exist, and deploying your app can take days.

                                                                              Qovery is the simplest way to deploy your apps on AWS.

                                                                              In this tutorial, I will explain step by step how to deploy your app on AWS in 30 minutes. No AWS/infrastructure/Cloud knowledge required - no kidding!

                                                                              Before you start

                                                                              1. This tutorial is perfect for anyone interested into deploying their apps on AWS seamlessly.
                                                                              2. If you have any question or suggestion on this tutorial, please contact us via this form or Discord.

                                                                              What is Qovery

                                                                              Qovery is a platform that makes your app deployment on AWS very simple. The installation of Qovery on your AWS account takes approximately 30 minutes. Then you're ready to deploy your apps "à la" Heroku-like.

                                                                              Why you should use AWS

                                                                              • You need a reliable hosting platform.
                                                                              • You want to stay focus on what you are building.
                                                                              • You need to speed up your Go-To-Market and Product Market Fit.
                                                                              • You plan to be the next unicorn 🦄

                                                                              Why you should not use AWS

                                                                              • You are building a hobby project.
                                                                              • You are looking for a cheap hosting provider.
                                                                              • You do not want to use Amazon services.

                                                                              Let's start!

                                                                              Video: Install Qovery on AWS

                                                                              Step-by-step: Install Qovery on AWS

                                                                              Create an AWS account

                                                                              If you already have an AWS account, you can go to the next point.

                                                                              Before creating an AWS account, I'd recommend contacting AWS to see if you are eligible to free credits. AWS provides up to $100k of credits for 12 to 24 months. Which is convenient to have at the beginning of a project. If you know that you are not eligible, you can create your account by clicking on the top right button Create an AWS Account of their main page.

                                                                              Create an account on AWS

                                                                              Get your AWS API keys

                                                                              To install Qovery on your AWS account, the secret access key and access key id are required. Here is a comprehensive step-by-step guide on how to generate your secret access key and access key id. If you already have those keys, then you can go to the next point.

                                                                              Configure Qovery

                                                                              Sign-up to Qovery

                                                                              Using Qovery is as simple as connect with your Github, Gitlab or Bitbucket account on start.qovery.com.

                                                                              -> Connect to Qovery

                                                                              Create your Organization

                                                                              An organization is a shared account where developers can collaborate across many projects at once. Owners and organization administrators can manage:

                                                                              • Cloud accounts.
                                                                              • Members access.
                                                                              • Billing.

                                                                              Read more about Organizations

                                                                              To deploy on your AWS account, you have to choose between Free, Professional and Business plan for your organization.

                                                                              Qovery - Create an Organization and select the plan

                                                                              Install Qovery on your AWS account

                                                                              1/ Go to your organization settings by clicking on the "cog" icon next to your organization name.

                                                                              Go your organization settings > clusters

                                                                              2/ Create a cluster, select Amazon Web Services and the region where you want to deploy your apps.

                                                                              Create a cluster

                                                                              3/ Set your AWS credentials. (Check out this guide if you have no AWS credentials).

                                                                              Set your cloud credentials

                                                                              4/ Under the hood, Qovery uses a managed Kubernetes (AWS EKS) to run your applications. You need to specify the instance type that you would like to use and the min/max number of nodes. Qovery will keep low the number of nodes and will only scale up your nodes if your applications really need to scale. If you don't know which instance type to chose, have a look at the AWS instance list or use the helper to chose the right instance based on your CPU/RAM needs.

                                                                              Set your cluster resources

                                                                              5/ Click on Save and Deploy.

                                                                              AWS cluster is now available

                                                                              Congrats! Qovery will be installed within 30 minutes 🎉. You will be notified when it is all good. In the meantime, you can take a look at our guide section.

                                                                              6/ Enable cluster sync with SSO account

                                                                              If you're using SSO for your AWS account deploying the Qovery cluster you have to add some infos in the aws-auth configmap in kube-system namespace. -Connect to your cluster and edit the aws-auth configmap in order to add the following code in the mapRoles section:

                                                                              - rolearn: arn:aws:iam::<iam_id>:role/AWSReservedSSO_AdministratorAccess_<the_role_id>
                                                                              username: "{{SessionName}}"
                                                                              groups:
                                                                              - system:masters

                                                                              Deploy your application

                                                                              Once Qovery is installed on your AWS account, you have the possibility to deploy your application. Take a look to our guide on how to deploy your first application with Qovery.

                                                                              Deploy your first application
                                                                              +Connect to your cluster and edit the aws-auth configmap in order to add the following code in the mapRoles section:

                                                                              - rolearn: arn:aws:iam::<iam_id>:role/AWSReservedSSO_AdministratorAccess_<the_role_id>
                                                                              username: "{{SessionName}}"
                                                                              groups:
                                                                              - system:masters

                                                                              Deploy your application

                                                                              Once Qovery is installed on your AWS account, you have the possibility to deploy your application. Take a look to our guide on how to deploy your first application with Qovery.

                                                                              Deploy your first application
                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html index 1c49c58887..30bc94a074 100644 --- a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html +++ b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -51,14 +51,14 @@ As an example we will define a workflow for a NodeJS application. We will first run our unit tests, then launch the Qovery deployment if the tests pass.

                                                                              You can adapt those steps for your own stack and needs. Read the GitHub Actions documentation to learn more.

                                                                              1. Create the Workflows directory

                                                                                All your workflows files must be stored in a specific .github/workflows directory. Create this directory at the root of your project.

                                                                              2. Add a Test and Deploy workflow

                                                                                In your Workflows folder, create a test-and-deploy.yaml file with the following content:

                                                                                .github/workflows/test-and-deploy.yaml
                                                                                name: Test And Deploy to Qovery
                                                                                on:
                                                                                workflow_call:
                                                                                secrets:
                                                                                api-token:
                                                                                required: true
                                                                                jobs:
                                                                                test:
                                                                                runs-on: ubuntu-latest
                                                                                steps:
                                                                                - uses: actions/checkout@v2
                                                                                - name: Install modules
                                                                                run: yarn
                                                                                - name: Run tests
                                                                                run: yarn test
                                                                                deploy:
                                                                                needs: test
                                                                                runs-on: ubuntu-latest
                                                                                name: Deploy on Qovery
                                                                                steps:
                                                                                - name: Deploy with Qovery
                                                                                uses: actions/checkout@v3
                                                                                env:
                                                                                QOVERY_CLI_ACCESS_TOKEN: ${{ secrets.QOVERY_CLI_ACCESS_TOKEN }}
                                                                                shell: bash
                                                                                run: |
                                                                                # Download and install Qovery CLI
                                                                                curl -s https://get.qovery.com | bash
                                                                                qovery application deploy \
                                                                                --organization <your_org_name> \
                                                                                --project <your_project_name> \
                                                                                --environment <your_environment_name> \
                                                                                --application <your_qovery_app_name> \
                                                                                --commit-id ${{ github.sha }} \
                                                                                --watch
                                                                                • The on section contains a workflow_call directive. It means that this workflow will be triggered when called from another workflow. We're doing this because we won't use this workflow directly. Since we might have several environments to deploy to Qovery depending on the branch, we could have one workflow per environment, and we want to avoid repeating all the steps.
                                                                                • The inputs and secrets sections are defining the values that we will need to pass to our workflow
                                                                                • The jobs section lists the jobs and the steps that in needs to accomplish. Here we have two jobs and five steps:
                                                                                  • test where we check out the code, we install Yarn modules, and we run tests through Jest
                                                                                  • deploy where we check out the code and deploy to Qovery.

                                                                                Several things worth noting:

                                                                                • The organization / project / environment / application are case-sensitive.
                                                                                • Our deploy job has a needs instructions, telling GitHub Actions that this job can only run when the test job succeeds.
                                                                                • The with section of our last deploy step contains interpolated strings: ${{ inputs.xxxx }}. Those are values passed to our workflow, that our Qovery action needs. They will be passed from the calling workflow.
                                                                              3. Get a Qovery API token

                                                                                To get an API token, use the Qovery CLI:

                                                                                qovery token
                                                                                • Select your organization. (tokens are valid for only one organization).
                                                                                • Enter a name for your token.
                                                                                • Enter a description for your token.

                                                                                You will get an output like this one:

                                                                                qovery token Qovery: ---- Never share this authentication token and keep it secure ----
                                                                                Qovery: qov_xxx....
                                                                                Qovery: ---- Never share this authentication token and keep it secure ----
                                                                              4. Add your token to your GitHub repository secrets

                                                                                Go to your GitHub repository then to the Settings:

                                                                                Got to the Secrets/Actions section and click on New repository secret:

                                                                                Add your secret with the name QOVERY_API_TOKEN and save:

                                                                              Execute the GitHub Actions Pipeline

                                                                              We're done with the setup. You can now push your code to the main branch. If you did it properly, under the Actions tab on your GitHub repository, you should see your job being run.

                                                                              You can click on it to see the details of the jobs. Once the testing phase is green, it will start the deployment job.

                                                                              As soon as the job is set up, and it starts actually deploying, go to the Qovery console and check that your application is actually being deployed.

                                                                              Advanced use-cases

                                                                              It's possible to support any use cases by using the Qovery CLI. Like cloning an environment, changing the branch of some applications and deploying only a subset of applications. Refers to the Qovery CLI documentation to explore all the commands that you can use.

                                                                              Check out our GitHub Actions integration page to check out more examples.

                                                                              Conclusion

                                                                              Integrating Qovery with GitHub Actions enables more complex workflows than just deploying on code push. You can make sure your test suite succeeds before deploying -or anything else you need, without sacrificing the simplicity of deployment Qovery brings you.

                                                                              +or anything else you need, without sacrificing the simplicity of deployment Qovery brings you.

                                                                              - + - + @@ -66,7 +66,7 @@ - + diff --git a/guides/tutorial/how-to-run-commands-at-application-startup/index.html b/guides/tutorial/how-to-run-commands-at-application-startup/index.html index f6c2779af6..dc6c179e4b 100644 --- a/guides/tutorial/how-to-run-commands-at-application-startup/index.html +++ b/guides/tutorial/how-to-run-commands-at-application-startup/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@
                                                                              # ...
                                                                              ENTRYPOINT ["./docker/entrypoint.sh"]
                                                                              EXPOSE 3000
                                                                              -
                                                                              CMD ["rails", "server", "-p", "3000", "-b", "0.0.0.0"]

                                                                              You can learn more about Docker entrypoints here: https://docs.docker.com/engine/reference/builder/#entrypoint

                                                                            • Deploy your application

                                                                              You can now commit and push your changes to your Git repository. The instructions you specified in the entrypoint.sh file will be executed before the application starts.

                                                                            • +
                                                                              CMD ["rails", "server", "-p", "3000", "-b", "0.0.0.0"]

                                                                              You can learn more about Docker entrypoints here: https://docs.docker.com/engine/reference/builder/#entrypoint

                                                                            • Deploy your application

                                                                              You can now commit and push your changes to your Git repository. The instructions you specified in the entrypoint.sh file will be executed before the application starts.

                                                                            • - + - + @@ -69,7 +69,7 @@ - + diff --git a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html index 6a803c53d7..7aee988bd1 100644 --- a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html +++ b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -47,14 +47,14 @@

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              Setting up AWS CloudFront for frontend apps on Qovery

                                                                              If you'd like to use Cloudflare instead of CloudFront as your CDN, check out this article.

                                                                              Frontend apps primarily consist of static content which goes unchanged. Web pages that contain static assets are essentially prebuilt, which makes it efficiently quicker to grab and render content. Their static nature makes them a perfect use case for CDNs and caching systems on edge servers is as it boosts the web page performance and user experience with the system.

                                                                              Stack

                                                                              For our frontend stack, we'll use a React app that is served as static files using Nginx.

                                                                              Frontend Application

                                                                              To bootstrap the application skeleton, we use create-react-app:

                                                                              npx create-react-app my-app

                                                                              Then, we add a Dockerfile to configure how to build the application image:

                                                                              FROM node:14-alpine AS builder
                                                                              ENV NODE_ENV production
                                                                              # Add a work directory
                                                                              WORKDIR /app
                                                                              # Cache and Install dependencies
                                                                              COPY package.json .
                                                                              COPY yarn.lock .
                                                                              RUN yarn install --production
                                                                              # Copy app files
                                                                              COPY . .
                                                                              # Build the app
                                                                              RUN yarn build
                                                                              # Bundle static assets with nginx
                                                                              FROM nginx:1.21.0-alpine as production
                                                                              ENV NODE_ENV production
                                                                              # Copy built assets from builder
                                                                              COPY --from=builder /app/build /usr/share/nginx/html
                                                                              # Add your nginx.conf
                                                                              COPY nginx.conf /etc/nginx/conf.d/default.conf
                                                                              # Expose port
                                                                              EXPOSE 80
                                                                              # Start nginx
                                                                              CMD ["nginx", "-g", "daemon off;"]

                                                                              The last step - let's configure our Nginx server by adding a nginx.conf file with the following content:

                                                                              server {
                                                                              listen 80;
                                                                              -
                                                                              location / {
                                                                              root /usr/share/nginx/html/;
                                                                              include /etc/nginx/mime.types;
                                                                              try_files $uri $uri/ /index.html;
                                                                              }
                                                                              }

                                                                              Deployment

                                                                              Now, to deploy the app, create a new application on Qovery with the following configuration:

                                                                              • Port - 80
                                                                              • Build Mode - Docker
                                                                              • Keep other options in default settings

                                                                              After the app is created and configured as above, you can safely run the app deployment. After a few minutes when the app is running, click on the Open button:

                                                                              CloudFront

                                                                              CloudFront

                                                                              To set up CloudFront as a CDN, first, navigate to CloudFront service in AWS console and click on the new distribution button:

                                                                              CloudFront

                                                                              In settings, choose an origin (URL to your frontend app hosted on Qovery):

                                                                              CloudFront

                                                                              You can also tweak other settings or leave them in their defaults:

                                                                              CloudFront

                                                                              Additionally, you can assign an alternate domain to your application in Alternate domain name:

                                                                              CloudFront

                                                                              Adding an alternate domain requires it having a certificate - click on the Request certificate button, type your alternate domain name and use DNS for validation method:

                                                                              CloudFront

                                                                              Request the certificate. In the end, you will see a screen with settings you need to set up in your domain name provider:

                                                                              CloudFront

                                                                              Copy them and save them in your DNS provider settings:

                                                                              CloudFront

                                                                              After it's done, you should be granted a certificate - go back to CloudFront Distribution settings, and pick the certificate for your alternate domain name from the list:

                                                                              CloudFront

                                                                              In the end, you should end up with a CloudFront set up with your app on Qovery and using an alternate domain name. Now it's time for you to tweak the CloudFront settings to meet your needs.

                                                                              CloudFront

                                                                              +
                                                                              location / {
                                                                              root /usr/share/nginx/html/;
                                                                              include /etc/nginx/mime.types;
                                                                              try_files $uri $uri/ /index.html;
                                                                              }
                                                                              }

                                                                              Deployment

                                                                              Now, to deploy the app, create a new application on Qovery with the following configuration:

                                                                              • Port - 80
                                                                              • Build Mode - Docker
                                                                              • Keep other options in default settings

                                                                              After the app is created and configured as above, you can safely run the app deployment. After a few minutes when the app is running, click on the Open button:

                                                                              CloudFront

                                                                              CloudFront

                                                                              To set up CloudFront as a CDN, first, navigate to CloudFront service in AWS console and click on the new distribution button:

                                                                              CloudFront

                                                                              In settings, choose an origin (URL to your frontend app hosted on Qovery):

                                                                              CloudFront

                                                                              You can also tweak other settings or leave them in their defaults:

                                                                              CloudFront

                                                                              Additionally, you can assign an alternate domain to your application in Alternate domain name:

                                                                              CloudFront

                                                                              Adding an alternate domain requires it having a certificate - click on the Request certificate button, type your alternate domain name and use DNS for validation method:

                                                                              CloudFront

                                                                              Request the certificate. In the end, you will see a screen with settings you need to set up in your domain name provider:

                                                                              CloudFront

                                                                              Copy them and save them in your DNS provider settings:

                                                                              CloudFront

                                                                              After it's done, you should be granted a certificate - go back to CloudFront Distribution settings, and pick the certificate for your alternate domain name from the list:

                                                                              CloudFront

                                                                              In the end, you should end up with a CloudFront set up with your app on Qovery and using an alternate domain name. Now it's time for you to tweak the CloudFront settings to meet your needs.

                                                                              CloudFront

                                                                              - + - + @@ -62,7 +62,7 @@ - + diff --git a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html index 19a12c6dfc..9a99c00607 100644 --- a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html +++ b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -46,14 +46,14 @@

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              Learn how to use Lifecycle Job to deploy any kind of resources with Qovery.

                                                                              The Lifecycle Job is a powerful feature that allows you to run any kind of commands before or after your environment is deployed. It can be used to run database migrations, create a new database, or even to run a script that will create a new user.

                                                                              Some use cases:

                                                                              • Run Terraform, Pulumi, or any other infrastructure as code tool to create resources.
                                                                              • You want to deploy SQS, SNS, Lambdas, or any other AWS resources.
                                                                              • You want to deploy MongoDB Atlas, Google BigQuery, or any other cloud services.
                                                                              • Seed your database when your environment is created.

                                                                              In a more general way, you can see the Lifecycle Job as a way to create and destroy resources when your environment is deployed or deleted. Possibilities are endless.

                                                                              How to use Lifecycle Job (example with Terraform)

                                                                              In this example, we will use Terraform to create a new AWS RDS MySQL instance. I will use this example to schematize the process of using the Lifecycle Job. ⚠️ Note that you can use any other tool to create your resources. Lifecycle Job is not limited to Terraform. However, Terraform is a great way to show the power of the Lifecycle Job since it requires a lot of configuration and can be used to create a lot of different resources.

                                                                              Execution Flow

                                                                              Here is the execution flow when my Environment is deployed:

                                                                              1. Qovery builds my Lifecycle Job (and my others services).
                                                                              2. Qovery runs my Lifecycle Job Start Event (and my others services).
                                                                              3. My Lifecycle Job creates a new AWS RDS MySQL instance.
                                                                              4. My Lifecycle Job injects the database credentials into a /qovery-output/qovery-output.json file.
                                                                              5. Qovery reads the /qovery-output/qovery-output.json file and injects the database credentials into my Environment Variables.
                                                                              6. My others services can access my database.

                                                                              When my Environment is deleted:

                                                                              1. Qovery runs my Lifecycle Job Deleted Event
                                                                              2. My Lifecycle Job destroys the AWS RDS MySQL instance.
                                                                              3. Qovery destroys my Environment and release all the resources.

                                                                              Create a Lifecycle Job

                                                                              1. Fork this repository.

                                                                              2. Go inside your Environment, and add a Lifecycle Job.

                                                                              3. Give a name, description, pick your GitHub account, and select the repository of the Lifecycle Job. In our example, the root application path is /examples/aws-rds-with-terraform.

                                                                              4. Since we are using Terraform, we want to make sure that our MySQL RDS instance is created when our Environment is deployed. So we select the Start Event. -We also want to make sure that our MySQL RDS instance is destroyed when our Environment is deleted. So we select the Deleted Event.

                                                                                If you look at our Dockerfile in the repository, you will see that we are using the official Terraform image. I have also inserted by default the ENTRYPOINT ["/bin/sh"] to simplify the Qovery Lifecycle Job configuration.

                                                                                For the Start Event, we want to run the terraform apply -no-color -auto-approve command. We don't need to run the terraform init command since it is already done in the Dockerfile.

                                                                                You will also notice that we are also using && terraform output -json > /qovery-output/qovery-output.json to create a /qovery-output/qovery-output.json file. This file will be used by Qovery to inject the database credentials into our Environment Variables. We will cover this part later.

                                                                                For the Deleted Event, we want to run the terraform destroy -no-color -auto-approve command.

                                                                                So for the Start Event, we have: ["-c","terraform apply -no-color -auto-approve && terraform output -json > /qovery-output/qovery-output.json"] and for the Deleted Event, we have: ["-c","terraform destroy -no-color -auto-approve"]. Feel free to copy/paste these commands.

                                                                              5. I recommend setting the Timeout to 1800 seconds (30 minutes). It is the maximum time your Lifecycle Job can run. If your Lifecycle Job takes more than 30 minutes to run it will be stopped by Qovery. In our case, it should take less than 10 minutes to create the AWS RDS MySQL instance. But let's be safe.

                                                                                Click Continue.

                                                                              6. Now we need to set the vCPU and RAM required to run our Job. We can allocate 0.5 CPU and 256 MB of RAM. It's more than enough.

                                                                              7. We need to set the Environment Variables required by our Lifecycle Job. In our case, we need to set the AWS credentials and some other environment variables. If you look at our Dockerfile, you will find the declaration of all those environment variables. You can copy/paste them.

                                                                                Dockerfile
                                                                                ...
                                                                                ARG TF_VAR_terraform_backend_bucket
                                                                                ARG TF_VAR_aws_region
                                                                                ARG TF_VAR_aws_access_key_id
                                                                                ARG TF_VAR_aws_secret_access_key
                                                                                ARG TF_VAR_qovery_environment_id
                                                                                ...

                                                                                Those are the ones that we need to set.

                                                                                Click on Continue.

                                                                              8. Then click on Create (and not Create and Deploy).

                                                                              9. Congrats, your Lifecycle Job is created. Now we just need to add the TF_VAR_qovery_environment_id environment variable before launching it.

                                                                              Make your Terraform deployment multi-environments ready

                                                                              To support multiple environments, we need to make sure that the name of the S3 object key where Terraform will store the state of your infrastructure is unique. To do that, we will use the TF_VAR_qovery_environment_id environment variable. This environment variable is automatically created by Qovery and contains the ID of your Environment. We just need to create an environment variable alias.

                                                                              1. Go inside your MySQL RDS service, click on the Variables tab.

                                                                              2. Search for QOVERY_ENVIRONMENT_ID built-in environment variable. Then click on Creat alias

                                                                              3. Set the name of the environment variable to TF_VAR_qovery_environment_id with a service scope and click on Confirm.

                                                                              Deploy AWS RDS MySQL instance

                                                                              1. Now you are ready to deploy your Lifecycle Job and see what happened.

                                                                                The job execution will take approximately 3 to 10 minutes.

                                                                              2. Follow the logs of the job execution by clicking on the Logs button.

                                                                                From the Deployment logs tab you can see that your Lifecycle Job is built and that the terraform init command is executed.

                                                                                From the MySQL RDS tab you can see that the terraform apply -no-color -auto-approve command is executed. The creation of the AWS RDS MySQL instance is in progress.

                                                                              3. Once the deployment is done, you should see that the AWS RDS MySQL instance is green and completed.

                                                                              Get the MySQL RDS credentials from the Lifecycle Job

                                                                              Now that the AWS RDS MySQL instance is created, we need to get the credentials to connect to it. We have use the terraform output -json > /qovery-output/qovery-output.json command to get the credentials. If you go back to the Variables tab of your MySQL RDS service, you will see that the QOVERY_OUTPUT_** environment variables are created.

                                                                              By using terraform output -json > /qovery-output/qovery-output.json Qovery automatically create those environment variables for you. You can use them in your application to connect to the AWS RDS MySQL instance. Learn more on how Lifecycle Job output...

                                                                              FAQ

                                                                              What happen if I delete my environment with your example?

                                                                              If you delete your environment, the AWS RDS MySQL instance will be deleted too. You can see that in the MySQL RDS service logs. You will see that the terraform destroy -no-color -auto-approve command is executed.

                                                                              Can I use the Lifecycle Job to deploy my application?

                                                                              Some users ask us if they can use the Lifecycle Job to deploy their application. The answer is yes!. The Lifecycle Job is designed to deploy all type of resources. However, we recommend using the official Qovery way to deploy applications. Learn more on how to deploy your application...

                                                                              What happen if I clone my Environment with the Lifecycle Job?

                                                                              If you clone an Environment with the Lifecycle Job, the Lifecycle Job will be cloned too. In our example we have set the TF_VAR_qovery_environment_id environment variable to the QOVERY_ENVIRONMENT_ID built-in environment variable. So when you clone your Environment, the QOVERY_ENVIRONMENT_ID built-in environment variable will be different. That's why you need to create a new alias environment variable for the QOVERY_ENVIRONMENT_ID built-in environment variable. Learn more on how to clone an Environment...

                                                                              What happen if I modify my Lifecycle Job after my Environment is deployed?

                                                                              If you modify your Lifecycle Job after your Environment is deployed, the Lifecycle Job will be redeployed. In our example, since the state of our AWS RDS MySQL instance is stored in the S3 bucket, the AWS RDS MySQL instance will not be recreated. However, if you modify the main.tf file, the AWS RDS MySQL instance will be updated.

                                                                              Wrapping up

                                                                              In this guide, we have seen how to use the Lifecycle Job to create an AWS RDS MySQL instance with Terraform. We have also seen how to get the credentials of the AWS RDS MySQL instance to connect to it from our application. To learn more about the Lifecycle Job, you can read the Lifecycle Job documentation. To get more examples, check out the Qovery Lifecycle Examples repository.

                                                                              +We also want to make sure that our MySQL RDS instance is destroyed when our Environment is deleted. So we select the Deleted Event.

                                                                              If you look at our Dockerfile in the repository, you will see that we are using the official Terraform image. I have also inserted by default the ENTRYPOINT ["/bin/sh"] to simplify the Qovery Lifecycle Job configuration.

                                                                              For the Start Event, we want to run the terraform apply -no-color -auto-approve command. We don't need to run the terraform init command since it is already done in the Dockerfile.

                                                                              You will also notice that we are also using && terraform output -json > /qovery-output/qovery-output.json to create a /qovery-output/qovery-output.json file. This file will be used by Qovery to inject the database credentials into our Environment Variables. We will cover this part later.

                                                                              For the Deleted Event, we want to run the terraform destroy -no-color -auto-approve command.

                                                                              So for the Start Event, we have: ["-c","terraform apply -no-color -auto-approve && terraform output -json > /qovery-output/qovery-output.json"] and for the Deleted Event, we have: ["-c","terraform destroy -no-color -auto-approve"]. Feel free to copy/paste these commands.

                                                                            • I recommend setting the Timeout to 1800 seconds (30 minutes). It is the maximum time your Lifecycle Job can run. If your Lifecycle Job takes more than 30 minutes to run it will be stopped by Qovery. In our case, it should take less than 10 minutes to create the AWS RDS MySQL instance. But let's be safe.

                                                                              Click Continue.

                                                                            • Now we need to set the vCPU and RAM required to run our Job. We can allocate 0.5 CPU and 256 MB of RAM. It's more than enough.

                                                                            • We need to set the Environment Variables required by our Lifecycle Job. In our case, we need to set the AWS credentials and some other environment variables. If you look at our Dockerfile, you will find the declaration of all those environment variables. You can copy/paste them.

                                                                              Dockerfile
                                                                              ...
                                                                              ARG TF_VAR_terraform_backend_bucket
                                                                              ARG TF_VAR_aws_region
                                                                              ARG TF_VAR_aws_access_key_id
                                                                              ARG TF_VAR_aws_secret_access_key
                                                                              ARG TF_VAR_qovery_environment_id
                                                                              ...

                                                                              Those are the ones that we need to set.

                                                                              Click on Continue.

                                                                            • Then click on Create (and not Create and Deploy).

                                                                            • Congrats, your Lifecycle Job is created. Now we just need to add the TF_VAR_qovery_environment_id environment variable before launching it.

                                                                              Make your Terraform deployment multi-environments ready

                                                                              To support multiple environments, we need to make sure that the name of the S3 object key where Terraform will store the state of your infrastructure is unique. To do that, we will use the TF_VAR_qovery_environment_id environment variable. This environment variable is automatically created by Qovery and contains the ID of your Environment. We just need to create an environment variable alias.

                                                                              1. Go inside your MySQL RDS service, click on the Variables tab.

                                                                              2. Search for QOVERY_ENVIRONMENT_ID built-in environment variable. Then click on Creat alias

                                                                              3. Set the name of the environment variable to TF_VAR_qovery_environment_id with a service scope and click on Confirm.

                                                                              Deploy AWS RDS MySQL instance

                                                                              1. Now you are ready to deploy your Lifecycle Job and see what happened.

                                                                                The job execution will take approximately 3 to 10 minutes.

                                                                              2. Follow the logs of the job execution by clicking on the Logs button.

                                                                                From the Deployment logs tab you can see that your Lifecycle Job is built and that the terraform init command is executed.

                                                                                From the MySQL RDS tab you can see that the terraform apply -no-color -auto-approve command is executed. The creation of the AWS RDS MySQL instance is in progress.

                                                                              3. Once the deployment is done, you should see that the AWS RDS MySQL instance is green and completed.

                                                                              Get the MySQL RDS credentials from the Lifecycle Job

                                                                              Now that the AWS RDS MySQL instance is created, we need to get the credentials to connect to it. We have use the terraform output -json > /qovery-output/qovery-output.json command to get the credentials. If you go back to the Variables tab of your MySQL RDS service, you will see that the QOVERY_OUTPUT_** environment variables are created.

                                                                              By using terraform output -json > /qovery-output/qovery-output.json Qovery automatically create those environment variables for you. You can use them in your application to connect to the AWS RDS MySQL instance. Learn more on how Lifecycle Job output...

                                                                              FAQ

                                                                              What happen if I delete my environment with your example?

                                                                              If you delete your environment, the AWS RDS MySQL instance will be deleted too. You can see that in the MySQL RDS service logs. You will see that the terraform destroy -no-color -auto-approve command is executed.

                                                                              Can I use the Lifecycle Job to deploy my application?

                                                                              Some users ask us if they can use the Lifecycle Job to deploy their application. The answer is yes!. The Lifecycle Job is designed to deploy all type of resources. However, we recommend using the official Qovery way to deploy applications. Learn more on how to deploy your application...

                                                                              What happen if I clone my Environment with the Lifecycle Job?

                                                                              If you clone an Environment with the Lifecycle Job, the Lifecycle Job will be cloned too. In our example we have set the TF_VAR_qovery_environment_id environment variable to the QOVERY_ENVIRONMENT_ID built-in environment variable. So when you clone your Environment, the QOVERY_ENVIRONMENT_ID built-in environment variable will be different. That's why you need to create a new alias environment variable for the QOVERY_ENVIRONMENT_ID built-in environment variable. Learn more on how to clone an Environment...

                                                                              What happen if I modify my Lifecycle Job after my Environment is deployed?

                                                                              If you modify your Lifecycle Job after your Environment is deployed, the Lifecycle Job will be redeployed. In our example, since the state of our AWS RDS MySQL instance is stored in the S3 bucket, the AWS RDS MySQL instance will not be recreated. However, if you modify the main.tf file, the AWS RDS MySQL instance will be updated.

                                                                              Wrapping up

                                                                              In this guide, we have seen how to use the Lifecycle Job to create an AWS RDS MySQL instance with Terraform. We have also seen how to get the credentials of the AWS RDS MySQL instance to connect to it from our application. To learn more about the Lifecycle Job, you can read the Lifecycle Job documentation. To get more examples, check out the Qovery Lifecycle Examples repository.

                                                                              - + - + @@ -61,7 +61,7 @@ - + diff --git a/guides/tutorial/how-to-write-a-dockerfile/index.html b/guides/tutorial/how-to-write-a-dockerfile/index.html index 1e0c024efd..bb92141e6e 100644 --- a/guides/tutorial/how-to-write-a-dockerfile/index.html +++ b/guides/tutorial/how-to-write-a-dockerfile/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -44,14 +44,14 @@
                                                                              -

                                                                              How to write a Dockerfile

                                                                              How to write your first Dockerfile in order to deploy your application with Qovery

                                                                              With Qovery, there are two ways to build and deploy your application:

                                                                              1. Without a Dockerfile in your repository: your application is built with Buildpacks
                                                                              2. With a Dockerfile: sometimes Buildpacks won't fit your specific setup, and you'll have to write your Dockerfile.

                                                                              In this article, we'll see, step by step, how to quickly write a proper Dockerfile for any application you would like to deploy.


                                                                              My Sweet Dockerfile

                                                                              If you read this, you probably don't know why Docker is used and what is the purpose of a Dockerfile.

                                                                              Docker is a container engine, building and using images to deploy applications in containers. It looks like virtualization, and each container could be compared to a virtual machine with the minimal setup to run an application.

                                                                              The Dockerfile is your image builder recipe. When Docker uses it, it will follow all instructions to build your application and run it.

                                                                              The first step is to create a file named Dockerfile at your project root level so Qovery would be able to find and use it.

                                                                              Also, to avoid unwanted files from your repository (images, .idea, DS_Store etc.), you need to add a .dockerignore. It will prevent heavy copy tasks of useless files, mostly your project dependencies and libraries you'll get back to with your package manager.

                                                                              The .dockerignore file works like the .gitignore, so add all the path of the useless files and folders in it.

                                                                              FROM

                                                                              The first line you'll add in your Dockerfile is FROM.

                                                                              It will pull an already existing image from Docker Hub. You should most of the time use an image that fits your application language (Node, Python, Java, etc.), but you can go a step backward and begin with a simple Linux image.

                                                                              Your Dockerfile's first line should look like this:

                                                                              FROM <image_name>:<image_version>

                                                                              For example, with python:

                                                                              FROM python:3

                                                                              WORKDIR

                                                                              Since most of the images are Linux-based, a good practice is to set up a directory you'll work in. That's the purpose of the WORKDIR line. It defines a directory and moves you in:

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app

                                                                              If you now work with a relative path (./), it will be in the app directory.

                                                                              COPY

                                                                              Now you have defined your base image and your working directory, it's time to add your code in. COPY works like cp linux command. First argument is the source and second one is the destination.

                                                                              It's time to copy your source code in the image.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .

                                                                              Here, the elements of your root folder from your current directory will be added inside the /app folder.

                                                                              RUN

                                                                              One does not simply get source code to run an application.

                                                                              Most of the time, you have some stuff to do before an application execution like downloading/installing peer dependencies and build your application.

                                                                              That's the purpose of RUN lines; it will execute a command and wait to finish the task to go forward.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff."
                                                                              RUN <my_command>

                                                                              You can set as many RUN lines as you need.

                                                                              EXPOSE

                                                                              If your app needs to be reached from outside the container, you have to open its listening port. EXPOSE is made for this.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff"
                                                                              RUN <my_command>
                                                                              EXPOSE <app_port>

                                                                              CMD

                                                                              Your application is now ready to run.

                                                                              The last thing to do is to specify how to execute it. Add the CMD line with the same command with all the arguments you use locally to launch your application.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff"
                                                                              RUN <my_command>
                                                                              EXPOSE <app_port>
                                                                              CMD [ "<command>", "<argument_1>", "<argument_2>" ]

                                                                              Like a local usage, you can set as many arguments as needed.

                                                                              Build your image

                                                                              When Qovery uses your Dockerfile, it first builds it before running it.

                                                                              If the build fails, Qovery won't be able to launch our application. To simplify debugging, you can build your image locally if you have Docker installed on your computer.

                                                                              Open a terminal and set the path at the Dockerfile location, and use the command:

                                                                              cd ~/my/folder/where/my/code/is
                                                                              docker build .

                                                                              It will build your image based on your Dockerfile. You'll see all the logs related to all lines you've added in the Dockerfile.

                                                                              If something goes wrong, it will be printed onto the terminal, and you'll be able to debug it.

                                                                              Test your image

                                                                              If your image builds properly, you can now check how it will be handle by Qovery with the command:

                                                                              qovery run

                                                                              What's next?

                                                                              If you follow this tutorial and everything works perfectly, it's time to deploy your app on Qovery. You will find all the things you need to know here.

                                                                              Tutorial
                                                                              +

                                                                              How to write a Dockerfile

                                                                              How to write your first Dockerfile in order to deploy your application with Qovery

                                                                              With Qovery, there are two ways to build and deploy your application:

                                                                              1. Without a Dockerfile in your repository: your application is built with Buildpacks
                                                                              2. With a Dockerfile: sometimes Buildpacks won't fit your specific setup, and you'll have to write your Dockerfile.

                                                                              In this article, we'll see, step by step, how to quickly write a proper Dockerfile for any application you would like to deploy.


                                                                              My Sweet Dockerfile

                                                                              If you read this, you probably don't know why Docker is used and what is the purpose of a Dockerfile.

                                                                              Docker is a container engine, building and using images to deploy applications in containers. It looks like virtualization, and each container could be compared to a virtual machine with the minimal setup to run an application.

                                                                              The Dockerfile is your image builder recipe. When Docker uses it, it will follow all instructions to build your application and run it.

                                                                              The first step is to create a file named Dockerfile at your project root level so Qovery would be able to find and use it.

                                                                              Also, to avoid unwanted files from your repository (images, .idea, DS_Store etc.), you need to add a .dockerignore. It will prevent heavy copy tasks of useless files, mostly your project dependencies and libraries you'll get back to with your package manager.

                                                                              The .dockerignore file works like the .gitignore, so add all the path of the useless files and folders in it.

                                                                              FROM

                                                                              The first line you'll add in your Dockerfile is FROM.

                                                                              It will pull an already existing image from Docker Hub. You should most of the time use an image that fits your application language (Node, Python, Java, etc.), but you can go a step backward and begin with a simple Linux image.

                                                                              Your Dockerfile's first line should look like this:

                                                                              FROM <image_name>:<image_version>

                                                                              For example, with python:

                                                                              FROM python:3

                                                                              WORKDIR

                                                                              Since most of the images are Linux-based, a good practice is to set up a directory you'll work in. That's the purpose of the WORKDIR line. It defines a directory and moves you in:

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app

                                                                              If you now work with a relative path (./), it will be in the app directory.

                                                                              COPY

                                                                              Now you have defined your base image and your working directory, it's time to add your code in. COPY works like cp linux command. First argument is the source and second one is the destination.

                                                                              It's time to copy your source code in the image.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .

                                                                              Here, the elements of your root folder from your current directory will be added inside the /app folder.

                                                                              RUN

                                                                              One does not simply get source code to run an application.

                                                                              Most of the time, you have some stuff to do before an application execution like downloading/installing peer dependencies and build your application.

                                                                              That's the purpose of RUN lines; it will execute a command and wait to finish the task to go forward.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff."
                                                                              RUN <my_command>

                                                                              You can set as many RUN lines as you need.

                                                                              EXPOSE

                                                                              If your app needs to be reached from outside the container, you have to open its listening port. EXPOSE is made for this.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff"
                                                                              RUN <my_command>
                                                                              EXPOSE <app_port>

                                                                              CMD

                                                                              Your application is now ready to run.

                                                                              The last thing to do is to specify how to execute it. Add the CMD line with the same command with all the arguments you use locally to launch your application.

                                                                              FROM <image_name>:<image_version>
                                                                              WORKDIR /app
                                                                              COPY . .
                                                                              RUN echo "Installing or doing stuff"
                                                                              RUN <my_command>
                                                                              EXPOSE <app_port>
                                                                              CMD [ "<command>", "<argument_1>", "<argument_2>" ]

                                                                              Like a local usage, you can set as many arguments as needed.

                                                                              Build your image

                                                                              When Qovery uses your Dockerfile, it first builds it before running it.

                                                                              If the build fails, Qovery won't be able to launch our application. To simplify debugging, you can build your image locally if you have Docker installed on your computer.

                                                                              Open a terminal and set the path at the Dockerfile location, and use the command:

                                                                              cd ~/my/folder/where/my/code/is
                                                                              docker build .

                                                                              It will build your image based on your Dockerfile. You'll see all the logs related to all lines you've added in the Dockerfile.

                                                                              If something goes wrong, it will be printed onto the terminal, and you'll be able to debug it.

                                                                              Test your image

                                                                              If your image builds properly, you can now check how it will be handle by Qovery with the command:

                                                                              qovery run

                                                                              What's next?

                                                                              If you follow this tutorial and everything works perfectly, it's time to deploy your app on Qovery. You will find all the things you need to know here.

                                                                              Tutorial
                                                                              - + - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html index b16f9399a3..ca54aab578 100644 --- a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html +++ b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -49,14 +49,14 @@
                                                                              Qovery: Select new context
                                                                              Organization:
                                                                              ✔ Qovery Realm
                                                                              Project:
                                                                              ✔ Posthog
                                                                              Environment:
                                                                              ✔ prod
                                                                              Application:
                                                                              ✔ nginx-proxy
                                                                              Qovery: New context:
                                                                              Organization | Qovery Realm
                                                                              Project | Posthog
                                                                              Environment | prod
                                                                              Application | nginx-proxy

                                                                              Import

                                                                              With Qovery, you make the distinction between Environment Variables and Secrets. Basically, the value of a Secret is encrypted and cannot be revealed.

                                                                              Let's say that we have the following dotenv file .env.development that we want to import:

                                                                              STRAPI_API_KEY=x.xxyyyzzz
                                                                              COLOR_BACKGROUND=fff
                                                                              AUTH0_API_KEY_SECRET=0xb33f
                                                                              API_URL=https://api.mytld.com

                                                                              The STRAPI_API_KEY and AUTH0_API_KEY_SECRET are Secrets. COLOR_BACKGROUND and API_URL are Environment Variables.

                                                                              Environment Variables

                                                                              To import the Environment Variables from this file we run the command qovery env import <dotenv file> and we select the environment variables to import:

                                                                              $ qovery env import .env.development
                                                                              Qovery: dot env file to import: '.env.development'
                                                                              ? Do you want to import Environment Variables or Secrets? Environment Variables
                                                                              ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                              [x] COLOR_BACKGROUND=fff
                                                                              [ ] AUTH0_API_KEY_SECRET=0xb33f
                                                                              > [x] API_URL=https://api.mytld.com
                                                                              [ ] STRAPI_API_KEY=x.xxyyyzzz

                                                                              Once validated you will see the following import validation:

                                                                              ? What environment variables do you want to import? COLOR_BACKGROUND=fff, API_URL=https://api.mytld.com
                                                                              Qovery: ✅ Environment Variables successfully imported!

                                                                              If during the import something goes wrong, you will see the errors and why it failed.

                                                                              Secrets

                                                                              To import the Secrets, you need to run the same command qovery env import <dotenv file> and select the secrets to import.

                                                                              $ qovery env import .env.development
                                                                              -
                                                                              Qovery: dot env file to import: '.env.development'
                                                                              ? Do you want to import Environment Variables or Secrets? Secrets
                                                                              ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                              [ ] COLOR_BACKGROUND=fff
                                                                              [x] AUTH0_API_KEY_SECRET=0xb33f
                                                                              [ ] API_URL=https://api.mytld.com
                                                                              > [x] STRAPI_API_KEY=x.xxyyyzzz

                                                                              Once validated you will see the following import validation:

                                                                              ? What environment variables do you want to import? STRAPI_API_KEY=x.xxyyyzzz, AUTH0_API_KEY_SECRET=0xb33
                                                                              Qovery: ✅ Secrets successfully imported!

                                                                              Check

                                                                              Open your environment variables console to check that everything has been set correctly.

                                                                              +
                                                                              Qovery: dot env file to import: '.env.development'
                                                                              ? Do you want to import Environment Variables or Secrets? Secrets
                                                                              ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                              [ ] COLOR_BACKGROUND=fff
                                                                              [x] AUTH0_API_KEY_SECRET=0xb33f
                                                                              [ ] API_URL=https://api.mytld.com
                                                                              > [x] STRAPI_API_KEY=x.xxyyyzzz

                                                                              Once validated you will see the following import validation:

                                                                              ? What environment variables do you want to import? STRAPI_API_KEY=x.xxyyyzzz, AUTH0_API_KEY_SECRET=0xb33
                                                                              Qovery: ✅ Secrets successfully imported!

                                                                              Check

                                                                              Open your environment variables console to check that everything has been set correctly.

                                                                              - + - + @@ -64,7 +64,7 @@ - + diff --git a/guides/tutorial/index.html b/guides/tutorial/index.html index 191a4b6564..1731aa9f4c 100644 --- a/guides/tutorial/index.html +++ b/guides/tutorial/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -126,14 +126,14 @@
                                                                              -

                                                                              Tutorial Guides

                                                                              Additional step-by-step resources to leverage even more Qovery
                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              +

                                                                              Tutorial Guides

                                                                              Additional step-by-step resources to leverage even more Qovery
                                                                              tutorial

                                                                              Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS

                                                                              read now
                                                                              tutorial

                                                                              Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery

                                                                              read now
                                                                              tutorial

                                                                              Create a blazingly fast REST API in Rust (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Create a Playground Environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Create your Staging environment from your Production environment on AWS

                                                                              read now
                                                                              tutorial

                                                                              Creating API clients using OpenAPI Tools

                                                                              read now
                                                                              tutorial

                                                                              Customizing Preview URL with Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Deploy Rails with PostgreSQL and Sidekiq

                                                                              read now
                                                                              tutorial

                                                                              Deploy Temporal on Kubernetes

                                                                              read now
                                                                              tutorial

                                                                              Getting Started with Preview Environments on AWS

                                                                              read now
                                                                              tutorial

                                                                              Grafana setup with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to activate SSO to connect to your EKS cluster

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2

                                                                              read now
                                                                              tutorial

                                                                              How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3

                                                                              read now
                                                                              tutorial

                                                                              How to connect to a managed MongoDB instance on AWS

                                                                              read now
                                                                              tutorial

                                                                              How to connect to your EKS cluster with kubectl

                                                                              read now
                                                                              tutorial

                                                                              How to create an RDS instance through the AWS console

                                                                              read now
                                                                              tutorial

                                                                              How to deploy a Rust REST API application on AWS with ease

                                                                              read now
                                                                              tutorial

                                                                              How to deploy Helm charts

                                                                              read now
                                                                              tutorial

                                                                              How to integrate Qovery with GitHub Actions

                                                                              read now
                                                                              tutorial

                                                                              How to run commands before the application starts

                                                                              read now
                                                                              tutorial

                                                                              How to seed a Postgres database on a dev environment

                                                                              read now
                                                                              tutorial

                                                                              How to use CloudFront with a React frontend application on Qovery

                                                                              read now
                                                                              tutorial

                                                                              How to use Github Organizations with Qovery

                                                                              read now
                                                                              tutorial

                                                                              How To Use Lifecycle Job To Deploy Any Kind Of Resources

                                                                              read now
                                                                              tutorial

                                                                              How to write a Dockerfile

                                                                              read now
                                                                              tutorial

                                                                              Import your environment variables with the Qovery CLI

                                                                              read now
                                                                              tutorial

                                                                              Integrate your application logs to Cloudwatch

                                                                              read now
                                                                              tutorial

                                                                              Kubernetes observability and monitoring with Datadog

                                                                              read now
                                                                              tutorial

                                                                              Managing Environment Variables in React (create-react-app)

                                                                              read now
                                                                              tutorial

                                                                              Migrate your application from Heroku to AWS

                                                                              read now
                                                                              tutorial

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Setup VPC peering on AWS with Qovery

                                                                              read now
                                                                              tutorial

                                                                              URL Shortener API with Kotlin (Part 1/2)

                                                                              read now
                                                                              tutorial

                                                                              Use an API gateway in front of multiple services

                                                                              read now
                                                                              tutorial

                                                                              Use AWS IAM roles with Qovery

                                                                              read now
                                                                              tutorial

                                                                              Using Amazon SQS and Lambda on Qovery

                                                                              read now
                                                                              tutorial

                                                                              Working with Git Submodules

                                                                              read now
                                                                              tutorial

                                                                              Zero to Hero - How to deploy your apps on AWS in 30 minutes

                                                                              read now
                                                                              - + - + @@ -141,7 +141,7 @@ - + diff --git a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html index 445771c0b9..3c633fde61 100644 --- a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html +++ b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -52,14 +52,14 @@
                                                                              logs:
                                                                              enabled: true
                                                                              containerCollectAll: true
                                                                              # Set to false if you are not using APM.
                                                                              apm:
                                                                              enabled: true
                                                                              containerExcludeLogs: "kube_namespace:kube-system kube_namespace:qovery kube_namespace:cert-manager kube_namespace:nginx-ingress kube_namespace:logging kube_namespace:prometheus"
                                                                              # You can remove this part if you are not using APM.
                                                                              # Note that it it will be enabled for all your applications.
                                                                              clusterAgent:
                                                                              admissionController:
                                                                              enabled: true
                                                                              mutateUnlabelled: true
                                                                              • Replace <CLUSTER NAME> with a meaningful name to identify your cluster.
                                                                              • Set the site value corresponding to the one you selected upon account creation (you can find the information under 1 > With Helm V3 > --set datadog.site=<YOUR SITE VALUE>)

                                                                              There are many other values you can set. For advanced usage, check: https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml

                                                                            • Install Datadog agent in your cluster

                                                                              The Datadog agent is a program that will collect data from your cluster and forward it to Datadog. -We'll install it uning Helm.

                                                                              First add the datadog Helm repository and update your local list:

                                                                              helm repo add datadog https://helm.datadoghq.com
                                                                              helm repo update

                                                                              Then we will install the agent in the datadog namespace:

                                                                              helm install datadog-agent \
                                                                              -n datadog --create-namespace \
                                                                              -f <PATH TO datadog-values.yaml> \
                                                                              --set datadog.apiKey='<API KEY>' \
                                                                              datadog/datadog
                                                                              • Edit the path to the datadog-values.yaml file you created
                                                                              • Replace <API KEY> with your actual API KEY. You can find it under 1 > With Helm V3 > --set datadog.apiKey=<API KEY>
                                                                            • Check the agent is running properly

                                                                              Wait for a minute then run the following command:

                                                                              kubectl get pods -n datadog

                                                                              If the installation was successful, you should see an output similar to this one:

                                                                              NAME READY STATUS RESTARTS AGE
                                                                              datadog-agent-2xhsv 3/3 Running 0 1m
                                                                              datadog-agent-cluster-agent-7f8bddd44-pwjnl 1/1 Running 0 1m
                                                                              datadog-agent-kube-state-metrics-577fcf6778-kc2gk 1/1 Running 0 1m
                                                                              datadog-agent-qfsl2 3/3 Running 0 1m
                                                                              datadog-agent-s5r5r 3/3 Running 0 1m
                                                                            • Finish Setup

                                                                              Once Datadog receives your data, you should be able to click Next on the wizard. You might need to refresh the page in some cases. It can take a couple minutes before your data is ready.

                                                                              You will then arrive on Step 4

                                                                              Datadog - Console

                                                                              You can skip this part if you're not interested in monitoring your cloud account.

                                                                              Finally, restart your applications if you are using APM.

                                                                            • Conclusion

                                                                              You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

                                                                              +We'll install it uning Helm.

                                                                              First add the datadog Helm repository and update your local list:

                                                                              helm repo add datadog https://helm.datadoghq.com
                                                                              helm repo update

                                                                              Then we will install the agent in the datadog namespace:

                                                                              helm install datadog-agent \
                                                                              -n datadog --create-namespace \
                                                                              -f <PATH TO datadog-values.yaml> \
                                                                              --set datadog.apiKey='<API KEY>' \
                                                                              datadog/datadog
                                                                              • Edit the path to the datadog-values.yaml file you created
                                                                              • Replace <API KEY> with your actual API KEY. You can find it under 1 > With Helm V3 > --set datadog.apiKey=<API KEY>
                                                                            • Check the agent is running properly

                                                                              Wait for a minute then run the following command:

                                                                              kubectl get pods -n datadog

                                                                              If the installation was successful, you should see an output similar to this one:

                                                                              NAME READY STATUS RESTARTS AGE
                                                                              datadog-agent-2xhsv 3/3 Running 0 1m
                                                                              datadog-agent-cluster-agent-7f8bddd44-pwjnl 1/1 Running 0 1m
                                                                              datadog-agent-kube-state-metrics-577fcf6778-kc2gk 1/1 Running 0 1m
                                                                              datadog-agent-qfsl2 3/3 Running 0 1m
                                                                              datadog-agent-s5r5r 3/3 Running 0 1m
                                                                            • Finish Setup

                                                                              Once Datadog receives your data, you should be able to click Next on the wizard. You might need to refresh the page in some cases. It can take a couple minutes before your data is ready.

                                                                              You will then arrive on Step 4

                                                                              Datadog - Console

                                                                              You can skip this part if you're not interested in monitoring your cloud account.

                                                                              Finally, restart your applications if you are using APM.

                                                                            • Conclusion

                                                                              You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

                                                                              - + - + @@ -67,7 +67,7 @@ - + diff --git a/guides/tutorial/managing-env-variables-in-create-react-app/index.html b/guides/tutorial/managing-env-variables-in-create-react-app/index.html index f4fc633c73..35d2749164 100644 --- a/guides/tutorial/managing-env-variables-in-create-react-app/index.html +++ b/guides/tutorial/managing-env-variables-in-create-react-app/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -54,14 +54,14 @@
                                                                              ARG REACT_APP_MSG
                                                                              ENV REACT_APP_MSG $REACT_APP_MSG
                                                                              # Add a work directory
                                                                              WORKDIR /app
                                                                              # Cache and Install dependencies
                                                                              COPY package.json .
                                                                              COPY yarn.lock .
                                                                              RUN yarn install --production
                                                                              # Copy app files
                                                                              COPY . .
                                                                              # Build the app
                                                                              RUN yarn build
                                                                              # Bundle static assets with nginx
                                                                              FROM nginx:1.21.0-alpine as production
                                                                              ENV NODE_ENV production
                                                                              # Copy built assets from builder
                                                                              COPY --from=builder /app/build /usr/share/nginx/html
                                                                              # Add your nginx.conf
                                                                              COPY nginx.conf /etc/nginx/conf.d/default.conf
                                                                              # Expose port
                                                                              EXPOSE 3000
                                                                              # Start nginx
                                                                              CMD ["nginx", "-g", "daemon off;"]

                                                                              It uses a Nginx server for hosting your application instead of starting a Node.js server, which is more optimal for production usage.

                                                                              Additionally, add a nginx.conf file with this content to configure your app:

                                                                              server {
                                                                              listen 80;
                                                                              -
                                                                              location / {
                                                                              root /usr/share/nginx/html/;
                                                                              include /etc/nginx/mime.types;
                                                                              try_files $uri $uri/ /index.html;
                                                                              }
                                                                              }

                                                                              Now, commit and push your changes - your create-react-app is handling env vars properly and is optimized for production usage.

                                                                              Conclusion

                                                                              In the guide, we went through managing environment variables in react / create-react-apps without resorting to using any bash scripts and host it on Qovery using Ngnix server.

                                                                              +
                                                                              location / {
                                                                              root /usr/share/nginx/html/;
                                                                              include /etc/nginx/mime.types;
                                                                              try_files $uri $uri/ /index.html;
                                                                              }
                                                                              }

                                                                              Now, commit and push your changes - your create-react-app is handling env vars properly and is optimized for production usage.

                                                                              Conclusion

                                                                              In the guide, we went through managing environment variables in react / create-react-apps without resorting to using any bash scripts and host it on Qovery using Ngnix server.

                                                                              - + - + @@ -69,7 +69,7 @@ - + diff --git a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html index efa8873a28..7a274996f9 100644 --- a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html +++ b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@
                                                                              # selection the app where you want to import your environment variables
                                                                              qovery context set
                                                                              # import your Heroku environment variables
                                                                              heroku config --app <your_heroku_app_name> --json | \
                                                                              qovery env parse --heroku-json > heroku.env && \
                                                                              qovery env import heroku.env && \
                                                                              rm heroku.env
                                                                              Qovery: dot env file to import: 'heroku.env'
                                                                              ? Do you want to import Environment Variables or Secrets? Environment Variables
                                                                              ? What environment variables do you want to import? [Use arrows to move, space to select, <right> to all, <left> to none, type to filter]
                                                                              [x] GREETINGS=hello world
                                                                              [ ] STRIPE_API_KEY=xxx-yyy-zzz
                                                                              > [x] IS_PRODUCTION=true
                                                                              -
                                                                              Qovery: ✅ Environment Variables successfully imported!

                                                                              Connect your frontend app to your backend app

                                                                              To connect your frontend app your backend app we will create an environment variable alias.

                                                                              Here is how to create a frontend app:

                                                                              And now how to connect your frontend app with your backend app:

                                                                              You can also take a look at this forum reply to learn how to do it.

                                                                              Connect your backend app to your database

                                                                              Same as connecting your frontend app to your backend app, you can create an environment variable alias DATABASE_URL for the built-in secret finishing with _DATABASE_URL_INTERNAL.

                                                                              4. Copy data from your Heroku databases to your AWS databases

                                                                              Coming soon with Replibyte

                                                                              5. Deploy your apps!

                                                                              We are finally ready to deploy my applications on AWS!

                                                                              Watch the final result 😎

                                                                              FAQ by Heroku users

                                                                              How to create a custom domain?

                                                                              Check out the documentation on how to configure your custom domain.

                                                                              How to monitor my apps?

                                                                              We do recommend using Datadog or any other monitoring products for monitoring your apps deployed by Qovery. Check out our tutorial on how to install Datadog.

                                                                              Do you have Heroku "Review App" equivalent?

                                                                              Yes, it's what we call Preview Environment

                                                                              How to rollback?

                                                                              Check out the app rollback documentation

                                                                              How auto-scaling works?

                                                                              Check out the app auto-scaling documentation

                                                                              How to manage database migration?

                                                                              Check out our forum reply

                                                                              Is it possible to get a shell / connect to my app?

                                                                              Yes, with the Qovery CLI and the command qovery shell. Check out the documentation.

                                                                              Can I use Terraform and Infrastructure as Code?

                                                                              Absolutely, we have a Qovery Terraform provider available.

                                                                              How can I connect my app to MongoDB Atlas?

                                                                              If you use MongoDB Atlas check out our tutorial about VPC peering and how to securely connect to your existing MongoDB Atlas database.

                                                                              How can I connect my app to an AWS service not managed by Qovery?

                                                                              If you want to connect your app to an AWS service not managed by Qovery, check out our tutorial about VPC peering and how to securely connect to this AWS service.


                                                                              If you have a common question about Qovery, we have a more general FAQ section available.

                                                                              Wrapping up

                                                                              Congrats! You have migrated from Heroku to AWS. Feel free to check out our forum and open a thread if you have any question.

                                                                              +
                                                                              Qovery: ✅ Environment Variables successfully imported!

                                                                              Connect your frontend app to your backend app

                                                                              To connect your frontend app your backend app we will create an environment variable alias.

                                                                              Here is how to create a frontend app:

                                                                              And now how to connect your frontend app with your backend app:

                                                                              You can also take a look at this forum reply to learn how to do it.

                                                                              Connect your backend app to your database

                                                                              Same as connecting your frontend app to your backend app, you can create an environment variable alias DATABASE_URL for the built-in secret finishing with _DATABASE_URL_INTERNAL.

                                                                              4. Copy data from your Heroku databases to your AWS databases

                                                                              Coming soon with Replibyte

                                                                              5. Deploy your apps!

                                                                              We are finally ready to deploy my applications on AWS!

                                                                              Watch the final result 😎

                                                                              FAQ by Heroku users

                                                                              How to create a custom domain?

                                                                              Check out the documentation on how to configure your custom domain.

                                                                              How to monitor my apps?

                                                                              We do recommend using Datadog or any other monitoring products for monitoring your apps deployed by Qovery. Check out our tutorial on how to install Datadog.

                                                                              Do you have Heroku "Review App" equivalent?

                                                                              Yes, it's what we call Preview Environment

                                                                              How to rollback?

                                                                              Check out the app rollback documentation

                                                                              How auto-scaling works?

                                                                              Check out the app auto-scaling documentation

                                                                              How to manage database migration?

                                                                              Check out our forum reply

                                                                              Is it possible to get a shell / connect to my app?

                                                                              Yes, with the Qovery CLI and the command qovery shell. Check out the documentation.

                                                                              Can I use Terraform and Infrastructure as Code?

                                                                              Absolutely, we have a Qovery Terraform provider available.

                                                                              How can I connect my app to MongoDB Atlas?

                                                                              If you use MongoDB Atlas check out our tutorial about VPC peering and how to securely connect to your existing MongoDB Atlas database.

                                                                              How can I connect my app to an AWS service not managed by Qovery?

                                                                              If you want to connect your app to an AWS service not managed by Qovery, check out our tutorial about VPC peering and how to securely connect to this AWS service.


                                                                              If you have a common question about Qovery, we have a more general FAQ section available.

                                                                              Wrapping up

                                                                              Congrats! You have migrated from Heroku to AWS. Feel free to check out our forum and open a thread if you have any question.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html index 393eb1ae15..5aae9f6721 100644 --- a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html +++ b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -44,14 +44,14 @@
                                                                              -

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              Using Cloudflare for applications deployed on Qovery

                                                                              The guide assumes that you have an application up and running on Qovery. We'll go through the process of adding a new Custom Domain to the application and use Cloudflare as the domain provider. We also assume that you own a custom domain on Cloudflare (or any other domain registrar):

                                                                              Cloudflare

                                                                              Adding a Custom Domain

                                                                              First, let's open application settings:

                                                                              Cloudflare

                                                                              Add your Cloudflare managed domain in Domain section:

                                                                              Cloudflare

                                                                              Cloudflare Configuration

                                                                              CNAME

                                                                              To finish the configuration on Cloudfalre, open the DNS Settings:

                                                                              Cloudflare

                                                                              And add a CNAME entry with the value taken from the Qovery Console just like this:

                                                                              Cloudflare

                                                                              You can safely use the Proxy mode.

                                                                              SSL/TLS

                                                                              The last step to configure the domain Cloudflare side properly, is to use the Full TLS encryption:

                                                                              Cloudflare

                                                                              This is the requirement to make Custom Domain work properly using Cloudflare as the domain provider on Qovery.

                                                                              Conclusion

                                                                              After following the steps from above, our application should be accessible using the custom domain we selected:

                                                                              Cloudflare

                                                                              In the guide we went through all the necessary steps to configure Cloudflare and Qovery to make use of your custom domain.

                                                                              +

                                                                              Setting up Cloudflare and Custom Domain on Qovery

                                                                              Using Cloudflare for applications deployed on Qovery

                                                                              The guide assumes that you have an application up and running on Qovery. We'll go through the process of adding a new Custom Domain to the application and use Cloudflare as the domain provider. We also assume that you own a custom domain on Cloudflare (or any other domain registrar):

                                                                              Cloudflare

                                                                              Adding a Custom Domain

                                                                              First, let's open application settings:

                                                                              Cloudflare

                                                                              Add your Cloudflare managed domain in Domain section:

                                                                              Cloudflare

                                                                              Cloudflare Configuration

                                                                              CNAME

                                                                              To finish the configuration on Cloudfalre, open the DNS Settings:

                                                                              Cloudflare

                                                                              And add a CNAME entry with the value taken from the Qovery Console just like this:

                                                                              Cloudflare

                                                                              You can safely use the Proxy mode.

                                                                              SSL/TLS

                                                                              The last step to configure the domain Cloudflare side properly, is to use the Full TLS encryption:

                                                                              Cloudflare

                                                                              This is the requirement to make Custom Domain work properly using Cloudflare as the domain provider on Qovery.

                                                                              Conclusion

                                                                              After following the steps from above, our application should be accessible using the custom domain we selected:

                                                                              Cloudflare

                                                                              In the guide we went through all the necessary steps to configure Cloudflare and Qovery to make use of your custom domain.

                                                                              - + - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tutorial/url-shortener-api-with-kotlin/index.html b/guides/tutorial/url-shortener-api-with-kotlin/index.html index 3a3b14123a..7cdc12ae26 100644 --- a/guides/tutorial/url-shortener-api-with-kotlin/index.html +++ b/guides/tutorial/url-shortener-api-with-kotlin/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -77,14 +77,14 @@
                                                                              transaction {
                                                                              // create tables if they do not exist
                                                                              SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                              }
                                                                              }
                                                                              @kotlin.jvm.JvmOverloads
                                                                              fun Application.module(testing: Boolean = false) {
                                                                              initDatabase()
                                                                              // ...
                                                                              }

                                                                              We have to replace the Hash Table used to store the data by the PostgreSQL database (see the final code here)

                                                                              Deploy in the Cloud with Qovery

                                                                              Qovery is going to help us to deploy the final application in the Cloud without the need to configure the CI/CD, network, security, load balancing, database and all the DevOps tasks

                                                                              Qovery is a deployment platform that helps all developers to deploy their applications in the Cloud in just a few seconds

                                                                            • Sign in to the Qovery web interface.

                                                                              Qovery Sign-up page

                                                                            • Create an application

                                                                              1. Create a new project

                                                                                Migrate from Heroku

                                                                              2. Create a new environment

                                                                                Migrate from Heroku

                                                                              3. Create a new application

                                                                                To follow the guide, you can fork and use our repository

                                                                                Use the forked repository (and branch master) while creating the application in the repository field:

                                                                                Migrate from Heroku

                                                                              4. After the application is created:

                                                                                • Navigate application settings
                                                                                • Select Port
                                                                                • Add port 8080

                                                                                Microservices

                                                                                This will expose your application and make accessible in the public internet.

                                                                              Deploy a database

                                                                              Create and deploy a new database.

                                                                              To learn how to do it, you can follow this guide.

                                                                              Connect to PostgreSQL

                                                                              Qovery add dynamically all required environment variables to connect to the database at the runtime of the container.

                                                                              You can list them all in Environment Variables Secrets section in your application overview, as described in envs guide.

                                                                              DB Secrets

                                                                              To use them:

                                                                              fun initDatabase() {
                                                                              val config = HikariConfig().apply {
                                                                              jdbcUrl = "jdbc:${System.getenv("QOVERY_DATABASE_MY_PQL_DB_CONNECTION_URI_WITHOUT_CREDENTIALS")}"
                                                                              username = System.getenv("QOVERY_DATABASE_MY_PQL_DB_USERNAME")
                                                                              password = System.getenv("QOVERY_DATABASE_MY_PQL_DB_PASSWORD")
                                                                              driverClassName = "org.postgresql.Driver"
                                                                              }
                                                                              Database.connect(HikariDataSource(config))
                                                                              -
                                                                              transaction {
                                                                              // create tables if they do not exist
                                                                              SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                              }
                                                                              }

                                                                              Deploy

                                                                              To deploy your application and database, click Action and Deploy button in your environments list view:

                                                                              Kotlin URL Shortener

                                                                              To get public URL to the application, open application details and click on Action Open.

                                                                              Kotlin URL Shortener

                                                                              Kotlin URL Shortener

                                                                              Conclusion

                                                                              We have seen that creating an URL shortener API with Ktor and Kotlin is extremely simple. Connecting the application to PostgreSQL is very easy with the Exposed library. In just a few lines of code, the service is fully functional and can be deployed in production very quickly with the help of Qovery. In the next part, we will see how to create a web interface connecting to this API to convert our URLs without using the curl command.

                                                                              Part 2: bind a web interface to the API - [link coming soon]

                                                                              Tutorial
                                                                              +
                                                                              transaction {
                                                                              // create tables if they do not exist
                                                                              SchemaUtils.createMissingTablesAndColumns(RequestTable, ClickOverTimeTable)
                                                                              }
                                                                              }

                                                                              Deploy

                                                                              To deploy your application and database, click Action and Deploy button in your environments list view:

                                                                              Kotlin URL Shortener

                                                                              To get public URL to the application, open application details and click on Action Open.

                                                                              Kotlin URL Shortener

                                                                              Kotlin URL Shortener

                                                                              Conclusion

                                                                              We have seen that creating an URL shortener API with Ktor and Kotlin is extremely simple. Connecting the application to PostgreSQL is very easy with the Exposed library. In just a few lines of code, the service is fully functional and can be deployed in production very quickly with the help of Qovery. In the next part, we will see how to create a web interface connecting to this API to convert our URLs without using the curl command.

                                                                              Part 2: bind a web interface to the API - [link coming soon]

                                                                              Tutorial
                                                                              - + - + @@ -92,7 +92,7 @@ - + diff --git a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html index ef7ea3dbb2..b3a6ab592d 100644 --- a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html +++ b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -50,14 +50,14 @@ Our route configuration file looks like this:

                                                                              routes.conf.template
                                                                              location ~* ^/api/billing/?(.*)$ {
                                                                              proxy_pass http://$BILLING_BACKEND$request_uri;
                                                                              }
                                                                              location ~* ^/api/messaging/?(.*)$ {
                                                                              proxy_pass http://$MESSAGING_BACKEND$request_uri;
                                                                              }
                                                                              location ~* ^/api/(.*)$ {
                                                                              proxy_pass http://$CORE_BACKEND$request_uri;
                                                                              }
                                                                              -
                                                                              location ~* ^/?(.*)$ {
                                                                              proxy_pass http://$CORE_BACKEND$request_uri;
                                                                              }

                                                                              Here are the explanation of those rules:

                                                                              1. All the traffic matching the path /api/billing/* is redirect to the BILLING backend.
                                                                              2. All the traffic matching the path /api/messaging/* is redirect to the MESSAGING backend.
                                                                              3. All the traffic matching the path /api/* is redirect to the CORE backend.
                                                                              4. All the traffic by default is redirected to the CORE backend.

                                                                              Notes:

                                                                              1. The rule definition order is from the first to the last to apply. If there is a conflicting rule, then the first matched applies.
                                                                              2. The internal network is in HTTP, that is why the value of the proxy_pass directive starts with http://.
                                                                              3. The connections on api.foo.bar are in HTTPS.
                                                                              4. You can make complex rules like the one below:
                                                                              more complex rule
                                                                              location ~* ^/api/v1/user/(.*)/app/(.*)/index/(.*)/search/?(.*)$ {
                                                                              proxy_pass http://$CORE_BACKEND/api/v1/user/$1/app/$2/index/$3/search/$4$is_args$args;
                                                                              }

                                                                              Create API Gateway app

                                                                              Commit and push your changes. Then go to the Qovery web console, and add your API gateway inside the same environment of your applications.

                                                                              • Build mode: Dockerfile
                                                                              • Port: 80

                                                                              Add environment variables

                                                                              For our gateway, we need to create 3 environment variable aliases corresponding to the internal network names of our applications.

                                                                              • XXX_HOST_INTERNAL -> ALIAS -> BILLING_BACKEND with scope ENVIRONMENT
                                                                              • YYY_HOST_INTERNAL -> ALIAS -> MESSAGING_BACKEND with scope ENVIRONMENT
                                                                              • ZZZ_HOST_INTERNAL -> ALIAS -> CORE_BACKEND with scope ENVIRONMENT

                                                                              How to find the correct environment variable

                                                                              When you have multiple applications within the same environment, it is difficult to find the appropriate environment variable. A workaround is to:

                                                                              1. Go to one of your application
                                                                              2. Find the ID of your application in your URL https://console.qovery.com/platform/organization/xxx/projects/yyy/environments/zzz/applications/082e36c4-7fbb-42b2-9046-37ccce21616a/variables
                                                                              3. Truncate your application ID and take the first segment. For 082e36c4-7fbb-42b2-9046-37ccce21616a it is 082e36c4
                                                                              4. Add the letter z in front of id Z082e36c4.
                                                                              5. All the environment variables containing Z082e36c4 are attached to the corresponding app.

                                                                              Set up custom domain

                                                                              Add a custom domain to expose your API gateway with the domain of your choice. Check out this documentation to set up your domain.

                                                                              Deploy API Gateway

                                                                              Once everything is set up, you can deploy your application.

                                                                              +
                                                                              location ~* ^/?(.*)$ {
                                                                              proxy_pass http://$CORE_BACKEND$request_uri;
                                                                              }

                                                                              Here are the explanation of those rules:

                                                                              1. All the traffic matching the path /api/billing/* is redirect to the BILLING backend.
                                                                              2. All the traffic matching the path /api/messaging/* is redirect to the MESSAGING backend.
                                                                              3. All the traffic matching the path /api/* is redirect to the CORE backend.
                                                                              4. All the traffic by default is redirected to the CORE backend.

                                                                              Notes:

                                                                              1. The rule definition order is from the first to the last to apply. If there is a conflicting rule, then the first matched applies.
                                                                              2. The internal network is in HTTP, that is why the value of the proxy_pass directive starts with http://.
                                                                              3. The connections on api.foo.bar are in HTTPS.
                                                                              4. You can make complex rules like the one below:
                                                                              more complex rule
                                                                              location ~* ^/api/v1/user/(.*)/app/(.*)/index/(.*)/search/?(.*)$ {
                                                                              proxy_pass http://$CORE_BACKEND/api/v1/user/$1/app/$2/index/$3/search/$4$is_args$args;
                                                                              }

                                                                              Create API Gateway app

                                                                              Commit and push your changes. Then go to the Qovery web console, and add your API gateway inside the same environment of your applications.

                                                                              • Build mode: Dockerfile
                                                                              • Port: 80

                                                                              Add environment variables

                                                                              For our gateway, we need to create 3 environment variable aliases corresponding to the internal network names of our applications.

                                                                              • XXX_HOST_INTERNAL -> ALIAS -> BILLING_BACKEND with scope ENVIRONMENT
                                                                              • YYY_HOST_INTERNAL -> ALIAS -> MESSAGING_BACKEND with scope ENVIRONMENT
                                                                              • ZZZ_HOST_INTERNAL -> ALIAS -> CORE_BACKEND with scope ENVIRONMENT

                                                                              How to find the correct environment variable

                                                                              When you have multiple applications within the same environment, it is difficult to find the appropriate environment variable. A workaround is to:

                                                                              1. Go to one of your application
                                                                              2. Find the ID of your application in your URL https://console.qovery.com/platform/organization/xxx/projects/yyy/environments/zzz/applications/082e36c4-7fbb-42b2-9046-37ccce21616a/variables
                                                                              3. Truncate your application ID and take the first segment. For 082e36c4-7fbb-42b2-9046-37ccce21616a it is 082e36c4
                                                                              4. Add the letter z in front of id Z082e36c4.
                                                                              5. All the environment variables containing Z082e36c4 are attached to the corresponding app.

                                                                              Set up custom domain

                                                                              Add a custom domain to expose your API gateway with the domain of your choice. Check out this documentation to set up your domain.

                                                                              Deploy API Gateway

                                                                              Once everything is set up, you can deploy your application.

                                                                              - + - + @@ -65,7 +65,7 @@ - + diff --git a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html index 0667e36c7e..c38986d97a 100644 --- a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html +++ b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -45,14 +45,14 @@

                                                                              Use AWS IAM roles with Qovery

                                                                              Give AWS IAM permissions to your application/container/job with Qovery

                                                                              AWS IAM (Identity & Access Management) service allows AWS services to interact with each other by using roles. Those roles can easily be used to give permissions to your Qovery application, container or job.

                                                                              It is a secure way to give your application permissions without having to manage credentials. More than that, it rotates the token automatically.

                                                                              This tutorial will show you how to add AWS IAM roles to your Qovery application, container or job.

                                                                              Application requiring S3 permissions

                                                                              In this first step, we will create a simple application that needs AWS permissions to access s3 buckets.

                                                                              Create an application

                                                                              We are going to will create a simple container, but you can use an existing one if you want (or an application or job).

                                                                              Here is a simple Debian container example:

                                                                              debian app

                                                                              Set only 1 instance and 128MB of memory is enough for this example. Then continue until you have the Create button, there is nothing more to setup.

                                                                              Get Kubernetes namespace name

                                                                              Then in this container (or any application in this environment) Variables, search for the variable called QOVERY_KUBERNETES_NAMESPACE_NAME and copy its value somewhere.

                                                                              debian app

                                                                              It is the Kubernetes namespace name where the container is located.

                                                                              Configure OIDC provider

                                                                              Get your Cluster OIDC provider URL

                                                                              On your AWS console, go to your EKS cluster and Overview section. Copy the OpenID Connect provider URL:

                                                                              EKS OIDC

                                                                              Create an Identity provider

                                                                              On your AWS console, go to IAM service, then Identity providers section, and Add provider button:

                                                                              1. Select the OpenID Connect provider type
                                                                              2. Paste the OpenID Connect provider URL previously copied to Provider URL
                                                                              3. Click on Get thumbprint button, once done the button will change to Edit URL
                                                                              4. Add sts.amazonaws.com as Audience
                                                                              5. Click on Add provider button

                                                                              OIDC Connect

                                                                              Configure AWS IAM roles

                                                                              Create a role

                                                                              Now we can create a role. In the IAM service, go to Roles section, and click on Create role button.

                                                                              You have to select the Trusted entity type. For this tutorial, we are going to use the Web identity type.

                                                                              Set the Identity provider to the one you just created, and the Audience to sts.amazonaws.com. Then click on the Next button.

                                                                              Role create step 1

                                                                              Role permissions

                                                                              Select the policy of your choice. For this example, the policy AmazonS3ReadOnlyAccess will be used to list S3 buckets. Then click on the Next button.

                                                                              To finish, set the role name and description of your choice and click on Create role button.

                                                                              Configure trusted entities

                                                                              Qovery environment scoped role

                                                                              Once created, select your freshly created role, go to the Trust relationships tab, and click on Edit trust policy button.

                                                                              role trusted default

                                                                              Update the policy line regarding the OIDC condition from:

                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:aud": "sts.amazonaws.com"

                                                                              to:

                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"

                                                                              Replace:

                                                                              • kubernetes_namespace: with the namespace name, corresponding to the Qovery environment (previously copied in step 1)
                                                                              • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)

                                                                              Once done, click on the Update policy button.

                                                                              Last element to copy and save somewhere: is the role ARN.

                                                                              In the end, you should have something like:

                                                                              {
                                                                              "Version": "2012-10-17",
                                                                              "Statement": [
                                                                              {
                                                                              "Effect": "Allow",
                                                                              "Principal": {
                                                                              "Federated": "arn:aws:iam::yyyyyyy:oidc-provider/oidc.eks.us-east-2.amazonaws.com/id/xxxxxxx"
                                                                              },
                                                                              "Action": "sts:AssumeRoleWithWebIdentity",
                                                                              "Condition": {
                                                                              "StringEquals": {
                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"
                                                                              }
                                                                              }
                                                                              }
                                                                              ]
                                                                              }

                                                                              Cluster scoped role

                                                                              If you want to be able to keep the Role and permissions with the "On-demand environment" and "Clone" features, then you have to scope the role "cluster side" instead of the "Kubernetes namespace" side.

                                                                              To do so, update the Condition with StringLike instead of StringEquals, and use a wildcard instead of the namespace name:

                                                                              "Condition": {
                                                                              "StringLike": {
                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:z*:service_account_name"
                                                                              }
                                                                              }

                                                                              Replace:

                                                                              • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)
                                                                              • z*: the wildcard to use to match all namespaces deployed with Qovery

                                                                              Create a service account

                                                                              This step will help you on deploying a service account on your Kubernetes cluster. In case you want to do it manually on the cluster with kubectl, you just have to push a service account like:

                                                                              apiVersion: v1
                                                                              kind: ServiceAccount
                                                                              metadata:
                                                                              name: $SERVICE_ACCOUNT_NAME
                                                                              namespace: $QOVERY_KUBERNETES_NAMESPACE_NAME
                                                                              annotations:
                                                                              eks.amazonaws.com/role-arn: $AWS_ROLE_ARN

                                                                              Kubernetes authentication

                                                                              On AWS, there are several ways to authenticate to Kubernetes. To make it simple, we are going to use a dedicated IAM user, but you can select the best method for your need.

                                                                              From your AWS Console, create an IAM user account, get Access key ID and Secret access key and save them somewhere.

                                                                              Qovery helps IAM users to get quick access to the Kubernetes cluster. Simply add this user to the Admins group.

                                                                              Create a Lifecycle job

                                                                              In the same environment than your application, create a Lifecycle job which will be used to deploy a service account on the Kubernetes cluster:

                                                                              Lifecycle creation

                                                                              Here a container qoveryrd/create-sa:1.0 available on DockerHub made by Qovery is used, but you can fork this repository and update to your needs if you prefer.

                                                                              Click on the Continue button and select the Start event because we want to deploy the service account at the environment start and Delete to delete it if we decide to remove it. Set parameters as well with the according action:

                                                                              Lifecycle creation

                                                                              Then click on the Continue button, set the resources (128Mb is enough) and click on the Continue button.

                                                                              Then add the following environment variables to the job scope:

                                                                              • KUBERNETES_VERSION: the version of your Kubernetes cluster which will be used to download kubectl (ex: 1.23.0)
                                                                              • SERVICE_ACCOUNT_NAME: the name of the service account in Kubernetes (the same name you have declared for the role in the Trusted entities policy section)
                                                                              • AWS_ROLE_ARN: the AWS ARN role you have just created
                                                                              • AWS_ACCESS_KEY_ID: the AWS access key ID of the IAM user you have created (if you decided to use this authentication method)
                                                                              • AWS_SECRET_ACCESS_KEY: the AWS secret access key of the IAM user you have created (if you decided to use this authentication method)

                                                                              Lifecycle creation

                                                                              Then Create the Lifecycle job. Go into the Variables tab and create a Variable Alias on QOVERY_CLOUD_PROVIDER_REGION, name it AWS_DEFAULT_REGION and scope it to the job.

                                                                              Lifecycle creation

                                                                              You can now run your job by clicking on the Deploy now button. You should see the following output in your job logs:

                                                                              -> Ensuring required environment variables are present
                                                                              -> Downloading kubectl version 1.23.0
                                                                              -> Generated service account:
                                                                              apiVersion: v1
                                                                              kind: ServiceAccount
                                                                              metadata:
                                                                              name: my-s3-role
                                                                              namespace: xxxxxx
                                                                              annotations:
                                                                              eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxx:role/my-s3-role
                                                                              -> Getting kubeconfig
                                                                              Added new context arn:aws:eks:region:id:cluster/cluster-name to /root/.kube/config
                                                                              -> Deploying service account
                                                                              serviceaccount/aws-permissions created

                                                                              Set application service account

                                                                              Set service account

                                                                              The final step is to set this service account (pointing to the AWS role) to your application. Go into your application Advanced settings and set the Service account to the one you have just created:

                                                                              Lifecycle creation

                                                                              Deploy your application with the Deploy now button.

                                                                              At this stage, the job should have been executed and the service account should be deployed on your Kubernetes cluster, and the Debian container, running.

                                                                              Validate access

                                                                              To validate the AWS role has correctly been deployed, we can connect to the pod, and see if we have the AWS token. We will use the Qovery CLI to connect to our pod:

                                                                              $ qovery shell
                                                                              Qovery: Select organization
                                                                              Organization:
                                                                              ✔ Qovery
                                                                              Qovery: Select project
                                                                              Project:
                                                                              ✔ AWS roles tutorial
                                                                              Qovery: Select environment
                                                                              Environment:
                                                                              ✔ aws-role
                                                                              Qovery: Select service
                                                                              Services:
                                                                              ✔ debian

                                                                              Now we are connected to the pod, we can check the AWS token:

                                                                              $ env | grep AWS
                                                                              AWS_DEFAULT_REGION=us-east-2
                                                                              AWS_REGION=us-east-2
                                                                              AWS_ROLE_ARN=arn:aws:iam::xxxxxx:role/my-s3-role
                                                                              AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
                                                                              AWS_STS_REGIONAL_ENDPOINTS=regional

                                                                              Token is here! Let's install the AWS CLI and validate the role access. We should be able to list S3 buckets:

                                                                              $ apt-get update && apt-get -y install awscli
                                                                              $ aws s3 ls
                                                                              2022-09-23 06:56:38 aws-cloudtrail-logs-qovery
                                                                              ...

                                                                              It works! We have access to S3 buckets using the AWS role.

                                                                              Conclusion

                                                                              The first setup phase can be time-consuming. However, once done, applying roles to your applications is very easy and fast. You can now use roles to access any AWS service!

                                                                              +
                                                                              Stats
                                                                              8 min read
                                                                              Updated

                                                                              AWS IAM (Identity & Access Management) service allows AWS services to interact with each other by using roles. Those roles can easily be used to give permissions to your Qovery application, container or job.

                                                                              It is a secure way to give your application permissions without having to manage credentials. More than that, it rotates the token automatically.

                                                                              This tutorial will show you how to add AWS IAM roles to your Qovery application, container or job.

                                                                              Application requiring S3 permissions

                                                                              In this first step, we will create a simple application that needs AWS permissions to access s3 buckets.

                                                                              Create an application

                                                                              We are going to will create a simple container, but you can use an existing one if you want (or an application or job).

                                                                              Here is a simple Debian container example:

                                                                              debian app

                                                                              Set only 1 instance and 128MB of memory is enough for this example. Then continue until you have the Create button, there is nothing more to setup.

                                                                              Get Kubernetes namespace name

                                                                              Then in this container (or any application in this environment) Variables, search for the variable called QOVERY_KUBERNETES_NAMESPACE_NAME and copy its value somewhere.

                                                                              debian app

                                                                              It is the Kubernetes namespace name where the container is located.

                                                                              Configure OIDC provider

                                                                              Get your Cluster OIDC provider URL

                                                                              On your AWS console, go to your EKS cluster and Overview section. Copy the OpenID Connect provider URL:

                                                                              EKS OIDC

                                                                              Create an Identity provider

                                                                              On your AWS console, go to IAM service, then Identity providers section, and Add provider button:

                                                                              1. Select the OpenID Connect provider type
                                                                              2. Paste the OpenID Connect provider URL previously copied to Provider URL
                                                                              3. Click on Get thumbprint button, once done the button will change to Edit URL
                                                                              4. Add sts.amazonaws.com as Audience
                                                                              5. Click on Add provider button

                                                                              OIDC Connect

                                                                              Configure AWS IAM roles

                                                                              Create a role

                                                                              Now we can create a role. In the IAM service, go to Roles section, and click on Create role button.

                                                                              You have to select the Trusted entity type. For this tutorial, we are going to use the Web identity type.

                                                                              Set the Identity provider to the one you just created, and the Audience to sts.amazonaws.com. Then click on the Next button.

                                                                              Role create step 1

                                                                              Role permissions

                                                                              Select the policy of your choice. For this example, the policy AmazonS3ReadOnlyAccess will be used to list S3 buckets. Then click on the Next button.

                                                                              To finish, set the role name and description of your choice and click on Create role button.

                                                                              Configure trusted entities

                                                                              Qovery environment scoped role

                                                                              Once created, select your freshly created role, go to the Trust relationships tab, and click on Edit trust policy button.

                                                                              role trusted default

                                                                              Update the policy line regarding the OIDC condition from:

                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:aud": "sts.amazonaws.com"

                                                                              to:

                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"

                                                                              Replace:

                                                                              • kubernetes_namespace: with the namespace name, corresponding to the Qovery environment (previously copied in step 1)
                                                                              • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)

                                                                              Once done, click on the Update policy button.

                                                                              Last element to copy and save somewhere: is the role ARN.

                                                                              In the end, you should have something like:

                                                                              {
                                                                              "Version": "2012-10-17",
                                                                              "Statement": [
                                                                              {
                                                                              "Effect": "Allow",
                                                                              "Principal": {
                                                                              "Federated": "arn:aws:iam::yyyyyyy:oidc-provider/oidc.eks.us-east-2.amazonaws.com/id/xxxxxxx"
                                                                              },
                                                                              "Action": "sts:AssumeRoleWithWebIdentity",
                                                                              "Condition": {
                                                                              "StringEquals": {
                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:kubernetes_namespace:service_account_name"
                                                                              }
                                                                              }
                                                                              }
                                                                              ]
                                                                              }

                                                                              Cluster scoped role

                                                                              If you want to be able to keep the Role and permissions with the "On-demand environment" and "Clone" features, then you have to scope the role "cluster side" instead of the "Kubernetes namespace" side.

                                                                              To do so, update the Condition with StringLike instead of StringEquals, and use a wildcard instead of the namespace name:

                                                                              "Condition": {
                                                                              "StringLike": {
                                                                              "oidc.eks.eu-west-3.amazonaws.com/id/xxxxxxx:sub": "system:serviceaccount:z*:service_account_name"
                                                                              }
                                                                              }

                                                                              Replace:

                                                                              • service_account_name: define a service account name which will be re-use later (ex: my-s3-role)
                                                                              • z*: the wildcard to use to match all namespaces deployed with Qovery

                                                                              Create a service account

                                                                              This step will help you on deploying a service account on your Kubernetes cluster. In case you want to do it manually on the cluster with kubectl, you just have to push a service account like:

                                                                              apiVersion: v1
                                                                              kind: ServiceAccount
                                                                              metadata:
                                                                              name: $SERVICE_ACCOUNT_NAME
                                                                              namespace: $QOVERY_KUBERNETES_NAMESPACE_NAME
                                                                              annotations:
                                                                              eks.amazonaws.com/role-arn: $AWS_ROLE_ARN

                                                                              Kubernetes authentication

                                                                              On AWS, there are several ways to authenticate to Kubernetes. To make it simple, we are going to use a dedicated IAM user, but you can select the best method for your need.

                                                                              From your AWS Console, create an IAM user account, get Access key ID and Secret access key and save them somewhere.

                                                                              Qovery helps IAM users to get quick access to the Kubernetes cluster. Simply add this user to the Admins group.

                                                                              Create a Lifecycle job

                                                                              In the same environment than your application, create a Lifecycle job which will be used to deploy a service account on the Kubernetes cluster:

                                                                              Lifecycle creation

                                                                              Here a container qoveryrd/create-sa:1.0 available on DockerHub made by Qovery is used, but you can fork this repository and update to your needs if you prefer.

                                                                              Click on the Continue button and select the Start event because we want to deploy the service account at the environment start and Delete to delete it if we decide to remove it. Set parameters as well with the according action:

                                                                              Lifecycle creation

                                                                              Then click on the Continue button, set the resources (128Mb is enough) and click on the Continue button.

                                                                              Then add the following environment variables to the job scope:

                                                                              • KUBERNETES_VERSION: the version of your Kubernetes cluster which will be used to download kubectl (ex: 1.23.0)
                                                                              • SERVICE_ACCOUNT_NAME: the name of the service account in Kubernetes (the same name you have declared for the role in the Trusted entities policy section)
                                                                              • AWS_ROLE_ARN: the AWS ARN role you have just created
                                                                              • AWS_ACCESS_KEY_ID: the AWS access key ID of the IAM user you have created (if you decided to use this authentication method)
                                                                              • AWS_SECRET_ACCESS_KEY: the AWS secret access key of the IAM user you have created (if you decided to use this authentication method)

                                                                              Lifecycle creation

                                                                              Then Create the Lifecycle job. Go into the Variables tab and create a Variable Alias on QOVERY_CLOUD_PROVIDER_REGION, name it AWS_DEFAULT_REGION and scope it to the job.

                                                                              Lifecycle creation

                                                                              You can now run your job by clicking on the Deploy now button. You should see the following output in your job logs:

                                                                              -> Ensuring required environment variables are present
                                                                              -> Downloading kubectl version 1.23.0
                                                                              -> Generated service account:
                                                                              apiVersion: v1
                                                                              kind: ServiceAccount
                                                                              metadata:
                                                                              name: my-s3-role
                                                                              namespace: xxxxxx
                                                                              annotations:
                                                                              eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxx:role/my-s3-role
                                                                              -> Getting kubeconfig
                                                                              Added new context arn:aws:eks:region:id:cluster/cluster-name to /root/.kube/config
                                                                              -> Deploying service account
                                                                              serviceaccount/aws-permissions created

                                                                              Set application service account

                                                                              Set service account

                                                                              The final step is to set this service account (pointing to the AWS role) to your application. Go into your application Advanced settings and set the Service account to the one you have just created:

                                                                              Lifecycle creation

                                                                              Deploy your application with the Deploy now button.

                                                                              At this stage, the job should have been executed and the service account should be deployed on your Kubernetes cluster, and the Debian container, running.

                                                                              Validate access

                                                                              To validate the AWS role has correctly been deployed, we can connect to the pod, and see if we have the AWS token. We will use the Qovery CLI to connect to our pod:

                                                                              $ qovery shell
                                                                              Qovery: Select organization
                                                                              Organization:
                                                                              ✔ Qovery
                                                                              Qovery: Select project
                                                                              Project:
                                                                              ✔ AWS roles tutorial
                                                                              Qovery: Select environment
                                                                              Environment:
                                                                              ✔ aws-role
                                                                              Qovery: Select service
                                                                              Services:
                                                                              ✔ debian

                                                                              Now we are connected to the pod, we can check the AWS token:

                                                                              $ env | grep AWS
                                                                              AWS_DEFAULT_REGION=us-east-2
                                                                              AWS_REGION=us-east-2
                                                                              AWS_ROLE_ARN=arn:aws:iam::xxxxxx:role/my-s3-role
                                                                              AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
                                                                              AWS_STS_REGIONAL_ENDPOINTS=regional

                                                                              Token is here! Let's install the AWS CLI and validate the role access. We should be able to list S3 buckets:

                                                                              $ apt-get update && apt-get -y install awscli
                                                                              $ aws s3 ls
                                                                              2022-09-23 06:56:38 aws-cloudtrail-logs-qovery
                                                                              ...

                                                                              It works! We have access to S3 buckets using the AWS role.

                                                                              Conclusion

                                                                              The first setup phase can be time-consuming. However, once done, applying roles to your applications is very easy and fast. You can now use roles to access any AWS service!

                                                                              - + - + @@ -60,7 +60,7 @@ - + diff --git a/guides/tutorial/working-with-git-submodules/index.html b/guides/tutorial/working-with-git-submodules/index.html index 8562442626..25ea460e1c 100644 --- a/guides/tutorial/working-with-git-submodules/index.html +++ b/guides/tutorial/working-with-git-submodules/index.html @@ -26,9 +26,9 @@ - + - + @@ -36,7 +36,7 @@ - + @@ -48,14 +48,14 @@ This short guide will explain how to use Git Submodules on Qovery.

                                                                              Example

                                                                              To include the Foo source code into the Bar project, use the following commands:

                                                                              $ cd ~/code/Bar
                                                                              $ git submodule add https://github.com/myusername/Foo somefolder/Foo
                                                                              Cloning into 'somefolder/Foo'...
                                                                              remote: Counting objects: 26, done.
                                                                              remote: Compressing objects: 100% (17/17), done.
                                                                              remote: Total 26 (delta 8), reused 19 (delta 5)
                                                                              Unpacking objects: 100% (26/26), done.

                                                                              This would create a new submodule called Foo and place Foo code into somefolder/Foo directory of Bar app.

                                                                              After a Git Submodule is added locally, you need to commit it to your app repository:

                                                                              $ git commit -am "adding a submodule"
                                                                              [master 314ef62] adding a submodule
                                                                              2 files changed, 4 insertions(+)

                                                                              Committed submodule source code can be used by your application and is available in Qovery CI/CD build/deployment pipeline.

                                                                              Private Submodules

                                                                              Qovery does not have access to locally available credentials, so if you want to use some way of authentication, there are two ways to achieve it.

                                                                              Use HTTP basic authentication URL scheme:

                                                                              $ git submodule add https://username:password@github.com/myusername/FooBar

                                                                              This adds a private Git Submodule to the application while still allowing it to resolve in non-local environments.

                                                                              SSH / Git protocol Submodules

                                                                              For Qovery to be able to access those private submodules when cloning your application repository, you need to add a secret named GIT_SSH_KEY_xxx, -(where xxx can be replaced by anything), containing a private SSH key with access to your Git repository.

                                                                              SSH:

                                                                              [submodule "path/to/module"]
                                                                              url = ssh://user/repo

                                                                              Git:

                                                                              [submodule "path/to/module"]
                                                                              url = git://github.com/torvalds/linux.git
                                                                              +(where xxx can be replaced by anything), containing a private SSH key with access to your Git repository.

                                                                              SSH:

                                                                              [submodule "path/to/module"]
                                                                              url = ssh://user/repo

                                                                              Git:

                                                                              [submodule "path/to/module"]
                                                                              url = git://github.com/torvalds/linux.git
                                                                              - + - + @@ -63,7 +63,7 @@ - + diff --git a/img/developers-and-platform-engineer-with-qovery.jpg b/img/developers-and-platform-engineer-with-qovery.jpg new file mode 100644 index 0000000000..2f0b9733ab Binary files /dev/null and b/img/developers-and-platform-engineer-with-qovery.jpg differ diff --git a/img/how-qovery-works-2.jpg b/img/how-qovery-works-2.jpg new file mode 100644 index 0000000000..4999f2b774 Binary files /dev/null and b/img/how-qovery-works-2.jpg differ diff --git a/img/qovery-internal-developer-platform.jpg b/img/qovery-internal-developer-platform.jpg new file mode 100644 index 0000000000..cad3a6f4f6 Binary files /dev/null and b/img/qovery-internal-developer-platform.jpg differ diff --git a/index.html b/index.html index 39465341e2..eb1455e7a9 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ Qovery Hub | Documentation, Guides, Tutorials | Qovery - + @@ -26,9 +26,9 @@ - + - + @@ -36,20 +36,20 @@ - +
                                                                              - +
                                                                              - + - + @@ -57,7 +57,7 @@ - + diff --git a/mailing_list/index.html b/mailing_list/index.html index bb2a1d5d4b..8f586aa3d1 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,9 +22,9 @@ - + - + @@ -37,9 +37,9 @@ - + - + diff --git a/main.120c9466.js b/main.120c9466.js new file mode 100644 index 0000000000..30c1562d40 --- /dev/null +++ b/main.120c9466.js @@ -0,0 +1,2 @@ +/*! For license information please see main.120c9466.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[259],[function(e,t,n){"use strict";e.exports=n(98)},function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t=0;p--){var f=a[p];"."===f?i(a,p):".."===f?(i(a,p),d++):d&&(i(a,p),d--)}if(!s)for(;d--;d)a.unshift("..");!s||""===a[0]||a[0]&&r(a[0])||a.unshift("");var g=a.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};function u(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,o){return e(t,n[o])}));if("object"==typeof t||"object"==typeof n){var o=u(t),r=u(n);return o!==t||r!==n?e(o,r):Object.keys(Object.assign({},t,n)).every((function(o){return e(t[o],n[o])}))}return!1},s=n(4);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function g(e){var t=e.pathname,n=e.search,o=e.hash,r=t||"/";return n&&"?"!==n&&(r+="?"===n.charAt(0)?n:"?"+n),o&&"#"!==o&&(r+="#"===o.charAt(0)?o:"#"+o),r}function m(e,t,n,r){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",o="",r=t.indexOf("#");-1!==r&&(o=t.substr(r),t=t.substr(0,r));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===o?"":o}}(e)).state=t:(void 0===(i=Object(o.a)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(u){throw u instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):u}return n&&(i.key=n),r?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,r.pathname)):i.pathname=r.pathname:i.pathname||(i.pathname="/"),i}function h(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,o,r){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof o?o(i,r):r(!0):r(!1!==i)}else r(!0)},appendListener:function(e){var n=!0;function o(){n&&e.apply(void 0,arguments)}return t.push(o),function(){n=!1,t=t.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),o=0;ot?n.splice(t,n.length-t,o):n.push(o),d({action:"PUSH",location:o,index:t,entries:n})}}))},replace:function(e,t){var o=m(e,t,p(),w.location);c.confirmTransitionTo(o,"REPLACE",n,(function(e){e&&(w.entries[w.index]=o,d({action:"REPLACE",location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(r[n]=e[n]);return r}n.d(t,"a",(function(){return o}))},function(e,t,n){e.exports=!n(14)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(28),r=n(57);e.exports=n(10)?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(5),r=n(17),i=n(11),a=n(16),u=n(30),l=function(e,t,n){var s,c,d,p,f=e&l.F,g=e&l.G,m=e&l.S,h=e&l.P,b=e&l.B,v=g?o:m?o[t]||(o[t]={}):(o[t]||{}).prototype,y=g?r:r[t]||(r[t]={}),w=y.prototype||(y.prototype={});for(s in g&&(n=t),n)d=((c=!f&&v&&void 0!==v[s])?v:n)[s],p=b&&c?u(d,o):h&&"function"==typeof d?u(Function.call,d):d,v&&a(v,s,d,e&l.U),y[s]!=d&&i(y,s,p),h&&w[s]!=d&&(w[s]=d)};o.core=r,l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){e.exports=n(110)()},function(e,t,n){var o=n(5),r=n(11),i=n(31),a=n(40)("src"),u=n(104),l=(""+u).split("toString");n(17).inspectSource=function(e){return u.call(e)},(e.exports=function(e,t,n,u){var s="function"==typeof n;s&&(i(n,"name")||r(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||r(n,a,e[t]?""+e[t]:l.join(String(t)))),e===o?e[t]=n:u?e[t]?e[t]=n:r(e,t,n):(delete e[t],r(e,t,n)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[a]||u.call(this)}))},function(e,t){var n=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},function(e,t,n){"use strict";t.a={plugins:["plugin-image-zoom","posthog-docusaurus",["@docusaurus/plugin-content-docs",{sidebarPath:"/home/runner/work/documentation/documentation/website/sidebars.js"}],["@docusaurus/plugin-content-blog",{feedOptions:{type:"all",copyright:"Copyright \xa9 2023 Qovery, Inc.",baseUrl:""}}],"/home/runner/work/documentation/documentation/website/plugins/guides",["@docusaurus/plugin-content-pages",{}],["/home/runner/work/documentation/documentation/website/plugins/sitemap",{}]],themes:[["@docusaurus/theme-classic",{customCss:"/home/runner/work/documentation/documentation/website/src/css/custom.css"}],"@docusaurus/theme-search-algolia"],customFields:{metadata:{cloud_providers:[{dark_logo_path:"/img/logos/aws_white.svg",logo_path:"/img/logos/aws.svg",name:"aws"},{dark_logo_path:"/img/logos/digitalocean_white.svg",logo_path:"/img/logos/digitalocean.svg",name:"digital_ocean"},{dark_logo_path:"/img/logos/scaleway_white.svg",logo_path:"/img/logos/scaleway.svg",name:"scaleway"},{dark_logo_path:"/img/logos/gcp_white.svg",logo_path:"/img/logos/gcp.svg",name:"gcp"},{dark_logo_path:"/img/logos/azure_white.svg",logo_path:"/img/logos/azure.svg",name:"azure"}],databases:[{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"mysql"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"postgresql"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"mongodb"}],event_types:[],frameworks:[{dark_logo_path:"/img/logos/hasura_white.svg",logo_path:"/img/logos/hasura.svg",name:"hasura"},{dark_logo_path:"/img/logos/laravel.svg",logo_path:"/img/logos/laravel.svg",name:"laravel"},{dark_logo_path:"/img/logos/springboot.svg",logo_path:"/img/logos/springboot.svg",name:"springboot"},{dark_logo_path:"/img/logos/nodejs.svg",logo_path:"/img/logos/nodejs.svg",name:"nodejs"},{dark_logo_path:"/img/logos/flask_white.svg",logo_path:"/img/logos/flask.svg",name:"flask"},{dark_logo_path:"/img/logos/jhipster.svg",logo_path:"/img/logos/jhipster.svg",name:"jhipster"},{dark_logo_path:"/img/logos/gin.svg",logo_path:"/img/logos/gin.svg",name:"gin"},{dark_logo_path:"/img/logos/rails.svg",logo_path:"/img/logos/rails.svg",name:"rails"},{dark_logo_path:"/img/logos/django.svg",logo_path:"/img/logos/django.svg",name:"django"},{dark_logo_path:"/img/logos/deno.svg",logo_path:"/img/logos/deno.svg",name:"deno"},{dark_logo_path:"/img/logos/strapi.svg",logo_path:"/img/logos/strapi.svg",name:"strapi"},{dark_logo_path:"/img/logos/nuxtjs.svg",logo_path:"/img/logos/nuxtjs.svg",name:"nuxtjs"},{dark_logo_path:"/img/logos/discordpy.svg",logo_path:"/img/logos/discordpy.svg",name:"discordpy"},{dark_logo_path:"/img/logos/sinatra.svg",logo_path:"/img/logos/sinatra.svg",name:"sinatra"},{dark_logo_path:"/img/logos/meilisearch.svg",logo_path:"/img/logos/meilisearch.svg",name:"meilisearch"}],guides:{"getting-started":{children:{},description:"Take Qovery from zero to production in less than 10 minutes.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/create-a-database",last_modified_on:null,path:"website/guides/getting-started/create-a-database.md",series_position:null,title:"Create a database"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/setting-custom-domain",last_modified_on:null,path:"website/guides/getting-started/setting-custom-domain.md",series_position:null,title:"Custom domain"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/debugging",last_modified_on:null,path:"website/guides/getting-started/debugging.md",series_position:null,title:"Debugging"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/managing-environment-variables",last_modified_on:null,path:"website/guides/getting-started/managing-environment-variables.md",series_position:null,title:"Environment variables"},{author_github:"https://github.com/evoxmusic",description:null,id:"/getting-started/deploy-your-first-application",last_modified_on:null,path:"website/guides/getting-started/deploy-your-first-application.md",series_position:null,title:"Hello World. Deploy your first application."}],name:"getting-started",series:!0,title:"Getting Started"},"cloud-provider":{children:{},description:"Install Qovery on your favorite cloud provider.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/cloud-provider/guide-amazon-web-services",last_modified_on:null,path:"website/guides/cloud-provider/guide-amazon-web-services.md",series_position:null,title:"Install Qovery on your Amazon Web Services account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/cloud-provider/guide-microsoft-azure",last_modified_on:null,path:"website/guides/cloud-provider/guide-microsoft-azure.md",series_position:null,title:"Install Qovery on your Microsoft Azure account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/cloud-provider/guide-scaleway",last_modified_on:null,path:"website/guides/cloud-provider/guide-scaleway.md",series_position:null,title:"Install Qovery on your Scaleway account"},{author_github:"https://github.com/evoxmusic",description:null,id:"/cloud-provider/guide-google-cloud-platform",last_modified_on:null,path:"website/guides/cloud-provider/guide-google-cloud-platform.md",series_position:null,title:"Install Qovery your Google Cloud Platform account"}],name:"cloud-provider",series:!1,title:"Cloud Providers"},advanced:{children:{},description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",guides:[{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/build-on-top",last_modified_on:null,path:"website/guides/advanced/build-on-top.md",series_position:null,title:"Build on Top of Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/continuous-integration",last_modified_on:null,path:"website/guides/advanced/continuous-integration.md",series_position:null,title:"Continuous Integration"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/costs-control",last_modified_on:null,path:"website/guides/advanced/costs-control.md",series_position:null,title:"Costs Control"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-api-gateway",last_modified_on:null,path:"website/guides/advanced/deploy-api-gateway.md",series_position:null,title:"Deploy API Gateway"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-aws-services",last_modified_on:null,path:"website/guides/advanced/deploy-aws-services.md",series_position:null,title:"Deploy AWS Services"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-external-services",last_modified_on:null,path:"website/guides/advanced/deploy-external-services.md",series_position:null,title:"Deploy External Services"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/deploy-frontend",last_modified_on:null,path:"website/guides/advanced/deploy-frontend.md",series_position:null,title:"Deploy Frontend App"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/helm-chart",last_modified_on:null,path:"website/guides/advanced/helm-chart.md",series_position:null,title:"Helm Charts"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/advanced/microservices",last_modified_on:null,path:"website/guides/advanced/microservices.md",series_position:null,title:"Microservices"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/migration",last_modified_on:null,path:"website/guides/advanced/migration.md",series_position:null,title:"Migration"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/monitoring",last_modified_on:null,path:"website/guides/advanced/monitoring.md",series_position:null,title:"Monitoring"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/advanced/monorepository",last_modified_on:null,path:"website/guides/advanced/monorepository.md",series_position:null,title:"Mono repository"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/use-preview-environments",last_modified_on:null,path:"website/guides/advanced/use-preview-environments.md",series_position:null,title:"Preview Environments"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/production",last_modified_on:null,path:"website/guides/advanced/production.md",series_position:null,title:"Production"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/seed-database",last_modified_on:null,path:"website/guides/advanced/seed-database.md",series_position:null,title:"Seed Database"},{author_github:"https://github.com/evoxmusic",description:null,id:"/advanced/terraform",last_modified_on:null,path:"website/guides/advanced/terraform.md",series_position:null,title:"Terraform"}],name:"advanced",series:!1,title:"Advanced"},tutorial:{children:{},description:"Additional step-by-step resources to leverage even more Qovery. ",guides:[{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws",last_modified_on:null,path:"website/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws.md",series_position:null,title:"Blazingly fast Preview Environments for NextJS, NodeJS, and MongoDB on AWS"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/build-e2e-testing-ephemeral-environments",last_modified_on:null,path:"website/guides/tutorial/build-e2e-testing-ephemeral-environments.md",series_position:null,title:"Build E2E Testing Ephemeral Environments with GitHub Actions and Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-a-playground-environment-on-aws",last_modified_on:null,path:"website/guides/tutorial/create-a-playground-environment-on-aws.md",series_position:null,title:"Create a Playground Environment on AWS"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-a-blazingly-fast-api-in-rust-part-1",last_modified_on:null,path:"website/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1.md",series_position:null,title:"Create a blazingly fast REST API in Rust (Part 1/2)"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/create-your-staging-environment-from-your-production-environment-on-aws",last_modified_on:null,path:"website/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws.md",series_position:null,title:"Create your Staging environment from your Production environment on AWS"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/generate-qovery-api-client",last_modified_on:null,path:"website/guides/tutorial/generate-qovery-api-client.md",series_position:null,title:"Creating API clients using OpenAPI Tools"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/customizing-preview-url-with-qovery-cli",last_modified_on:null,path:"website/guides/tutorial/customizing-preview-url-with-qovery-cli.md",series_position:null,title:"Customizing Preview URL with Qovery CLI"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/deploy-rails-with-postgresql-and-sidekiq",last_modified_on:null,path:"website/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq.md",series_position:null,title:"Deploy Rails with PostgreSQL and Sidekiq"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/deploy-temporal-on-kubernetes",last_modified_on:null,path:"website/guides/tutorial/deploy-temporal-on-kubernetes.md",series_position:null,title:"Deploy Temporal on Kubernetes"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/getting-started-with-preview-environments-on-aws-for-beginners",last_modified_on:null,path:"website/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners.md",series_position:null,title:"Getting Started with Preview Environments on AWS"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/grafana-install",last_modified_on:null,path:"website/guides/tutorial/grafana-install.md",series_position:null,title:"Grafana setup with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources",last_modified_on:null,path:"website/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources.md",series_position:null,title:"How To Use Lifecycle Job To Deploy Any Kind Of Resources"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 1"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 2"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3",last_modified_on:null,path:"website/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3.md",series_position:null,title:"How to Build a Cloud Version of Your Open Source Software - A Case Study with AppWrite - Part 3"},{author_github:"https://github.com/benjaminch",description:null,id:"/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster",last_modified_on:null,path:"website/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster.md",series_position:null,title:"How to activate SSO to connect to your EKS cluster"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws",last_modified_on:null,path:"website/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws.md",series_position:null,title:"How to connect to a managed MongoDB instance on AWS"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl",last_modified_on:null,path:"website/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl.md",series_position:null,title:"How to connect to your EKS cluster with kubectl"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-create-an-rds-instance-through-aws-console",last_modified_on:null,path:"website/guides/tutorial/how-to-create-an-rds-instance-through-aws-console.md",series_position:null,title:"How to create an RDS instance through the AWS console"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/how-to-deploy-helm-charts",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-helm-charts.md",series_position:null,title:"How to deploy Helm charts"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease.md",series_position:null,title:"How to deploy a Rust REST API application on AWS with ease"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-integrate-qovery-with-github-actions",last_modified_on:null,path:"website/guides/tutorial/how-to-integrate-qovery-with-github-actions.md",series_position:null,title:"How to integrate Qovery with GitHub Actions"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/how-to-run-commands-at-application-startup",last_modified_on:null,path:"website/guides/tutorial/how-to-run-commands-at-application-startup.md",series_position:null,title:"How to run commands before the application starts"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/data-seeding-in-postgres",last_modified_on:null,path:"website/guides/tutorial/data-seeding-in-postgres.md",series_position:null,title:"How to seed a Postgres database on a dev environment"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery",last_modified_on:null,path:"website/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery.md",series_position:null,title:"How to use CloudFront with a React frontend application on Qovery"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/github-organization-repository-access",last_modified_on:null,path:"website/guides/tutorial/github-organization-repository-access.md",series_position:null,title:"How to use Github Organizations with Qovery"},{author_github:"https://github.com/MacLikorne",description:null,id:"/tutorial/how-to-write-a-dockerfile",last_modified_on:null,path:"website/guides/tutorial/how-to-write-a-dockerfile.md",series_position:null,title:"How to write a Dockerfile"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/import-your-environment-variables-with-the-qovery-cli",last_modified_on:null,path:"website/guides/tutorial/import-your-environment-variables-with-the-qovery-cli.md",series_position:null,title:"Import your environment variables with the Qovery CLI"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/cloudwatch-integration",last_modified_on:null,path:"website/guides/tutorial/cloudwatch-integration.md",series_position:null,title:"Integrate your application logs to Cloudwatch"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/kubernetes-observability-and-monitoring-with-datadog",last_modified_on:null,path:"website/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",series_position:null,title:"Kubernetes observability and monitoring with Datadog"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/managing-env-variables-in-create-react-app",last_modified_on:null,path:"website/guides/tutorial/managing-env-variables-in-create-react-app.md",series_position:null,title:"Managing Environment Variables in React (create-react-app)"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/migrate-your-application-from-heroku-to-aws",last_modified_on:null,path:"website/guides/tutorial/migrate-your-application-from-heroku-to-aws.md",series_position:null,title:"Migrate your application from Heroku to AWS"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery",last_modified_on:null,path:"website/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery.md",series_position:null,title:"Setting up Cloudflare and Custom Domain on Qovery"},{author_github:"https://github.com/l0ck3",description:null,id:"/tutorial/aws-vpc-peering-with-qovery",last_modified_on:null,path:"website/guides/tutorial/aws-vpc-peering-with-qovery.md",series_position:null,title:"Setup VPC peering on AWS with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/url-shortener-api-with-kotlin",last_modified_on:null,path:"website/guides/tutorial/url-shortener-api-with-kotlin.md",series_position:null,title:"URL Shortener API with Kotlin (Part 1/2)"},{author_github:"https://github.com/deimosfr",description:null,id:"/tutorial/use-aws-iam-roles-with-qovery",last_modified_on:null,path:"website/guides/tutorial/use-aws-iam-roles-with-qovery.md",series_position:null,title:"Use AWS IAM roles with Qovery"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/use-an-api-gateway-in-front-of-multiple-services",last_modified_on:null,path:"website/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services.md",series_position:null,title:"Use an API gateway in front of multiple services"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/aws-sqs-lambda-with-qovery",last_modified_on:null,path:"website/guides/tutorial/aws-sqs-lambda-with-qovery.md",series_position:null,title:"Using Amazon SQS and Lambda on Qovery"},{author_github:"https://github.com/pjeziorowski",description:null,id:"/tutorial/working-with-git-submodules",last_modified_on:null,path:"website/guides/tutorial/working-with-git-submodules.md",series_position:null,title:"Working with Git Submodules"},{author_github:"https://github.com/evoxmusic",description:null,id:"/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes",last_modified_on:null,path:"website/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes.md",series_position:null,title:"Zero to Hero - How to deploy your apps on AWS in 30 minutes"}],name:"tutorial",series:!1,title:"Tutorial"},engineering:{children:{},description:"We share our engineering learning with all of you. ",guides:[],name:"engineering",series:!1,title:"Engineering"}},highlights:[],installation:{},languages:[{dark_logo_path:"/img/logos/php.svg",logo_path:"/img/logos/php.svg",name:"php"},{dark_logo_path:"/img/logos/kotlin.svg",logo_path:"/img/logos/kotlin.svg",name:"kotlin"},{dark_logo_path:"/img/logos/java.svg",logo_path:"/img/logos/java.svg",name:"java"},{dark_logo_path:"/img/logos/javascript.svg",logo_path:"/img/logos/javascript.svg",name:"javascript"},{dark_logo_path:"/img/logos/python.svg",logo_path:"/img/logos/python.svg",name:"python"},{dark_logo_path:"/img/logos/rust_white.svg",logo_path:"/img/logos/rust.svg",name:"rust"},{dark_logo_path:"/img/logos/go.svg",logo_path:"/img/logos/go.svg",name:"go"},{dark_logo_path:"/img/logos/ruby.svg",logo_path:"/img/logos/ruby.svg",name:"ruby"},{dark_logo_path:"/img/logos/scala.svg",logo_path:"/img/logos/scala.svg",name:"scala"}],latest_highlight:{},latest_post:{},latest_release:{},post_tags:[],posts:[],releases:{},sinks:{},sources:{},team:[{avatar:"https://github.com/evoxmusic.png",bio:'Romaric is a Software Engineer, and CEO at Qovery. He has 10+ years of experience in R&D. From the Ad-Tech to the financial industry, he has deep expertise in highly-reliable and performant systems.\n',github:"https://github.com/evoxmusic",id:"romaric",keybase:"https://keybase.io/evoxmusic",name:"Romaric P."},{avatar:"https://github.com/deimosfr.png",bio:'Pierre is an SRE, and CTO of Qovery. He has 15+ years of experience in R&D. From the financial to the Ad-Tech industry, he has a strong knowledge in distributed and highly-reliable systems. He\'s also the MariaDB High Performance book author.\n',github:"https://github.com/deimosfr",id:"pierre",keybase:"https://keybase.io/pierre",name:"Pierre M."},{avatar:"https://github.com/pjeziorowski.png",bio:'Patryk is an experienced Software Engineer, and a Backend Developer at Qovery. ',github:"https://github.com/pjeziorowski",id:"patryk",keybase:"https://keybase.io/patryk",name:"Patryk J."},{avatar:"https://github.com/maclikorne.png",bio:'Enzo is a Backend Developer at Qovery. ',github:"https://github.com/MacLikorne",id:"enzo",keybase:"https://keybase.io/enzo",name:"Enzo R."},{avatar:"https://github.com/l0ck3.png",bio:'Yann is a Developer Experience Engineer at Qovery. He has 15+ years of experience in development and SRE.\n',github:"https://github.com/l0ck3",id:"yann",keybase:"https://keybase.io/l0ck3",name:"Yann I."},{avatar:"https://github.com/sileht.png",bio:'Mehdi is Senior DevOps Engineer at Qovery, with 15+ years of software development and managing infrastructures, Co-founder of Mergify, active member of non-profit Tetaneutral.net ISP and Hosting provider, and he also likes to dance on crazy swing rhythm.\n',github:"https://github.com/sileht",id:"mehdi",keybase:"https://keybase.io/mehdi",name:"Mehdi A."},{avatar:"https://github.com/Stun3R.png",bio:'Thibaut is an experienced developer, CTO of Shelt.in and active Qovery contributor. ',github:"https://github.com/Stun3R",id:"thibaut_david",keybase:"https://keybase.io/Stun3R",name:"Thibaut David"},{avatar:"https://github.com/Aggis15.png",bio:"Angelos is a self-taught programmer using Python, Qovery ambassador and contributor. ",github:"https://github.com/Aggis15",id:"Aggis15",keybase:"https://keybase.io/Aggis15",name:"Angelos Rinas"},{avatar:"https://github.com/ilmiont.png",bio:"James Walker is the founder of Heron Web, a UK-based digital agency providing bespoke software development services to SMEs. He has experience managing complete end-to-end web development workflows with DevOps, CI/CD, Docker, and Kubernetes.\n",github:"https://github.com/ilmiont",id:"james_walker",keybase:"https://keybase.io/ilmiont",name:"James Walker"},{avatar:"https://github.com/Qovery.png",bio:"Dhiraj Kumar has 10+ years of experience in Python and Machine learning. I specialize in Data analytics and Machine learning using python. My Primary Expertise includes Python, Flask, Django, Pandas, NumPy, SciKit-Learn, NLP, Docker, Machine Learning, Deep Learning, Chatbot, NLP, Spark, AWS, C#, and Azure\n",github:"https://github.com/dhiraj_kumar",id:"dhiraj_kumar",keybase:"https://keybase.io/dhiraj_kumar",name:"Dhiraj Kumar"},{avatar:"https://github.com/Qovery.png",bio:"Shingai Zivuku is a softwage engineer passionated by the cloud.\n",github:"https://github.com/shingai_zivuku",id:"shingai_zivuku",keybase:"https://keybase.io/shingai_zivuku",name:"Shingai Zivuku"},{avatar:"https://github.com/benjaminch.png",bio:'Benjamin is a senior Backend Developer at Qovery.',github:"https://github.com/benjaminch",id:"benjaminch",keybase:"https://keybase.io/benjaminch",name:"Benjamin Chastanier"}],technologies:[{dark_logo_path:"/img/logos/kubernetes_white.svg",logo_path:"/img/logos/kubernetes.svg",name:"kubernetes"},{dark_logo_path:"/img/logos/helm_white.svg",logo_path:"/img/logos/helm.svg",name:"helm"},{dark_logo_path:"/img/logos/docker.svg",logo_path:"/img/logos/docker.svg",name:"docker"},{dark_logo_path:"/img/logos/kotlin.svg",logo_path:"/img/logos/kotlin.svg",name:"kotlin"},{dark_logo_path:"/img/logos/qovery.svg",logo_path:"/img/logos/qovery.svg",name:"qovery"},{dark_logo_path:"/img/logos/posthog.svg",logo_path:"/img/logos/posthog.svg",name:"posthog"},{dark_logo_path:"/img/logos/terraform.svg",logo_path:"/img/logos/terraform.svg",name:"terraform"},{dark_logo_path:"/img/logos/github.svg",logo_path:"/img/logos/github.png",name:"github"}],transforms:{}}},themeConfig:{disableDarkMode:!1,navbar:{hideOnScroll:!0,logo:{alt:"Qovery",src:"img/logo-light.svg",srcDark:"img/logo-dark.svg",url:"https://www.qovery.com"},links:[{to:"guides/",label:"Guides",position:"left"},{to:"docs/",label:"Docs",position:"left"},{to:"guides/tutorial",label:"Tutorials",position:"left"},{href:"https://discuss.qovery.com",label:"Forum",position:"left"},{href:"https://start.qovery.com",label:"Web Console",position:"right"},{href:"https://www.qovery.com",label:"Home",position:"right"},{href:"https://github.com/Qovery",label:"GitHub",position:"right"}]},image:"img/open-graph.png",prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["hcl","rust"]},footer:{links:[{title:"Resources",items:[{label:"Documentation",to:"docs"},{label:"Guides",to:"guides"},{label:"Tutorials",to:"guides/tutorial"},{label:"Engineering",to:"guides/engineering"},{label:"Pricing",to:"https://www.qovery.com/pricing"},{label:"Enterprise",to:"https://www.qovery.com/enterprise"},{label:"API",to:"https://api-doc.qovery.com"},{label:"Github",to:"https://github.com/Qovery"}]},{title:"Community",items:[{label:"Discord",to:"https://discord.qovery.com"},{label:"Forum",to:"https://community.qovery.com"},{label:"Community call",to:"https://www.qovery.com/community-call"},{label:"Goodies",to:"https://shop.qovery.com"},{label:"Roadmap",to:"https://roadmap.qovery.com"},{label:"Replibyte",to:"https://github.com/Qovery/replibyte"}]},{title:"Company",items:[{label:"Blog",to:"https://www.qovery.com/blog"},{label:"Jobs",to:"https://jobs.qovery.com"},{label:"Team",to:"https://www.qovery.com/team"},{label:"Investors",to:"https://www.qovery.com/investors"},{label:"Contact",to:"https://www.qovery.com/contact"}]}],copyright:"\xa9 2023 DESIGNED BY QOVERY | PROUD SILVER MEMBER OF CNCF AND LINUX FOUNDATION | QOVERY BY BIRDSIGHT - ALL RIGHTS RESERVED"},algolia:{appId:"FT65SBJ2DA",apiKey:"02604e8b2e0918e90edd1d9eb8e30f5e",indexName:"qovery",algoliaOptions:{}},googleAnalytics:{trackingId:"UA-129773960-5"},posthog:{apiKey:"phc_IgdG1K2GveDUte1gJ6hlwNbFHCv9nViWETUyLMU7ciq",appUrl:"https://phprox.qovery.com",enableInDevelopment:!1},imageZoom:{selector:"img"}},title:"Qovery",tagline:"Deploy On-demand Environments on AWS, Remarkably Fast",url:"https://hub.qovery.com",baseUrl:"/",favicon:"img/logo-square.svg",organizationName:"Qovery",projectName:"documentation",presets:[],scripts:["/js/intercom.js",{src:"https://www.googletagmanager.com/gtag/js?id=UA-129773960-5",async:!0},"/js/ga.js"],stylesheets:["https://fonts.googleapis.com/css?family=Ubuntu|Roboto|Source+Code+Pro","https://at-ui.github.io/feather-font/css/iconfont.css"]}},function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return l}));var o=n(3),r=n(1),i=n(0),a=n.n(i);function u(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?Object(o.f)(t,e):n.length?n[n.length-1].match:o.c.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&u(e.routes,t,n)),r})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.a.createElement(o.d,n,e.map((function(e,n){return a.a.createElement(o.b,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render(Object(r.a)({},n,{},t,{route:e})):a.a.createElement(e.component,Object(r.a)({},n,t,{route:e}))}})}))):null}},function(e,t){var n=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:n,canUseEventListeners:n&&!(!window.addEventListener&&!window.attachEvent),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&!!window.screen};e.exports=o},function(e,t,n){"use strict";var o=n(36),r={};r[n(2)("toStringTag")]="z",r+""!="[object z]"&&n(16)(Object.prototype,"toString",(function(){return"[object "+o(this)+"]"}),!0)},function(e,t,n){"use strict";var o=n(74),r=n(88),i=n(24),a=n(33);e.exports=n(61)(Array,"Array",(function(e,t){this._t=a(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports={}},function(e,t,n){var o=n(107),r=n(65);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){var o=n(35),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){var o=n(34);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(8),r=n(86),i=n(87),a=Object.defineProperty;t.f=n(10)?Object.defineProperty:function(e,t,n){if(o(e),t=i(t,!0),o(n),r)try{return a(e,t,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){for(var o=n(22),r=n(25),i=n(16),a=n(5),u=n(11),l=n(24),s=n(2),c=s("iterator"),d=s("toStringTag"),p=l.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},g=r(f),m=0;m0?o:n)(e)}},function(e,t,n){var o=n(23),r=n(2)("toStringTag"),i="Arguments"==o(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),r))?n:i?o(t):"Object"==(a=o(t))&&"function"==typeof t.callee?"Arguments":a}},function(e){e.exports=JSON.parse('{"/":{"component":"c4f5d8e4"},"/community":{"component":"672ba3d6"},"/components":{"component":"54e7632e"},"/contact":{"component":"83e9e333"},"/docs":{"component":"25b7c3f2"},"/guides":{"component":"c6d06197","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"b59dcbd0"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"8f02216a"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"5751c945"},{"content":"d64bf575"},{"content":"3036b36b"},{"content":"280c5e92"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"dea3d534"},{"content":"6ce627d6"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"05049f86"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"49d2885e"},"/guides/advanced":{"component":"d9deea5f","items":[{"content":"b59dcbd0"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"8f02216a"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"05049f86"}],"metadata":"3e1d77c1"},"/guides/advanced/build-on-top":{"component":"1c13b173","content":"712915be"},"/guides/advanced/continuous-integration":{"component":"1c13b173","content":"03d003d1"},"/guides/advanced/costs-control":{"component":"1c13b173","content":"a8a9c166"},"/guides/advanced/deploy-api-gateway":{"component":"1c13b173","content":"b7d53051"},"/guides/advanced/deploy-aws-services":{"component":"1c13b173","content":"5385e737"},"/guides/advanced/deploy-external-services":{"component":"1c13b173","content":"e7d0ec68"},"/guides/advanced/deploy-frontend":{"component":"1c13b173","content":"1dd2c233"},"/guides/advanced/helm-chart":{"component":"1c13b173","content":"c24a85bb"},"/guides/advanced/microservices":{"component":"1c13b173","content":"66bbed7b"},"/guides/advanced/migration":{"component":"1c13b173","content":"10c2e3e6"},"/guides/advanced/monitoring":{"component":"1c13b173","content":"18415bef"},"/guides/advanced/monorepository":{"component":"1c13b173","content":"f756422c"},"/guides/advanced/production":{"component":"1c13b173","content":"93701b40"},"/guides/advanced/seed-database":{"component":"1c13b173","content":"2309a9c8"},"/guides/advanced/terraform":{"component":"1c13b173","content":"9c8ed74f"},"/guides/advanced/use-preview-environments":{"component":"1c13b173","content":"8bfd1931"},"/guides/cloud-provider":{"component":"d9deea5f","items":[{"content":"5751c945"},{"content":"d64bf575"},{"content":"3036b36b"},{"content":"280c5e92"}],"metadata":"4ac9ee63"},"/guides/cloud-provider/guide-amazon-web-services":{"component":"1c13b173","content":"454f50a3"},"/guides/cloud-provider/guide-google-cloud-platform":{"component":"1c13b173","content":"fe264ce1"},"/guides/cloud-provider/guide-microsoft-azure":{"component":"1c13b173","content":"d0db1526"},"/guides/cloud-provider/guide-scaleway":{"component":"1c13b173","content":"ff053ed0"},"/guides/getting-started":{"component":"d9deea5f","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"}],"metadata":"0e2fb061"},"/guides/getting-started/create-a-database":{"component":"1c13b173","content":"24e60f8a"},"/guides/getting-started/debugging":{"component":"1c13b173","content":"6504a542"},"/guides/getting-started/deploy-your-first-application":{"component":"1c13b173","content":"cc9be38a"},"/guides/getting-started/managing-environment-variables":{"component":"1c13b173","content":"b7280cb5"},"/guides/getting-started/setting-custom-domain":{"component":"1c13b173","content":"c0594016"},"/guides/tags":{"component":"3116c1fa","tags":"a81fb19d"},"/guides/tags/cloud-provider-aws":{"component":"004ec9e5","items":[{"content":"a156f6a6"},{"content":"3e6b1f84"},{"content":"1b633bfd"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"a1fea8fb"},{"content":"5751c945"},{"content":"6ce627d6"},{"content":"c8223350"},{"content":"cbb976f4"},{"content":"0c18cf89"}],"metadata":"b795af1c"},"/guides/tags/cloud-provider-azure":{"component":"004ec9e5","items":[{"content":"d64bf575"}],"metadata":"4505e7dd"},"/guides/tags/cloud-provider-gcp":{"component":"004ec9e5","items":[{"content":"280c5e92"}],"metadata":"d24a1a4d"},"/guides/tags/cloud-provider-scaleway":{"component":"004ec9e5","items":[{"content":"3036b36b"}],"metadata":"83c60db1"},"/guides/tags/database-postgresql":{"component":"004ec9e5","items":[{"content":"50bab564"},{"content":"2cb76395"},{"content":"f7098925"}],"metadata":"4a111132"},"/guides/tags/framework-rails":{"component":"004ec9e5","items":[{"content":"50bab564"}],"metadata":"a264e41a"},"/guides/tags/language-javascript":{"component":"004ec9e5","items":[{"content":"498daee8"},{"content":"072d4c63"}],"metadata":"cb05c8fa"},"/guides/tags/language-kotlin":{"component":"004ec9e5","items":[{"content":"f7098925"}],"metadata":"dbe0f891"},"/guides/tags/language-ruby":{"component":"004ec9e5","items":[{"content":"50bab564"}],"metadata":"f7aa8e39"},"/guides/tags/language-rust":{"component":"004ec9e5","items":[{"content":"89caf623"},{"content":"b565c464"}],"metadata":"2e212509"},"/guides/tags/technology-docker":{"component":"004ec9e5","items":[{"content":"bbfbe73c"}],"metadata":"d4b6ce89"},"/guides/tags/technology-github":{"component":"004ec9e5","items":[{"content":"40ec3bc1"}],"metadata":"60ad046d"},"/guides/tags/technology-helm":{"component":"004ec9e5","items":[{"content":"8f02216a"}],"metadata":"49dea187"},"/guides/tags/technology-qovery":{"component":"004ec9e5","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"56c0a343"},{"content":"b59dcbd0"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"5e5fefd2"},{"content":"36676680"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"a960914c"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"ba43933d"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"f3d8c143"}],"metadata":"4c0b3d74"},"/guides/tags/technology-terraform":{"component":"004ec9e5","items":[{"content":"05049f86"}],"metadata":"63ea0c72"},"/guides/tags/type-guide":{"component":"004ec9e5","items":[{"content":"d2397242"},{"content":"44b423be"},{"content":"e4310ee0"},{"content":"0578cd49"},{"content":"48764d63"},{"content":"b59dcbd0"},{"content":"1a39f24c"},{"content":"da253275"},{"content":"5e5fefd2"},{"content":"3e6b1f84"},{"content":"36676680"},{"content":"498daee8"},{"content":"8f02216a"},{"content":"5751c945"},{"content":"d64bf575"},{"content":"3036b36b"},{"content":"280c5e92"},{"content":"dea3d534"},{"content":"e5b9b0aa"},{"content":"9ecfa6fe"},{"content":"16c36934"},{"content":"16976906"},{"content":"68c0e7f9"},{"content":"e8b0321f"},{"content":"05049f86"}],"metadata":"f11e9a8e"},"/guides/tags/type-tutorial":{"component":"004ec9e5","items":[{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"6ce627d6"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"bf22200e"},"/guides/tutorial":{"component":"d9deea5f","items":[{"content":"a156f6a6"},{"content":"56c0a343"},{"content":"89caf623"},{"content":"967beaa8"},{"content":"1a6d3985"},{"content":"ff0cde69"},{"content":"cbcbf0e3"},{"content":"50bab564"},{"content":"2cb76395"},{"content":"3088ad98"},{"content":"df1c18d8"},{"content":"1b633bfd"},{"content":"bc592dc7"},{"content":"acaf40e9"},{"content":"5b95bed2"},{"content":"3986a7a9"},{"content":"de0a75d9"},{"content":"bdd6d8c6"},{"content":"b565c464"},{"content":"a960914c"},{"content":"40ec3bc1"},{"content":"fb1d0a83"},{"content":"9107e302"},{"content":"a1fea8fb"},{"content":"e06f2af5"},{"content":"8d146bfd"},{"content":"bbfbe73c"},{"content":"60296d59"},{"content":"e1becc8e"},{"content":"b5eab6bb"},{"content":"072d4c63"},{"content":"6ce627d6"},{"content":"ba43933d"},{"content":"c8223350"},{"content":"f7098925"},{"content":"7952d159"},{"content":"c0ab55e0"},{"content":"cbb976f4"},{"content":"f3d8c143"},{"content":"0c18cf89"}],"metadata":"af9ec14b"},"/guides/tutorial/aws-sqs-lambda-with-qovery":{"component":"1c13b173","content":"bbedfc29"},"/guides/tutorial/aws-vpc-peering-with-qovery":{"component":"1c13b173","content":"e9c994cf"},"/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws":{"component":"1c13b173","content":"94a00d4e"},"/guides/tutorial/build-e2e-testing-ephemeral-environments":{"component":"1c13b173","content":"2121549d"},"/guides/tutorial/cloudwatch-integration":{"component":"1c13b173","content":"83a41d86"},"/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1":{"component":"1c13b173","content":"db372ba8"},"/guides/tutorial/create-a-playground-environment-on-aws":{"component":"1c13b173","content":"2ea1d02e"},"/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws":{"component":"1c13b173","content":"410a9ba0"},"/guides/tutorial/customizing-preview-url-with-qovery-cli":{"component":"1c13b173","content":"b76eb9a9"},"/guides/tutorial/data-seeding-in-postgres":{"component":"1c13b173","content":"4592dbe6"},"/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq":{"component":"1c13b173","content":"a3cf753a"},"/guides/tutorial/deploy-temporal-on-kubernetes":{"component":"1c13b173","content":"49a59b02"},"/guides/tutorial/generate-qovery-api-client":{"component":"1c13b173","content":"a4401f0f"},"/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners":{"component":"1c13b173","content":"1a3e0044"},"/guides/tutorial/github-organization-repository-access":{"component":"1c13b173","content":"55af4c9e"},"/guides/tutorial/grafana-install":{"component":"1c13b173","content":"5b8d4026"},"/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster":{"component":"1c13b173","content":"06e8d299"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1":{"component":"1c13b173","content":"10dee872"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2":{"component":"1c13b173","content":"a4c8ecc0"},"/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3":{"component":"1c13b173","content":"b74d0aaa"},"/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws":{"component":"1c13b173","content":"eb0c7ce5"},"/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl":{"component":"1c13b173","content":"7aa59ca3"},"/guides/tutorial/how-to-create-an-rds-instance-through-aws-console":{"component":"1c13b173","content":"e4768112"},"/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease":{"component":"1c13b173","content":"3da71a70"},"/guides/tutorial/how-to-deploy-helm-charts":{"component":"1c13b173","content":"4fed1128"},"/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes":{"component":"1c13b173","content":"97f5d064"},"/guides/tutorial/how-to-integrate-qovery-with-github-actions":{"component":"1c13b173","content":"c7bfb1d3"},"/guides/tutorial/how-to-run-commands-at-application-startup":{"component":"1c13b173","content":"1d3be599"},"/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery":{"component":"1c13b173","content":"311fe203"},"/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources":{"component":"1c13b173","content":"6b7a52aa"},"/guides/tutorial/how-to-write-a-dockerfile":{"component":"1c13b173","content":"a9994e72"},"/guides/tutorial/import-your-environment-variables-with-the-qovery-cli":{"component":"1c13b173","content":"bb89e1a0"},"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog":{"component":"1c13b173","content":"b479fc9a"},"/guides/tutorial/managing-env-variables-in-create-react-app":{"component":"1c13b173","content":"a4459aa8"},"/guides/tutorial/migrate-your-application-from-heroku-to-aws":{"component":"1c13b173","content":"03dbc155"},"/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery":{"component":"1c13b173","content":"e5653b8d"},"/guides/tutorial/url-shortener-api-with-kotlin":{"component":"1c13b173","content":"ab8f5b83"},"/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services":{"component":"1c13b173","content":"35d9179e"},"/guides/tutorial/use-aws-iam-roles-with-qovery":{"component":"1c13b173","content":"5b5f8b70"},"/guides/tutorial/working-with-git-submodules":{"component":"1c13b173","content":"f26e55ec"},"/mailing_list":{"component":"48912b2c"},"/docs/:route":{"component":"1be78505","docsMetadata":"20ac7829"},"/docs/getting-started":{"component":"17896441","content":"d589d3a7"},"/docs/getting-started/basic-concepts":{"component":"17896441","content":"d85dc1ef"},"/docs/getting-started/deploy-my-app":{"component":"17896441","content":"4354960d"},"/docs/getting-started/how-qovery-works":{"component":"17896441","content":"cb2208c1"},"/docs/getting-started/install-qovery":{"component":"17896441","content":"1a1dfe25"},"/docs/getting-started/what-is-qovery":{"component":"17896441","content":"68b95634"},"/docs/getting-started/whats-next":{"component":"17896441","content":"543e268a"},"/docs/security-and-compliance":{"component":"17896441","content":"fcb698a1"},"/docs/security-and-compliance/backup-and-restore":{"component":"17896441","content":"b98931a2"},"/docs/security-and-compliance/encryption":{"component":"17896441","content":"2486bcfc"},"/docs/security-and-compliance/gdpr":{"component":"17896441","content":"7278678a"},"/docs/security-and-compliance/soc2":{"component":"17896441","content":"cf490432"},"/docs/useful-resources/faq":{"component":"17896441","content":"59157ba2"},"/docs/useful-resources/help-and-support":{"component":"17896441","content":"d2075f7f"},"/docs/using-qovery":{"component":"17896441","content":"56cfbe62"},"/docs/using-qovery/audit-logs":{"component":"17896441","content":"b8490823"},"/docs/using-qovery/configuration":{"component":"17896441","content":"fc376fea"},"/docs/using-qovery/configuration/advanced-settings":{"component":"17896441","content":"4f6caeac"},"/docs/using-qovery/configuration/application":{"component":"17896441","content":"8d5726d6"},"/docs/using-qovery/configuration/application-health-checks":{"component":"17896441","content":"91473650"},"/docs/using-qovery/configuration/cloud-service-provider":{"component":"17896441","content":"33b1fe0f"},"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services":{"component":"17896441","content":"43a5f55b"},"/docs/using-qovery/configuration/cloud-service-provider/digital-ocean":{"component":"17896441","content":"0806b243"},"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform":{"component":"17896441","content":"9ab61bc5"},"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure":{"component":"17896441","content":"e61780f0"},"/docs/using-qovery/configuration/cloud-service-provider/scaleway":{"component":"17896441","content":"d3437d81"},"/docs/using-qovery/configuration/cluster-advanced-settings":{"component":"17896441","content":"2f1afd92"},"/docs/using-qovery/configuration/clusters":{"component":"17896441","content":"dc00a797"},"/docs/using-qovery/configuration/cronjob":{"component":"17896441","content":"54ad54c7"},"/docs/using-qovery/configuration/database":{"component":"17896441","content":"9feef5a0"},"/docs/using-qovery/configuration/database/mongodb":{"component":"17896441","content":"9ddfc3dc"},"/docs/using-qovery/configuration/database/mysql":{"component":"17896441","content":"accdb2b4"},"/docs/using-qovery/configuration/database/postgresql":{"component":"17896441","content":"baf9cc25"},"/docs/using-qovery/configuration/database/redis":{"component":"17896441","content":"c536ba8c"},"/docs/using-qovery/configuration/deployment-rule":{"component":"17896441","content":"db96bb7d"},"/docs/using-qovery/configuration/environment":{"component":"17896441","content":"a4a09dfe"},"/docs/using-qovery/configuration/environment-variable":{"component":"17896441","content":"07c2f310"},"/docs/using-qovery/configuration/lifecycle-job":{"component":"17896441","content":"16557ade"},"/docs/using-qovery/configuration/object-storage":{"component":"17896441","content":"9d3c5a68"},"/docs/using-qovery/configuration/organization":{"component":"17896441","content":"ff91a867"},"/docs/using-qovery/configuration/organization/api-token":{"component":"17896441","content":"1d187ae3"},"/docs/using-qovery/configuration/organization/container-registry":{"component":"17896441","content":"6b0e113a"},"/docs/using-qovery/configuration/organization/git-repository-access":{"component":"17896441","content":"9406f053"},"/docs/using-qovery/configuration/organization/members-rbac":{"component":"17896441","content":"b2880863"},"/docs/using-qovery/configuration/project":{"component":"17896441","content":"bd10520b"},"/docs/using-qovery/configuration/service-health-checks":{"component":"17896441","content":"073aa0b0"},"/docs/using-qovery/configuration/user-account":{"component":"17896441","content":"376f4c3b"},"/docs/using-qovery/deployment":{"component":"17896441","content":"8ca6d3cf"},"/docs/using-qovery/deployment/deploying-with-auto-deploy":{"component":"17896441","content":"39686ad9"},"/docs/using-qovery/deployment/deploying-with-ci-cd":{"component":"17896441","content":"36b4c04d"},"/docs/using-qovery/deployment/deployment-actions":{"component":"17896441","content":"8ae34d0a"},"/docs/using-qovery/deployment/deployment-history":{"component":"17896441","content":"47a329cb"},"/docs/using-qovery/deployment/deployment-pipeline":{"component":"17896441","content":"55ef6d6a"},"/docs/using-qovery/deployment/deployment-strategies":{"component":"17896441","content":"b79e7411"},"/docs/using-qovery/deployment/image-mirroring":{"component":"17896441","content":"6308ca27"},"/docs/using-qovery/deployment/logs":{"component":"17896441","content":"6ebd4d49"},"/docs/using-qovery/deployment/running-and-deployment-statuses":{"component":"17896441","content":"e3c664e0"},"/docs/using-qovery/integration":{"component":"17896441","content":"8d1c77c1"},"/docs/using-qovery/integration/api-integration":{"component":"17896441","content":"d28d5470"},"/docs/using-qovery/integration/container-registry":{"component":"17896441","content":"7f79072b"},"/docs/using-qovery/integration/continuous-integration":{"component":"17896441","content":"1772e35f"},"/docs/using-qovery/integration/continuous-integration/circle-ci":{"component":"17896441","content":"1aa86e56"},"/docs/using-qovery/integration/continuous-integration/github-actions":{"component":"17896441","content":"3a11bd48"},"/docs/using-qovery/integration/continuous-integration/gitlab-ci":{"component":"17896441","content":"120e882c"},"/docs/using-qovery/integration/continuous-integration/jenkins":{"component":"17896441","content":"4dcdbf34"},"/docs/using-qovery/integration/git-repository":{"component":"17896441","content":"2a88660b"},"/docs/using-qovery/integration/monitoring":{"component":"17896441","content":"592d28ca"},"/docs/using-qovery/integration/monitoring/datadog":{"component":"17896441","content":"d471c358"},"/docs/using-qovery/integration/monitoring/new-relic":{"component":"17896441","content":"e1e0a511"},"/docs/using-qovery/integration/secret-manager":{"component":"17896441","content":"888595cd"},"/docs/using-qovery/integration/secret-manager/aws-secrets-manager":{"component":"17896441","content":"dab3a2be"},"/docs/using-qovery/integration/secret-manager/doppler":{"component":"17896441","content":"5e60e078"},"/docs/using-qovery/integration/slack":{"component":"17896441","content":"40a919e7"},"/docs/using-qovery/integration/terraform":{"component":"17896441","content":"deef6d59"},"/docs/using-qovery/integration/webhook":{"component":"17896441","content":"7df50433"},"/docs/using-qovery/interface":{"component":"17896441","content":"3a03b8f9"},"/docs/using-qovery/interface/cli":{"component":"17896441","content":"d9a4c8ef"},"/docs/using-qovery/interface/rest-api":{"component":"17896441","content":"c3f02c14"},"/docs/using-qovery/interface/terraform-interface":{"component":"17896441","content":"f0f90e68"},"/docs/using-qovery/interface/web-interface":{"component":"17896441","content":"58379094"},"/docs/using-qovery/maintenance":{"component":"17896441","content":"ac2c90fd"},"/docs/using-qovery/troubleshoot":{"component":"17896441","content":"b4dda200"},"/docs/using-qovery/troubleshoot/application-troubleshoot":{"component":"17896441","content":"fcd9bd5b"},"/docs/using-qovery/troubleshoot/cluster-troubleshoot":{"component":"17896441","content":"3cfde410"},"/docs/using-qovery/troubleshoot/database-troubleshoot":{"component":"17896441","content":"10ff7003"},"/docs/using-qovery/troubleshoot/lifecycle-troubleshoot":{"component":"17896441","content":"ca4f5154"}}')},function(e,t,n){var o,r;void 0===(r="function"==typeof(o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
                                                                              '};function r(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,o.minimum,1),n.status=1===e?null:e;var l=n.render(!t),s=l.querySelector(o.barSelector),c=o.speed,d=o.easing;return l.offsetWidth,a((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),u(s,function(e,t,n){var r;return(r="translate3d"===o.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,r}(e,c,d)),1===e?(u(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){u(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");s(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var r,a=t.querySelector(o.barSelector),l=e?"-100":i(n.status||0),c=document.querySelector(o.parent);return u(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),o.showSpinner||(r=t.querySelector(o.spinnerSelector))&&p(r),c!=document.body&&s(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var a=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),u=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var o,r=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((o=e[r]+i)in n)return o;return t}(n))}function o(e,t,o){t=n(t),e.style[t]=o}return function(e,t){var n,r,i=arguments;if(2==i.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,i[1],i[2])}}();function l(e,t){return("string"==typeof e?e:d(e)).indexOf(" "+t+" ")>=0}function s(e,t){var n=d(e),o=n+t;l(n,t)||(e.className=o.substring(1))}function c(e,t){var n,o=d(e);l(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function d(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?o.call(t,n,t,e):o)||(e.exports=r)},function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return w}));var o=n(3);n.d(t,"c",(function(){return o.a})),n.d(t,"d",(function(){return o.f})),n.d(t,"e",(function(){return o.g})),n.d(t,"f",(function(){return o.h}));var r=n(6),i=n(0),a=n.n(i),u=n(7),l=(n(15),n(1)),s=n(9),c=n(4),d=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),r=0;r1&&u.call(o[0],n,(function(){for(r=1;re.length)return;if(!(k instanceof l)){if(m&&y!=t.length-1){if(p.lastIndex=w,!(P=p.exec(e)))break;for(var x=P.index+(g?P[1].length:0),E=P.index+P[0].length,_=y,S=w,T=t.length;_=(S+=t[_].length)&&(++y,w=S);if(t[y]instanceof l)continue;C=_-y,k=e.slice(w,S),P.index-=w}else{p.lastIndex=0;var P=p.exec(k),C=1}if(P){g&&(h=P[1]?P[1].length:0),E=(x=P.index+h)+(P=P[0].slice(h)).length;var O=k.slice(0,x),A=k.slice(E),R=[y,C];O&&(++y,w+=O.length,R.push(O));var q=new l(s,f?r.tokenize(P,f):P,b,P,m);if(R.push(q),A&&R.push(A),Array.prototype.splice.apply(t,R),1!=C&&r.matchGrammar(e,t,n,y,w,!0,s),a)break}else if(a)break}}}}},hooks:{add:function(){}},tokenize:function(e,t,n){var o=[e],i=t.rest;if(i){for(var a in i)t[a]=i[a];delete t.rest}return r.matchGrammar(e,o,t,0,0,!1),o}},(i=r.Token=function(e,t,n,o,r){this.type=e,this.content=t,this.alias=n,this.length=0|(o||"").length,this.greedy=!!r}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===r.util.type(e))return e.map((function(n){return i.stringify(n,t,e)})).join("");var o={type:e.type,content:i.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var a="Array"===r.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(o.classes,a)}var u=Object.keys(o.attributes).map((function(e){return e+'="'+(o.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+(u?" "+u:"")+">"+o.content+""},r);a.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var o={"included-cdata":{pattern://i,inside:n}};o["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,e),"i"),lookbehind:!0,greedy:!0,inside:o},a.languages.insertBefore("markup","cdata",r)}}),a.languages.xml=a.languages.extend("markup",{}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,i=0;i=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{"class-name":{pattern:/(\b(?:enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),a.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete a.languages.c.boolean,a.languages.cpp=a.languages.extend("c",{"class-name":{pattern:/(\b(?:class|enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),a.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},n.tag))}(a),a.languages.css.selector={pattern:a.languages.css.selector,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:/\[(?:[^[\]"']|("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1)*\]/,greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},attribute:{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},value:[/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],punctuation:/[()]/}},a.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}}),a.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:/#[\da-f]{3,8}/i,entity:/\\[\da-f]{1,8}/i,unit:{pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},number:/-?[\d.]+/}),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}}}),a.languages.markup&&a.languages.markup.tag.addInlined("script","javascript"),a.languages.js=a.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{(?:\{[^}]*\}|[^}])*\}|[^}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},o=function(t){for(var r=[],i=0;i0&&r[r.length-1].tagName===n(a.content[0].content[1])&&r.pop():"/>"===a.content[a.content.length-1].content||r.push({tagName:n(a.content[0].content[1]),openedBraces:0}):r.length>0&&"punctuation"===a.type&&"{"===a.content?r[r.length-1].openedBraces++:r.length>0&&r[r.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?r[r.length-1].openedBraces--:u=!0),(u||"string"==typeof a)&&r.length>0&&0===r[r.length-1].openedBraces){var l=n(a);i0&&("string"==typeof t[i-1]||"plain-text"===t[i-1].type)&&(l=n(t[i-1])+l,t.splice(i-1,1),i--),t[i]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&o(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||o(e.tokens)}))}(a),function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){"string"==typeof t&&(t=[t]),t.forEach((function(t){!function(t,n){var o=e.languages[t];if(o){var r=o["doc-comment"];if(!r){var i={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,alias:"comment"}};r=(o=e.languages.insertBefore(t,"comment",i))["doc-comment"]}if(r instanceof RegExp&&(r=o["doc-comment"]={pattern:r}),Array.isArray(r))for(var a=0,u=r.length;a>>?=?|->|([-+&|])\2|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":n,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(a),function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,o,r,i){if(n.language===o){var a=n.tokenStack=[];n.code=n.code.replace(r,(function(e){if("function"==typeof i&&!i(e))return e;for(var r,u=a.length;-1!==n.code.indexOf(r=t(o,u));)++u;return a[u]=e,r})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,o){if(n.language===o&&n.tokenStack){n.grammar=e.languages[o];var r=0,i=Object.keys(n.tokenStack);!function a(u){for(var l=0;l=i.length);l++){var s=u[l];if("string"==typeof s||s.content&&"string"==typeof s.content){var c=i[r],d=n.tokenStack[c],p="string"==typeof s?s:s.content,f=t(o,c),g=p.indexOf(f);if(g>-1){++r;var m=p.substring(0,g),h=new e.Token(o,e.tokenize(d,n.grammar),"language-"+o,d),b=p.substring(g+f.length),v=[];m&&v.push.apply(v,a([m])),v.push(h),b&&v.push.apply(v,a([b])),"string"==typeof s?u.splice.apply(u,[l,1].concat(v)):s.content=v}}else s.content&&a(s.content)}return u}(n.tokens)}}}})}(a),function(e){e.languages.php=e.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,boolean:{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),e.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),e.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),e.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),e.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var t={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:{rest:e.languages.php}};e.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:t}}}),delete e.languages.php.string,e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(a),function(e){var t=e.languages.javascript,n=/{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}/.source,o="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(o+/[$\w\xA0-\uFFFF.]+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(o+/\[[$\w\xA0-\uFFFF.]+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{punctuation:/[.,:?=<>|{}()[\]]/}},{pattern:/(@(?:augments|extends|class|interface|memberof!?|this)\s+)[A-Z]\w*(?:\.[A-Z]\w*)*/,lookbehind:!0,inside:{punctuation:/\./}}],example:{pattern:/(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^(\s*(?:\*\s*)?).+$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(a),a.languages.actionscript=a.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),a.languages.actionscript["class-name"].alias="function",a.languages.markup&&a.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:a.languages.markup}}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:/(\.\s*)#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],n=0;n))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(a),a.languages.n4js=a.languages.extend("javascript",{keyword:/\b(?:any|Array|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),a.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),a.languages.n4jsd=a.languages.n4js,a.languages.typescript=a.languages.extend("javascript",{keyword:/\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),a.languages.ts=a.languages.typescript,function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,o=t.inside.interpolation,r=o.inside["interpolation-punctuation"],i=o.pattern.source;function a(t,o){if(e.languages[t])return{pattern:RegExp("((?:"+o+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function u(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,o){var r={code:t,grammar:n,language:o};return e.hooks.run("before-tokenize",r),r.tokens=e.tokenize(r.code,r.grammar),e.hooks.run("after-tokenize",r),r.tokens}function s(t){var n={};n["interpolation-punctuation"]=r;var i=e.tokenize(t,n);if(3===i.length){var a=[1,1];a.push.apply(a,l(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,a)}return new e.Token("interpolation",i,o.alias,t)}function c(t,n,o){var r=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),a=0,c={},d=l(r.map((function(e){if("string"==typeof e)return e;for(var n,r=e.content;-1!==t.indexOf(n=u(a++,o)););return c[n]=r,n})).join(""),n,o),p=Object.keys(c);return a=0,function e(t){for(var n=0;n=p.length)return;var o=t[n];if("string"==typeof o||"string"==typeof o.content){var r=p[a],i="string"==typeof o?o:o.content,u=i.indexOf(r);if(-1!==u){++a;var l=i.substring(0,u),d=s(c[r]),f=i.substring(u+r.length),g=[];if(l&&g.push(l),g.push(d),f){var m=[f];e(m),g.push.apply(g,m)}"string"==typeof o?(t.splice.apply(t,[n,1].concat(g)),n+=g.length-1):o.content=g}}else{var h=o.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(o,d,"language-"+o,t)}e.languages.javascript["template-string"]=[a("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),a("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),a("svg",/\bsvg/.source),a("markdown",/\b(?:md|markdown)/.source),a("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var o=0,r=n.length;o/g,t),n&&(e=e+"|"+e.replace(/_/g,"\\*")),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var o=/(?:\\.|``.+?``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\r?\n|\r)|$)/.source.replace(/__/g,o),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\r?\n|\r)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+i+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+i+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/(^[ \t]*(?:\r?\n|\r))(?: {4}|\t).+(?:(?:\r?\n|\r)(?: {4}|\t).+)*/m,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\r?\n|\r))[\s\S]+?(?=(?:\r?\n|\r)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\r?\n|\r)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/__(?:(?!_)|_(?:(?!_))+_)+__/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/_(?:(?!_)|__(?:(?!_))+__)+_/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+?\2/.source,!1),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[(?:(?!\]))+\])/.source,!1),lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(\[)[^\]]+(?=\]$)/,lookbehind:!0},content:{pattern:/(^!?\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,o=t.length;n",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var o=t[n],r=[];/^\w+$/.test(n)||r.push(/\w+/.exec(n)[0]),"diff"===n&&r.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+o+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete a.languages.go["class-name"],function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*~?\s*)[#\/]\S+?(?=\s*~?\s*$|\s)/i,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}))}(a),a.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,number:/-?\d+\.?\d*(e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{keyword:/\b(?:asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,type:{pattern:/\B['`]\w*/,alias:"variable"},directive:{pattern:/\B#\w+/,alias:"function"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/,punctuation:/[(){}\[\]|_.,:;]/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/i,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{comment:{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),a.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={url:/url\((["']?).*?\1\)/i,string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,number:/\b\d+(?:\.\d+)?%?/,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.+|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],punctuation:/[{}()\[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={comment:{pattern:/(^|[^\\])(\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:t.interpolation,punctuation:/[{},]/}},func:t.func,string:t.string,interpolation:t.interpolation,punctuation:/[{}()\[\];:.]/}}(a);var u=a.util.clone(a.languages.typescript);a.languages.tsx=a.languages.extend("jsx",u),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},a.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},a.languages.yml=a.languages.yaml,t.a=a},function(e,t,n){var o=n(23);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==o(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var o=n(36),r=RegExp.prototype.exec;e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==o(e))throw new TypeError("RegExp#exec called on incompatible receiver");return r.call(e,t)}},function(e,t,n){"use strict";n(103);var o=n(16),r=n(11),i=n(14),a=n(34),u=n(2),l=n(45),s=u("species"),c=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),d=function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();e.exports=function(e,t,n){var p=u(e),f=!i((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),g=f?!i((function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===e&&(n.constructor={},n.constructor[s]=function(){return n}),n[p](""),!t})):void 0;if(!f||!g||"replace"===e&&!c||"split"===e&&!d){var m=/./[p],h=n(a,p,""[e],(function(e,t,n,o,r){return t.exec===l?f&&!r?{done:!0,value:m.call(t,n,o)}:{done:!0,value:e.call(n,t,o)}:{done:!1}})),b=h[0],v=h[1];o(String.prototype,e,b),r(RegExp.prototype,p,2==t?function(e,t){return v.call(e,this,t)}:function(e){return v.call(e,this)})}}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var o,r,i,a,u=n(44),l=n(5),s=n(30),c=n(36),d=n(12),p=n(13),f=n(32),g=n(80),m=n(81),h=n(63),b=n(70).set,v=n(122)(),y=n(71),w=n(123),k=n(124),x=n(125),E=l.TypeError,_=l.process,S=_&&_.versions,T=S&&S.v8||"",P=l.Promise,C="process"==c(_),O=function(){},A=r=y.f,R=!!function(){try{var e=P.resolve(1),t=(e.constructor={})[n(2)("species")]=function(e){e(O,O)};return(C||"function"==typeof PromiseRejectionEvent)&&e.then(O)instanceof t&&0!==T.indexOf("6.6")&&-1===k.indexOf("Chrome/66")}catch(o){}}(),q=function(e){var t;return!(!p(e)||"function"!=typeof(t=e.then))&&t},N=function(e,t){if(!e._n){e._n=!0;var n=e._c;v((function(){for(var o=e._v,r=1==e._s,i=0,a=function(t){var n,i,a,u=r?t.ok:t.fail,l=t.resolve,s=t.reject,c=t.domain;try{u?(r||(2==e._h&&j(e),e._h=1),!0===u?n=o:(c&&c.enter(),n=u(o),c&&(c.exit(),a=!0)),n===t.promise?s(E("Promise-chain cycle")):(i=q(n))?i.call(n,l,s):l(n)):s(o)}catch(d){c&&!a&&c.exit(),s(d)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&I(e)}))}},I=function(e){b.call(l,(function(){var t,n,o,r=e._v,i=z(e);if(i&&(t=w((function(){C?_.emit("unhandledRejection",r,e):(n=l.onunhandledrejection)?n({promise:e,reason:r}):(o=l.console)&&o.error&&o.error("Unhandled promise rejection",r)})),e._h=C||z(e)?2:1),e._a=void 0,i&&t.e)throw t.v}))},z=function(e){return 1!==e._h&&0===(e._a||e._c).length},j=function(e){b.call(l,(function(){var t;C?_.emit("rejectionHandled",e):(t=l.onrejectionhandled)&&t({promise:e,reason:e._v})}))},L=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),N(t,!0))},F=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw E("Promise can't be resolved itself");(t=q(e))?v((function(){var o={_w:n,_d:!1};try{t.call(e,s(F,o,1),s(L,o,1))}catch(r){L.call(o,r)}})):(n._v=e,n._s=1,N(n,!1))}catch(o){L.call({_w:n,_d:!1},o)}}};R||(P=function(e){g(this,P,"Promise","_h"),f(e),o.call(this);try{e(s(F,this,1),s(L,this,1))}catch(t){L.call(this,t)}},(o=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(82)(P.prototype,{then:function(e,t){var n=A(h(this,P));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=C?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&N(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),i=function(){var e=new o;this.promise=e,this.resolve=s(F,e,1),this.reject=s(L,e,1)},y.f=A=function(e){return e===P||e===a?new i(e):r(e)}),d(d.G+d.W+d.F*!R,{Promise:P}),n(41)(P,"Promise"),n(94)("Promise"),a=n(17).Promise,d(d.S+d.F*!R,"Promise",{reject:function(e){var t=A(this);return(0,t.reject)(e),t.promise}}),d(d.S+d.F*(u||!R),"Promise",{resolve:function(e){return x(u&&this===a?P:this,e)}}),d(d.S+d.F*!(R&&n(83)((function(e){P.all(e).catch(O)}))),"Promise",{all:function(e){var t=this,n=A(t),o=n.resolve,r=n.reject,i=w((function(){var n=[],i=0,a=1;m(e,!1,(function(e){var u=i++,l=!1;n.push(void 0),a++,t.resolve(e).then((function(e){l||(l=!0,n[u]=e,--a||o(n))}),r)})),--a||o(n)}));return i.e&&r(i.v),n.promise},race:function(e){var t=this,n=A(t),o=n.reject,r=w((function(){m(e,!1,(function(e){t.resolve(e).then(n.resolve,o)}))}));return r.e&&o(r.v),n.promise}})},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE){0;try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}}(),e.exports=n(99)},function(e,t,n){"use strict";var o=n(64)(!0);e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},function(e,t,n){"use strict";var o=n(44),r=n(12),i=n(16),a=n(11),u=n(24),l=n(105),s=n(41),c=n(108),d=n(2)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};e.exports=function(e,t,n,g,m,h,b){l(n,t,g);var v,y,w,k=function(e){if(!p&&e in S)return S[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},x=t+" Iterator",E="values"==m,_=!1,S=e.prototype,T=S[d]||S["@@iterator"]||m&&S[m],P=T||k(m),C=m?E?k("entries"):P:void 0,O="Array"==t&&S.entries||T;if(O&&(w=c(O.call(new e)))!==Object.prototype&&w.next&&(s(w,x,!0),o||"function"==typeof w[d]||a(w,d,f)),E&&T&&"values"!==T.name&&(_=!0,P=function(){return T.call(this)}),o&&!b||!p&&!_&&S[d]||a(S,d,P),u[t]=P,u[x]=f,m)if(v={values:E?P:k("values"),keys:h?P:k("keys"),entries:C},b)for(y in v)y in S||i(S,y,v[y]);else r(r.P+r.F*(p||_),t,v);return v}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var o=n(8),r=n(32),i=n(2)("species");e.exports=function(e,t){var n,a=o(e).constructor;return void 0===a||null==(n=o(a)[i])?t:r(n)}},function(e,t,n){var o=n(35),r=n(34);e.exports=function(e){return function(t,n){var i,a,u=String(r(t)),l=o(n),s=u.length;return l<0||l>=s?e?"":void 0:(i=u.charCodeAt(l))<55296||i>56319||l+1===s||(a=u.charCodeAt(l+1))<56320||a>57343?e?u.charAt(l):i:e?u.slice(l,l+2):a-56320+(i-55296<<10)+65536}}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var o=n(5).document;e.exports=o&&o.documentElement},function(e,t,n){"use strict";var o=n(19);t.a=o.b},function(e,t,n){"use strict";e.exports=n(113)},function(e,t,n){"use strict";var o=n(0),r=n.n(o);t.a=r.a.createContext({})},function(e,t,n){var o,r,i,a=n(30),u=n(121),l=n(66),s=n(46),c=n(5),d=c.process,p=c.setImmediate,f=c.clearImmediate,g=c.MessageChannel,m=c.Dispatch,h=0,b={},v=function(){var e=+this;if(b.hasOwnProperty(e)){var t=b[e];delete b[e],t()}},y=function(e){v.call(e.data)};p&&f||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return b[++h]=function(){u("function"==typeof e?e:Function(e),t)},o(h),h},f=function(e){delete b[e]},"process"==n(23)(d)?o=function(e){d.nextTick(a(v,e,1))}:m&&m.now?o=function(e){m.now(a(v,e,1))}:g?(i=(r=new g).port2,r.port1.onmessage=y,o=a(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(o=function(e){c.postMessage(e+"","*")},c.addEventListener("message",y,!1)):o="onreadystatechange"in s("script")?function(e){l.appendChild(s("script")).onreadystatechange=function(){l.removeChild(this),v.call(e)}}:function(e){setTimeout(a(v,e,1),0)}),e.exports={set:p,clear:f}},function(e,t,n){"use strict";var o=n(32);function r(e){var t,n;this.promise=new e((function(e,o){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)}e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";(function(t){var n="__global_unique_id__";e.exports=function(){return t[n]=(t[n]||0)+1}}).call(this,n(76))},function(e,t,n){"use strict";var o=n(68),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},u={};function l(e){return o.isMemo(e)?a:u[e.$$typeof]||r}u[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},u[o.Memo]=a;var s=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,o){if("string"!=typeof n){if(g){var r=f(n);r&&r!==g&&e(t,r,o)}var a=c(n);d&&(a=a.concat(d(n)));for(var u=l(t),m=l(n),h=0;h]*>)/g,f=/\$([$&`']|\d\d?)/g;n(56)("replace",2,(function(e,t,n,g){return[function(o,r){var i=e(this),a=null==o?void 0:o[t];return void 0!==a?a.call(o,i,r):n.call(String(i),o,r)},function(e,t){var r=g(n,e,this,t);if(r.done)return r.value;var d=o(e),p=String(this),f="function"==typeof t;f||(t=String(t));var h=d.global;if(h){var b=d.unicode;d.lastIndex=0}for(var v=[];;){var y=l(d,p);if(null===y)break;if(v.push(y),!h)break;""===String(y[0])&&(d.lastIndex=u(p,i(d.lastIndex),b))}for(var w,k="",x=0,E=0;E=x&&(k+=p.slice(x,S)+A,x=S+_.length)}return k+p.slice(x)}];function m(e,t,o,i,a,u){var l=o+e.length,s=i.length,c=f;return void 0!==a&&(a=r(a),c=p),n.call(u,c,(function(n,r){var u;switch(r.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,o);case"'":return t.slice(l);case"<":u=a[r.slice(1,-1)];break;default:var c=+r;if(0===c)return n;if(c>s){var p=d(c/10);return 0===p?n:p<=s?void 0===i[p-1]?r.charAt(1):i[p-1]+r.charAt(1):n}u=i[c-1]}return void 0===u?"":u}))}}))},function(e,t,n){"use strict";var o=n(95),r=n(8),i=n(63),a=n(60),u=n(26),l=n(55),s=n(45),c=n(14),d=Math.min,p=[].push,f="length",g=!c((function(){RegExp(4294967295,"y")}));n(56)("split",2,(function(e,t,n,c){var m;return m="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1)[f]||2!="ab".split(/(?:ab)*/)[f]||4!=".".split(/(.?)(.?)/)[f]||".".split(/()()/)[f]>1||"".split(/.?/)[f]?function(e,t){var r=String(this);if(void 0===e&&0===t)return[];if(!o(e))return n.call(r,e,t);for(var i,a,u,l=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),d=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,c+"g");(i=s.call(m,r))&&!((a=m.lastIndex)>d&&(l.push(r.slice(d,i.index)),i[f]>1&&i.index=g));)m.lastIndex===i.index&&m.lastIndex++;return d===r[f]?!u&&m.test("")||l.push(""):l.push(r.slice(d)),l[f]>g?l.slice(0,g):l}:"0".split(void 0,0)[f]?function(e,t){return void 0===e&&0===t?[]:n.call(this,e,t)}:n,[function(n,o){var r=e(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,r,o):m.call(String(r),n,o)},function(e,t){var o=c(m,e,this,t,m!==n);if(o.done)return o.value;var s=r(e),p=String(this),f=i(s,RegExp),h=s.unicode,b=(s.ignoreCase?"i":"")+(s.multiline?"m":"")+(s.unicode?"u":"")+(g?"y":"g"),v=new f(g?s:"^(?:"+s.source+")",b),y=void 0===t?4294967295:t>>>0;if(0===y)return[];if(0===p.length)return null===l(v,p)?[p]:[];for(var w=0,k=0,x=[];k=t.length?{value:void 0,done:!0}:(e=o(t,n),this._i+=e.length,{value:e,done:!1})}))},function(e,t){e.exports=function(e,t,n,o){if(!(e instanceof t)||void 0!==o&&o in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var o=n(30),r=n(91),i=n(92),a=n(8),u=n(26),l=n(93),s={},c={};(t=e.exports=function(e,t,n,d,p){var f,g,m,h,b=p?function(){return e}:l(e),v=o(n,d,t?2:1),y=0;if("function"!=typeof b)throw TypeError(e+" is not iterable!");if(i(b)){for(f=u(e.length);f>y;y++)if((h=t?v(a(g=e[y])[0],g[1]):v(e[y]))===s||h===c)return h}else for(m=b.call(e);!(g=m.next()).done;)if((h=r(m,v,g.value,t))===s||h===c)return h}).BREAK=s,t.RETURN=c},function(e,t,n){var o=n(16);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},function(e,t,n){var o=n(2)("iterator"),r=!1;try{var i=[7][o]();i.return=function(){r=!0},Array.from(i,(function(){throw 2}))}catch(a){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var i=[7],u=i[o]();u.next=function(){return{done:n=!0}},i[o]=function(){return u},e(i)}catch(a){}return n}},function(e,t,n){var o=n(12);o(o.S+o.F,"Object",{assign:n(126)})},function(e,t,n){var o=n(12),r=n(129)(!1);o(o.S,"Object",{values:function(e){return r(e)}})},function(e,t,n){e.exports=!n(10)&&!n(14)((function(){return 7!=Object.defineProperty(n(46)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var o=n(13);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var o=n(8),r=n(106),i=n(65),a=n(47)("IE_PROTO"),u=function(){},l=function(){var e,t=n(46)("iframe"),o=i.length;for(t.style.display="none",n(66).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("