PageSourceSearch

https://aihubmix.com/static/index-1vu0c7Mb.js

js aihubmix.com collected 2026-10-03 22:54:25 UTC 134,093 bytes, 4 lines download raw bytes

vendor: 4,697 bytes, line 1
1import"./jsx-runtime-C5Zd082J.js";import{b as He,_ as Ze,R as Xe,s as et,d as tt}from"./i18nInstance-BGFcVfWK.js";import{_ as P}from"./preload-helper-BXl3LOEh.js";function je(n,e){this.v=n,this.k=e}function O(n,e,t,o){var s=Object.defineProperty;try{s({},"",{})}catch{s=0}O=function(a,i,l,u){function d(p,c){O(a,p,function(h){return this._invoke(p,c,h)})}i?s?s(a,i,{value:l,enumerable:!u,configurable:!u,writable:!u}):a[i]=l:(d("next",0),d("throw",1),d("return",2))},O(n,e,t,o)}function be(){var n,e,t=typeof Symbol=="function"?Symbol:{},o=t.iterator||"@@iterator",s=t.toStringTag||"@@toStringTag";function r(h,f,w,y){var R=f&&f.prototype instanceof i?f:i,A=Object.create(R.prototype);return O(A,"_invoke",(function(F,v,$){var x,g,S,q=0,B=$||[],T=!1,E={p:0,n:0,v:n,a:H,f:H.bind(n,4),d:function(k,M){return x=k,g=0,S=n,E.n=M,a}};function H(L,k){for(g=L,S=k,e=0;!T&&q&&!M&&e<B.length;e++){var M,C=B[e],I=E.p,_=C[2];L>3?(M=_===k)&&(S=C[(g=C[4])?5:(g=3,3)],C[4]=C[5]=n):C[0]<=I&&((M=L<2&&I<C[1])?(g=0,E.v=k,E.n=C[1]):I<_&&(M=L<3||C[0]>k||k>_)&&(C[4]=L,C[5]=k,E.n=_,g=0))}if(M||L>1)return a;throw T=!0,k}return function(L,k,M){if(q>1)throw TypeError("Generator is already running");for(T&&k===1&&H(k,M),g=k,S=M;(e=g<2?n:S)||!T;){x||(g?g<3?(g>1&&(E.n=-1),H(g,S)):E.n=S:E.v=S);try{if(q=2,x){if(g||(L="next"),e=x[L]){if(!(e=e.call(x,S)))throw TypeError("iterator result is not an object");if(!e.done)return e;S=e.value,g<2&&(g=0)}else g===1&&(e=x.return)&&e.call(x),g<2&&(S=TypeError("The iterator does not provide a '"+L+"' method"),g=1);x=n}else if((e=(T=E.n<0)?S:F.call(v,E))!==a)break}catch(C){x=n,g=1,S=C}finally{q=1}}return{value:e,done:T}}})(h,w,y),!0),A}var a={};function i(){}function l(){}function u(){}e=Object.getPrototypeOf;var d=[][o]?e(e([][o]())):(O(e={},o,function(){return this}),e),p=u.prototype=i.prototype=Object.create(d);function c(h){return Object.setPrototypeOf?Object.setPrototypeOf(h,u):(h.__proto__=u,O(h,s,"GeneratorFunction")),h.prototype=Object.create(p),h}return l.prototype=u,O(p,"constructor",u),O(u,"constructor",l),l.displayName="GeneratorFunction",O(u,s,"GeneratorFunction"),O(p),O(p,s,"Generator"),O(p,o,function(){return this}),O(p,"toString",function(){return"[object Generator]"}),(be=function(){return{w:r,m:c}})()}function ne(n,e){function t(s,r,a,i){try{var l=n[s](r),u=l.value;return u instanceof je?e.resolve(u.v).then(function(d){t("next",d,a,i)},function(d){t("throw",d,a,i)}):e.resolve(u).then(function(d){l.value=d,a(l)},function(d){return t("throw",d,a,i)})}catch(d){i(d)}}var o;this.next||(O(ne.prototype),O(ne.prototype,typeof Symbol=="function"&&Symbol.asyncIterator||"@asyncIterator",function(){return this})),O(this,"_invoke",function(s,r,a){function i(){return new e(function(l,u){t(s,a,l,u)})}return o=o?o.then(i,i):i()},!0)}function ze(n,e,t,o,s){return new ne(be().w(n,e,t,o),s||Promise)}function ot(n,e,t,o,s){var r=ze(n,e,t,o,s);return r.next().then(function(a){return a.done?a.value:r.next()})}function nt(n){var e=Object(n),t=[];for(var o in e)t.unshift(o);return function s(){for(;t.length;)if((o=t.pop())in e)return s.value=o,s.done=!1,s;return s.done=!0,s}}function xe(n){if(n!=null){var e=n[typeof Symbol=="function"&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if(typeof n.next=="function")return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(He(n)+" is not iterable")}function G(){var n=be(),e=n.m(G),t=(Object.getPrototypeOf?Object.getPrototypeOf(e):e.__proto__).constructor;function o(a){var i=typeof a=="function"&&a.constructor;return!!i&&(i===t||(i.displayName||i.name)==="GeneratorFunction")}var s={throw:1,return:2,break:3,continue:3};function r(a){var i,l;return function(u){i||(i={stop:function(){return l(u.a,2)},catch:function(){return u.v},abrupt:function(p,c){return l(u.a,s[p],c)},delegateYield:function(p,c,h){return i.resultName=c,l(u.d,xe(p),h)},finish:function(p){return l(u.f,p)}},l=function(p,c,h){u.p=i.prev,u.n=i.next;try{return p(c,h)}finally{i.next=u.n}}),i.resultName&&(i[i.resultName]=u.v,i.resultName=void 0),i.sent=u.v,i.next=u.n;try{return a.call(this,i)}finally{u.p=i.prev,u.n=i.next}}}return(G=function(){return{wrap:function(l,u,d,p){return n.w(r(l),u,d,p&&p.reverse())},isGeneratorFunction:o,mark:n.m,awrap:function(l,u){return new je(l,u)},AsyncIterator:ne,async:function(l,u,d,p,c){return(o(u)?ze:ot)(r(l),u,d,p,c)},keys:nt,values:xe}})()}function ke(n,e,t,o,s,r,a){try{var i=n[r](a),l=i.value}catch(u){return void t(u)}i.done?e(l):Promise.resolve(l).then(o,s)}function Ve(n){return function(){var e=this,t=arguments;return new Promise(function(o,s){var r=n.apply(e,t);function a(l){ke(r,o,s,a,i,"next",l)}
1function i(l){ke(r,o,s,a,i,"throw",l)}a(void 0)})}}var X=Ze({},Xe),st=X.version,de=X.render,rt=X.unmountComponentAtNode,ue;try{var at=Number((st||"").split(".")[0]);at>=18&&(ue=X.createRoot)}catch{}function Ae(n){var e=X.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;e&&He(e)==="object"&&(e.usingClientEntryPoint=n)}var se="__rc_react_root__";function it(n,e){Ae(!0);var t=e[se]||ue(e);Ae(!1),t.render(n),e[se]=t}function lt(n,e){de?.(n,e)}function ut(n,e){if(ue){it(n,e);return}lt(n,e)}function ct(n){return fe.apply(this,arguments)}function fe(){return fe=Ve(G().mark(function n(e){return G().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:return o.abrupt("return",Promise.resolve().then(function(){var s;(s=e[se])===null||s===void 0||s.unmount(),delete e[se]}));case 1:case"end":return o.stop()}},n)})),fe.apply(this,arguments)}function dt(n){rt(n)}function pt(n){return ge.apply(this,arguments)}function ge(){return ge=Ve(G().mark(function n(e){return G().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(ue===void 0){o.next=2;break}return o.abrupt("return",ct(e));case 2:dt(e);case 3:case"end":return o.stop()}},n)})),ge.apply(this,arguments)}const ht=(n,e)=>(ut(n,e),()=>pt(e));let Se=ht;function ui(n){return n&&(Se=n),Se}const mt={type:"3rdParty",init(n){et(n.options.react),tt(n)}},m=n=>typeof n=="string",J=()=>{let n,e;const t=new Promise((o,s)=>{n=o,e=s});return t.resolve=n,t.reject=e,t},Le=n=>n==null?"":""+n,ft=(n,e,t)=>{n.forEach(o=>{e[o]&&(t[o]=e[o])})},gt=/###/g,Ie=n=>n&&n.indexOf("###")>-1?n.replace(gt,"."):n,Ce=n=>!n||m(n),Y=(n,e,t)=>{const o=m(e)?e.split("."):e;let s=0;for(;s<o.length-1;){if(Ce(n))return{};const r=Ie(o[s]);!n[r]&&t&&(n[r]=new t),Object.prototype.hasOwnProperty.call(n,r)?n=n[r]:n={},++s}return Ce(n)?{}:{obj:n,k:Ie(o[s])}},Pe=(n,e,t)=>{const{obj:o,k:s}=Y(n,e,Object);if(o!==void 0||e.length===1){o[s]=t;return}let r=e[e.length-1],a=e.slice(0,e.length-1),i=Y(n,a,Object);for(;i.obj===void 0&&a.length;)r=`${a[a.length-1]}.${r}`,a=a.slice(0,a.length-1),i=Y(n,a,Object),i&&i.obj&&typeof i.obj[`${i.k}.${r}`]<"u"&&(i.obj=void 0);i.obj[`${i.k}.${r}`]=t},yt=(n,e,t,o)=>{const{obj:s,k:r}=Y(n,e,Object);s[r]=s[r]||[],s[r].push(t)},re=(n,e)=>{const{obj:t,k:o}=Y(n,e);if(t)return t[o]},bt=(n,e,t)=>{const o=re(n,t);return o!==void 0?o:re(e,t)},Ke=(n,e,t)=>{for(const o in e)o!=="__proto__"&&o!=="constructor"&&(o in n?m(n[o])||n[o]instanceof String||m(e[o])||e[o]instanceof String?t&&(n[o]=e[o]):Ke(n[o],e[o],t):n[o]=e[o]);return n},j=n=>n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var wt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const vt=n=>m(n)?n.replace(/[&<>"'\/]/g,e=>wt[e]):n;class xt{constructor(e){this.capacity=e,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(e){const t=this.regExpMap.get(e);if(t!==void 0)return t;const o=new RegExp(e);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(e,o),this.regExpQueue.push(e),o}}const kt=[" ",",","?","!",";"],At=new xt(20),St=(n,e,t)=>{e=e||"",t=t||"";const o=kt.filter(a=>e.indexOf(a)<0&&t.indexOf(a)<0);if(o.length===0)return!0;const s=At.getRegExp(`(${o.map(a=>a==="?"?"\\?":a).join("|")})`);let r=!s.test(n);if(!r){const a=n.indexOf(t);a>0&&!s.test(n.substring(0,a))&&(r=!0)}return r},ye=function(n,e){let t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:".";if(!n)return;if(n[e])return n[e];const o=e.split(t);let s=n;for(let r=0;r<o.length;){if(!s||typeof s!="object")return;let a,i="";for(let l=r;l<o.length;++l)if(l!==r&&(i+=t),i+=o[l],a=s[i],a!==void 0){if(["string","number","boolean"].indexOf(typeof a)>-1&&l<o.length-1)continue;r+=l-r+1;break}s=a}return s},ae=n=>n&&n.replace("_","-"),Lt={type:"logger",log(n){this.output("log",n)},warn(n){this.output("warn",n)},error(n){this.output("error",n)},output(n,e){console&&console[n]&&console[n].apply(console,e)}};class ie{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.init(e,t)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||Lt,this.options=t,this.debug=t.debug}log(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return this.forward(t,"log","",!0)}warn(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return this.forward(t,"warn","",!0)}error(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return this.forward(t,"error","")}deprecate(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return this.forward(t,"warn","WARNING DEPRECATED: ",!0)}forward(e,t,o,s){return s&&!this.debug?null:(m(e[0])&&(e[0]=`${o}${this.prefix} ${e[0]}`),this.logger[t](e))}create(e){return new ie(this.logger,{prefix:`${this.prefix}:${e}:`,...this.options})}clone(e){return e=e||this.options,e.prefix=e.prefix||this.prefix,new ie(this.logger,e)}}var N=new ie;class ce{constructor(){this.observers={}}on(e,t){return e.split(" ").forEach(o=>
vendor: 3,393 bytes, line 1
1{this.observers[o]||(this.observers[o]=new Map);const s=this.observers[o].get(t)||0;this.observers[o].set(t,s+1)}),this}off(e,t){if(this.observers[e]){if(!t){delete this.observers[e];return}this.observers[e].delete(t)}}emit(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),s=1;s<t;s++)o[s-1]=arguments[s];this.observers[e]&&Array.from(this.observers[e].entries()).forEach(a=>{let[i,l]=a;for(let u=0;u<l;u++)i(...o)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(a=>{let[i,l]=a;for(let u=0;u<l;u++)i.apply(i,[e,...o])})}}class Oe extends ce{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{ns:["translation"],defaultNS:"translation"};super(),this.data=e||{},this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}removeNamespaces(e){const t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}getResource(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const r=s.keySeparator!==void 0?s.keySeparator:this.options.keySeparator,a=s.ignoreJSONStructure!==void 0?s.ignoreJSONStructure:this.options.ignoreJSONStructure;let i;e.indexOf(".")>-1?i=e.split("."):(i=[e,t],o&&(Array.isArray(o)?i.push(...o):m(o)&&r?i.push(...o.split(r)):i.push(o)));const l=re(this.data,i);return!l&&!t&&!o&&e.indexOf(".")>-1&&(e=i[0],t=i[1],o=i.slice(2).join(".")),l||!a||!m(o)?l:ye(this.data&&this.data[e]&&this.data[e][t],o,r)}addResource(e,t,o,s){let r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{silent:!1};const a=r.keySeparator!==void 0?r.keySeparator:this.options.keySeparator;let i=[e,t];o&&(i=i.concat(a?o.split(a):o)),e.indexOf(".")>-1&&(i=e.split("."),s=t,t=i[1]),this.addNamespaces(t),Pe(this.data,i,s),r.silent||this.emit("added",e,t,o,s)}addResources(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{silent:!1};for(const r in o)(m(o[r])||Array.isArray(o[r]))&&this.addResource(e,t,r,o[r],{silent:!0});s.silent||this.emit("added",e,t,o)}addResourceBundle(e,t,o,s,r){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{silent:!1,skipCopy:!1},i=[e,t];e.indexOf(".")>-1&&(i=e.split("."),s=o,o=t,t=i[1]),this.addNamespaces(t);let l=re(this.data,i)||{};a.skipCopy||(o=JSON.parse(JSON.stringify(o))),s?Ke(l,o,r):l={...l,...o},Pe(this.data,i,l),a.silent||this.emit("added",e,t,o)}removeResourceBundle(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}hasResourceBundle(e,t){return this.getResource(e,t)!==void 0}getResourceBundle(e,t){return t||(t=this.options.defaultNS),this.options.compatibilityAPI==="v1"?{...this.getResource(e,t)}:this.getResource(e,t)}getDataByLanguage(e){return this.data[e]}hasLanguageSomeTranslations(e){const t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find(s=>t[s]&&Object.keys(t[s]).length>0)}toJSON(){return this.data}}var Ge={processors:{},addPostProcessor(n){this.processors[n.name]=n},handle(n,e,t,o,s){return n.forEach(r=>{this.processors[r]&&(e=this.processors[r].process(e,t,o,s))}),e}};const Re={};class le extends ce{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),ft(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","
1i18nFormat","utils"],e,this),this.options=t,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=N.create("translator")}changeLanguage(e){e&&(this.language=e)}exists(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};if(e==null)return!1;const o=this.resolve(e,t);return o&&o.res!==void 0}extractFromKey(e,t){let o=t.nsSeparator!==void 0?t.nsSeparator:this.options.nsSeparator;o===void 0&&(o=":");const s=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator;let r=t.ns||this.options.defaultNS||[];const a=o&&e.indexOf(o)>-1,i=!this.options.userDefinedKeySeparator&&!t.keySeparator&&!this.options.userDefinedNsSeparator&&!t.nsSeparator&&!St(e,o,s);if(a&&!i){const l=e.match(this.interpolator.nestingRegexp);if(l&&l.length>0)return{key:e,namespaces:m(r)?[r]:r};const u=e.split(o);(o!==s||o===s&&this.options.ns.indexOf(u[0])>-1)&&(r=u.shift()),e=u.join(s)}return{key:e,namespaces:m(r)?[r]:r}}translate(e,t,o){if(typeof t!="object"&&this.options.overloadTranslationOptionHandler&&(t=this.options.overloadTranslationOptionHandler(arguments)),typeof t=="object"&&(t={...t}),t||(t={}),e==null)return"";Array.isArray(e)||(e=[String(e)]);const s=t.returnDetails!==void 0?t.returnDetails:this.options.returnDetails,r=t.keySeparator!==void 0?t.keySeparator:this.options.keySeparator,{key:a,namespaces:i}=this.extractFromKey(e[e.length-1],t),l=i[i.length-1],u=t.lng||this.language,d=t.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(u&&u.toLowerCase()==="cimode"){if(d){const v=t.nsSeparator||this.options.nsSeparator;return s?{res:`${l}${v}${a}`,usedKey:a,exactUsedKey:a,usedLng:u,usedNS:l,usedParams:this.getUsedParamsDetails(t)}:`${l}${v}${a}`}return s?{res:a,usedKey:a,exactUsedKey:a,usedLng:u,usedNS:l,usedParams:this.getUsedParamsDetails(t)}:a}const p=this.resolve(e,t);let c=p&&p.res;const h=p&&p.usedKey||a,f=p&&p.exactUsedKey||a,w=Object.prototype.toString.apply(c),y=["[object Number]","[object Function]","[object RegExp]"],R=t.joinArrays!==void 0?t.joinArrays:this.options.joinArrays,A=!this.i18nFormat||this.i18nFormat.handleAsObject,F=!m(c)&&typeof c!="boolean"&&typeof c!="number";if(A&&c&&F&&y.indexOf(w)<0&&!(m(R)&&Array.isArray(c))){if(!t.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const v=this.options.returnedObjectHandler?this.options.returnedObjectHandler(h,c,{...t,ns:i}):`key '${a} (${this.language})' returned an object instead of string.`;return s?(p.res=v,p.usedParams=this.getUsedParamsDetails(t),p):v}if(r){const v=Array.isArray(c),$=v?[]:{},x=v?f:h;for(const g in c)if(Object.prototype.hasOwnProperty.call(c,g)){const S=`${x}${r}${g}`;$[g]=this.translate(S,{...t,joinArrays:!1,ns:i}),$[g]===S&&($[g]=c[g])}c=$}}else if(A&&m(R)&&Array.isArray(c))c=c.join(R),c&&(c=this.extendTranslation(c,e,t,o));else{let v=!1,$=!1;const x=t.count!==void 0&&!m(t.count),g=le.hasDefaultValue(t),S=x?this.pluralResolver.getSuffix(u,t.count,t):"",q=t.ordinal&&x?this.pluralResolver.getSuffix(u,t.count,{ordinal:!1}):"",B=x&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),T=B&&t[`defaultValue${this.options.pluralSeparator}zero`]||t[`defaultValue${S}`]||t[`defaultValue${q}`]||t.defaultValue;!this.isValidLookup(c)&&g&&(v=!0,c=T),this.isValidLookup(c)||($=!0,c=a);const H=(t.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&$?void 0:c,L=g&&T!==c&&this.options.updateMissing;if($||v||L){if(this.logger.log(L?"updateKey":"missingKey",u,l,a,L?T:c),r){const I=this.resolve(a,{...t,keySeparator:!1});I&&I.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let k=[];const M=this.languageUtils.getFallbackCodes(this.options.fallbackLng,t.lng||this.language);if(this.options.saveMissingTo==="fallback"&&M&&M[0])for(let I=0;I<M.length;I++)k.push(M[I]);else this.options.saveMissingTo==="all"?k=this.languageUtils.toResolveHierarchy(t.lng||this.language):k.push(t.lng||this.language);const C=(I,_,W)=>{const ve=g&&W!==c?W:H;this.options.missingKeyHandler?this.options.missingKeyHandler(I,l,_,ve,L,t):this.backendConnector&&this.backendConnector.saveMissing&&this.backendConnector.saveMissing(I,l,_,ve,L,t),this.emit
vendor: 8,690 bytes, line 1
1("missingKey",I,l,_,c)};this.options.saveMissing&&(this.options.saveMissingPlurals&&x?k.forEach(I=>{const _=this.pluralResolver.getSuffixes(I,t);B&&t[`defaultValue${this.options.pluralSeparator}zero`]&&_.indexOf(`${this.options.pluralSeparator}zero`)<0&&_.push(`${this.options.pluralSeparator}zero`),_.forEach(W=>{C([I],a+W,t[`defaultValue${W}`]||T)})}):C(k,a,T))}c=this.extendTranslation(c,e,t,p,o),$&&c===a&&this.options.appendNamespaceToMissingKey&&(c=`${l}:${a}`),($||v)&&this.options.parseMissingKeyHandler&&(this.options.compatibilityAPI!=="v1"?c=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${l}:${a}`:a,v?c:void 0):c=this.options.parseMissingKeyHandler(c))}return s?(p.res=c,p.usedParams=this.getUsedParamsDetails(t),p):c}extendTranslation(e,t,o,s,r){var a=this;if(this.i18nFormat&&this.i18nFormat.parse)e=this.i18nFormat.parse(e,{...this.options.interpolation.defaultVariables,...o},o.lng||this.language||s.usedLng,s.usedNS,s.usedKey,{resolved:s});else if(!o.skipInterpolation){o.interpolation&&this.interpolator.init({...o,interpolation:{...this.options.interpolation,...o.interpolation}});const u=m(e)&&(o&&o.interpolation&&o.interpolation.skipOnVariables!==void 0?o.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let d;if(u){const c=e.match(this.interpolator.nestingRegexp);d=c&&c.length}let p=o.replace&&!m(o.replace)?o.replace:o;if(this.options.interpolation.defaultVariables&&(p={...this.options.interpolation.defaultVariables,...p}),e=this.interpolator.interpolate(e,p,o.lng||this.language||s.usedLng,o),u){const c=e.match(this.interpolator.nestingRegexp),h=c&&c.length;d<h&&(o.nest=!1)}!o.lng&&this.options.compatibilityAPI!=="v1"&&s&&s.res&&(o.lng=this.language||s.usedLng),o.nest!==!1&&(e=this.interpolator.nest(e,function(){for(var c=arguments.length,h=new Array(c),f=0;f<c;f++)h[f]=arguments[f];return r&&r[0]===h[0]&&!o.context?(a.logger.warn(`It seems you are nesting recursively key: ${h[0]} in key: ${t[0]}`),null):a.translate(...h,t)},o)),o.interpolation&&this.interpolator.reset()}const i=o.postProcess||this.options.postProcess,l=m(i)?[i]:i;return e!=null&&l&&l.length&&o.applyPostProcessor!==!1&&(e=Ge.handle(l,e,t,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...s,usedParams:this.getUsedParamsDetails(o)},...o}:o,this)),e}resolve(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o,s,r,a,i;return m(e)&&(e=[e]),e.forEach(l=>{if(this.isValidLookup(o))return;const u=this.extractFromKey(l,t),d=u.key;s=d;let p=u.namespaces;this.options.fallbackNS&&(p=p.concat(this.options.fallbackNS));const c=t.count!==void 0&&!m(t.count),h=c&&!t.ordinal&&t.count===0&&this.pluralResolver.shouldUseIntlApi(),f=t.context!==void 0&&(m(t.context)||typeof t.context=="number")&&t.context!=="",w=t.lngs?t.lngs:this.languageUtils.toResolveHierarchy(t.lng||this.language,t.fallbackLng);p.forEach(y=>{this.isValidLookup(o)||(i=y,!Re[`${w[0]}-${y}`]&&this.utils&&this.utils.hasLoadedNamespace&&!this.utils.hasLoadedNamespace(i)&&(Re[`${w[0]}-${y}`]=!0,this.logger.warn(`key "${s}" for languages "${w.join(", ")}" won't get resolved as namespace "${i}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),w.forEach(R=>{if(this.isValidLookup(o))return;a=R;const A=[d];if(this.i18nFormat&&this.i18nFormat.addLookupKeys)this.i18nFormat.addLookupKeys(A,d,R,y,t);else{let v;c&&(v=this.pluralResolver.getSuffix(R,t.count,t));const $=`${this.options.pluralSeparator}zero`,x=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(c&&(A.push(d+v),t.ordinal&&v.indexOf(x)===0&&A.push(d+v.replace(x,this.options.pluralSeparator)),h&&A.push(d+$)),f){const g=`${d}${this.options.contextSeparator}${t.context}`;A.push(g),c&&(A.push(g+v),t.ordinal&&v.indexOf(x)===0&&A.push(g+v.replace(x,this.options.pluralSeparator)),h&&A.push(g+$))}}let F;for(;F=A.pop();)this.isValidLookup(o)||(r=F,o=this.getResource(R,y,F,t))}))})}),{res:o,usedKey:s,exactUsedKey:r,usedLng:a,usedNS:i}}isValidLookup(e){return e!==void 0&&!(!this.options.returnNull&&e===null)&&!(!this.options.returnEmptyString&&e==="")}getResource(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,o,s):this.resourceStore.getResource(e,t,o,s)}getUsedParamsDetails(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const t=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],o=e.replace&&!m(e.replace);let s=o?e.replace:e;if(o&&typeof e.count<"u"&&(s.count=e.count),this.options.interpolation.defaultVariables&&(s={...this.options.interpolation.defaultVariables,...s}),!o){s={...s};for(const r of t)delete s[r]}return s}static hasDefaultValue(e){const t="defaultValue";for(const o in e)if(Object.prototype.hasOwnProperty.call(e,o)&&t===o.substring(0,t.length)&&e[o]!==void 0)return!0;return!1}}const pe=n=>n.charAt(0).toUpperCase()+n.slice(1);class $e{constructor(e){this.options=e,this.supportedLngs=this.options.supportedLngs||!1,this.logger=N.create("languageUtils")}getScriptPartFromCode(e){if(e=ae(e),!e||e.indexOf("-")<0)return null;const t=e.split("-");return t.length===2||(t.pop(),t[t.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(t.join("-"))}getLanguagePartFromCode(e){if(e=ae(e),!e||e.indexOf("-")<0)return e;const t=e.split("-");return this.formatLanguageCode(t[0])}formatLanguageCode(e){if(m(e)&&e.indexOf("-")>-1){if(typeof Intl<"u"&&typeof Intl.getCanonicalLocales<"u")try{let s=Intl.getCanonicalLocales(e)[0];if(s&&this.options.lowerCaseLng&&(s=s.toLowerCase()),s)return s}catch{}const t=["hans","hant","latn","cyrl","cans","mong","arab"];let o=e.split("-");return this.options.lowerCaseLng?o=o.map(s=>s.toLowerCase()):o.length===2?(o[0]=o[0].toLowerCase(),o[1]=o[1].toUpperCase(),t.indexOf(o[1].toLowerCase())>-1&&(o[1]=pe(o[1].toLowerCase()))):o.length===3&&(o[0]=o[0].toLowerCase(),o[1].length===2&&(o[1]=o[1].toUpperCase()),o[0]!=="sgn"&&o[2].length===2&&(o[2]=o[2].toUpperCase()),t.indexOf(o[1].toLowerCase())>-1&&(o[1]=pe(o[1].toLowerCase())),t.indexOf(o[2].toLowerCase())>-1&&(o[2]=pe(o[2].toLowerCase()))),o.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}isSupportedCode(e){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}getBestMatchFromCodes(e){if(!e)return null;let t;return e.forEach(o=>{if(t)return;const s=this.formatLanguageCode(o);(!this.options.supportedLngs||this.isSupportedCode(s))&&(t=s)}),!t&&this.options.supportedLngs&&e.forEach(o=>{if(t)return;const s=this.getLanguagePartFromCode(o);if(this.isSupportedCode(s))return t=s;t=this.options.supportedLngs.find(r=>{if(r===s)return r;if(!(r.indexOf("-")<0&&s.indexOf("-")<0)&&(r.indexOf("-")>0&&s.indexOf("-")<0&&r.substring(0,r.indexOf("-"))===s||r.indexOf(s)===0&&s.length>1))return r})}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t}getFallbackCodes(e,t){if(!e)return[];if(typeof e=="function"&&(e=e(t)),m(e)&&(e=[e]),Array.isArray(e))return e;if(!t)return e.default||[];let o=e[t];return o||(o=e[this.getScriptPartFromCode(t)]),o||(o=e[this.formatLanguageCode(t)]),o||(o=e[this.getLanguagePartFromCode(t)]),o||(o=e.default),o||[]}toResolveHierarchy(e,t){const o=this.getFallbackCodes(t||this.options.fallbackLng||[],e),s=[],r=a=>{a&&(this.isSupportedCode(a)?s.push(a):this.logger.warn(`rejecting language code not found in supportedLngs: ${a}`))};return m(e)&&(e.indexOf("-")>-1||e.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&r(this.formatLanguageCode(e)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&r(this.getScriptPartFromCode(e)),this.options.load!=="currentOnly"&&r(this.getLanguagePartFromCode(e))):m(e)&&r(this.formatLanguageCode(e)),o.forEach(a=>{s.indexOf(a)<0&&r(this.formatLanguageCode(a))}),s}}let It=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","
1sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],Ct={1:n=>+(n>1),2:n=>+(n!=1),3:n=>0,4:n=>n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,5:n=>n==0?0:n==1?1:n==2?2:n%100>=3&&n%100<=10?3:n%100>=11?4:5,6:n=>n==1?0:n>=2&&n<=4?1:2,7:n=>n==1?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2,8:n=>n==1?0:n==2?1:n!=8&&n!=11?2:3,9:n=>+(n>=2),10:n=>n==1?0:n==2?1:n<7?2:n<11?3:4,11:n=>n==1||n==11?0:n==2||n==12?1:n>2&&n<20?2:3,12:n=>+(n%10!=1||n%100==11),13:n=>+(n!==0),14:n=>n==1?0:n==2?1:n==3?2:3,15:n=>n%10==1&&n%100!=11?0:n%10>=2&&(n%100<10||n%100>=20)?1:2,16:n=>n%10==1&&n%100!=11?0:n!==0?1:2,17:n=>n==1||n%10==1&&n%100!=11?0:1,18:n=>n==0?0:n==1?1:2,19:n=>n==1?0:n==0||n%100>1&&n%100<11?1:n%100>10&&n%100<20?2:3,20:n=>n==1?0:n==0||n%100>0&&n%100<20?1:2,21:n=>n%100==1?1:n%100==2?2:n%100==3||n%100==4?3:0,22:n=>n==1?0:n==2?1:(n<0||n>10)&&n%10==0?2:3};const Pt=["v1","v2","v3"],Ot=["v4"],Me={zero:0,one:1,two:2,few:3,many:4,other:5},Rt=()=>{const n={};return It.forEach(e=>{e.lngs.forEach(t=>{n[t]={numbers:e.nr,plurals:Ct[e.fc]}})}),n};class $t{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.languageUtils=e,this.options=t,this.logger=N.create("pluralResolver"),(!this.options.compatibilityJSON||Ot.includes(this.options.compatibilityJSON))&&(typeof Intl>"u"||!Intl.PluralRules)&&(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=Rt(),this.pluralRulesCache={}}addRule(e,t){this.rules[e]=t}clearCache(){this.pluralRulesCache={}}getRule(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(this.shouldUseIntlApi()){const o=ae(e==="dev"?"en":e),s=t.ordinal?"ordinal":"cardinal",r=JSON.stringify({cleanedCode:o,type:s});if(r in this.pluralRulesCache)return this.pluralRulesCache[r];let a;try{a=new Intl.PluralRules(o,{type:s})}catch{if(!e.match(/-|_/))return;const l=this.languageUtils.getLanguagePartFromCode(e);a=this.getRule(l,t)}return this.pluralRulesCache[r]=a,a}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}needsPlural(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const o=this.getRule(e,t);return this.shouldUseIntlApi()?o&&o.resolvedOptions().pluralCategories.length>1:o&&o.numbers.length>1}getPluralFormsOfKey(e,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.getSuffixes(e,o).map(s=>`${t}${s}`)}getSuffixes(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const o=this.getRule(e,t);return o?this.shouldUseIntlApi()?o.resolvedOptions().pluralCategories.sort((s,r)=>Me[s]-Me[r]).map(s=>`${this.options.prepend}${t.ordinal?`ordinal${this.options.prepend}`:""}${s}`):o.numbers.map(s=>this.getSuffix(e,s,t)):[]}getSuffix(e,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const s=this.getRule(e,o);return s?this.shouldUseIntlApi()?`${this.options.prepend}${o.ordinal?`ordinal${this.options.prepend}`:""}${s.select(t)}`:this.getSuffixRetroCompatible(s,t):(this.logger.warn(`no plural rule found for: ${e}`),"")}getSuffixRetroCompatible(e,t){const o=e.noAbs?e.plurals(t):e.plurals(Math.abs(t));let s=e.numbers[o];this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[
vendor: 24,377 bytes, line 1
10]===1&&(s===2?s="plural":s===1&&(s=""));const r=()=>this.options.prepend&&s.toString()?this.options.prepend+s.toString():s.toString();return this.options.compatibilityJSON==="v1"?s===1?"":typeof s=="number"?`_plural_${s.toString()}`:r():this.options.compatibilityJSON==="v2"||this.options.simplifyPluralSuffix&&e.numbers.length===2&&e.numbers[0]===1?r():this.options.prepend&&o.toString()?this.options.prepend+o.toString():o.toString()}shouldUseIntlApi(){return!Pt.includes(this.options.compatibilityJSON)}}const Te=function(n,e,t){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:".",s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,r=bt(n,e,t);return!r&&s&&m(t)&&(r=ye(n,t,o),r===void 0&&(r=ye(e,t,o))),r},he=n=>n.replace(/\$/g,"$$$$");class Mt{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=N.create("interpolator"),this.options=e,this.format=e.interpolation&&e.interpolation.format||(t=>t),this.init(e)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});const{escape:t,escapeValue:o,useRawValueToEscape:s,prefix:r,prefixEscaped:a,suffix:i,suffixEscaped:l,formatSeparator:u,unescapeSuffix:d,unescapePrefix:p,nestingPrefix:c,nestingPrefixEscaped:h,nestingSuffix:f,nestingSuffixEscaped:w,nestingOptionsSeparator:y,maxReplaces:R,alwaysFormat:A}=e.interpolation;this.escape=t!==void 0?t:vt,this.escapeValue=o!==void 0?o:!0,this.useRawValueToEscape=s!==void 0?s:!1,this.prefix=r?j(r):a||"{{",this.suffix=i?j(i):l||"}}",this.formatSeparator=u||",",this.unescapePrefix=d?"":p||"-",this.unescapeSuffix=this.unescapePrefix?"":d||"",this.nestingPrefix=c?j(c):h||j("$t("),this.nestingSuffix=f?j(f):w||j(")"),this.nestingOptionsSeparator=y||",",this.maxReplaces=R||1e3,this.alwaysFormat=A!==void 0?A:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const e=(t,o)=>t&&t.source===o?(t.lastIndex=0,t):new RegExp(o,"g");this.regexp=e(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=e(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=e(this.nestingRegexp,`${this.nestingPrefix}(.+?)${this.nestingSuffix}`)}interpolate(e,t,o,s){let r,a,i;const l=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},u=h=>{if(h.indexOf(this.formatSeparator)<0){const R=Te(t,l,h,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(R,void 0,o,{...s,...t,interpolationkey:h}):R}const f=h.split(this.formatSeparator),w=f.shift().trim(),y=f.join(this.formatSeparator).trim();return this.format(Te(t,l,w,this.options.keySeparator,this.options.ignoreJSONStructure),y,o,{...s,...t,interpolationkey:w})};this.resetRegExp();const d=s&&s.missingInterpolationHandler||this.options.missingInterpolationHandler,p=s&&s.interpolation&&s.interpolation.skipOnVariables!==void 0?s.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:h=>he(h)},{regex:this.regexp,safeValue:h=>this.escapeValue?he(this.escape(h)):he(h)}].forEach(h=>{for(i=0;r=h.regex.exec(e);){const f=r[1].trim();if(a=u(f),a===void 0)if(typeof d=="function"){const y=d(e,r,s);a=m(y)?y:""}else if(s&&Object.prototype.hasOwnProperty.call(s,f))a="";else if(p){a=r[0];continue}else this.logger.warn(`missed to pass in variable ${f} for interpolating ${e}`),a="";else!m(a)&&!this.useRawValueToEscape&&(a=Le(a));const w=h.safeValue(a);if(e=e.replace(r[0],w),p?(h.regex.lastIndex+=a.length,h.regex.lastIndex-=r[0].length):h.regex.lastIndex=0,i++,i>=this.maxReplaces)break}}),e}nest(e,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},s,r,a;const i=(l,u)=>{const d=this.nestingOptionsSeparator;if(l.indexOf(d)<0)return l;const p=l.split(new RegExp(`${d}[ ]*{`));let c=`{${p[1]}`;l=p[0],c=this.interpolate(c,a);const h=c.match(/'/g),f=c.match(/"/g);(h&&h.length%2===0&&!f||f.length%2!==0)&&(c=c.replace(/'/g,'"'));try{a=JSON.parse(c),u&&(a={...u,...a})}catch(w){return this.logger.warn(`failed parsing options string in nesting for key ${l}`,w),`${l}${d}${c}`}return a.defaultValue&&a.defaultValue.indexOf(this.prefix)>-1&&delete a.defaultValue,l};for(;s=this.nestingRegexp.exec(e);){let l=[];a={...o},a=a.replace&&!m(a.replace)?a.replace:a,a.applyPostProcessor=!1,delete a.defaultValue;let u=!1;if(s[0].indexOf(this.formatSeparator)!==-1&&!/{.*}/.test(s[1])){const d=s[1].split(this.formatSeparator).map(p=>p.trim());s[1]=d.shift(),l=d,u=!0}if(r=t(i.call(this,s[1].trim(),a),a),r&&s[0]===e&&!m(r))return r;m(r)||(r=Le(r)),r||(this.logger.warn(`missed to resolve ${s[1]} for nesting ${e}`),r=""),u&&(r=l.reduce((d,p)=>this.format(d,p,o.lng,{...o,interpolationkey:s[1].trim()}),r.trim())),e=e.replace(s[0],r),this.regexp.lastIndex=0}return e}}const Tt=n=>{let e=n.toLowerCase().trim();const t={};if(n.indexOf("(")>-1){const o=n.split("(");e=o[0].toLowerCase().trim();const s=o[1].substring(0,o[1].length-1);e==="currency"&&s.indexOf(":")<0?t.currency||(t.currency=s.trim()):e==="relativetime"&&s.indexOf(":")<0?t.range||(t.range=s.trim()):s.split(";").forEach(a=>{if(a){const[i,...l]=a.split(":"),u=l.join(":").trim().replace(/^'+|'+$/g,""),d=i.trim();t[d]||(t[d]=u),u==="false"&&(t[d]=!1),u==="true"&&(t[d]=!0),isNaN(u)||(t[d]=parseInt(u,10))}})}return{formatName:e,formatOptions:t}},z=n=>{const e={};return(t,o,s)=>{let r=s;s&&s.interpolationkey&&s.formatParams&&s.formatParams[s.interpolationkey]&&s[s.interpolationkey]&&(r={...r,[s.interpolationkey]:void 0});const a=o+JSON.stringify(r);let i=e[a];return i||(i=n(ae(o),s),e[a]=i),i(t)}};class _t{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger=N.create("formatter"),this.options=e,this.formats={number:z((t,o)=>{const s=new Intl.NumberFormat(t,{...o});return r=>s.format(r)}),currency:z((t,o)=>{const s=new Intl.NumberFormat(t,{...o,style:"currency"});return r=>s.format(r)}),datetime:z((t,o)=>{const s=new Intl.DateTimeFormat(t,{...o});return r=>s.format(r)}),relativetime:z((t,o)=>{const s=new Intl.RelativeTimeFormat(t,{...o});return r=>s.format(r,o.range||"day")}),list:z((t,o)=>{const s=new Intl.ListFormat(t,{...o});return r=>s.format(r)})},this.init(e)}init(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{interpolation:{}};this.formatSeparator=t.interpolation.formatSeparator||","}add(e,t){this.formats[e.toLowerCase().trim()]=t}addCached(e,t){this.formats[e.toLowerCase().trim()]=z(t)}format(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};const r=t.split(this.formatSeparator);if(r.length>1&&r[0].indexOf("(")>1&&r[0].indexOf(")")<0&&r.find(i=>i.indexOf(")")>-1)){const i=r.findIndex(l=>l.indexOf(")")>-1);r[0]=[r[0],...r.splice(1,i)].join(this.formatSeparator)}return r.reduce((i,l)=>{const{formatName:u,formatOptions:d}=Tt(l);if(this.formats[u]){let p=i;try{const c=s&&s.formatParams&&s.formatParams[s.interpolationkey]||{},h=c.locale||c.lng||s.locale||s.lng||o;p=this.formats[u](i,h,{...d,...s,...c})}catch(c){this.logger.warn(c)}return p}else this.logger.warn(`there was no format function for ${u}`);return i},e)}}const Et=(n,e)=>{n.pending[e]!==void 0&&(delete n.pending[e],n.pendingCount--)};class Nt extends ce{constructor(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};super(),this.backend=e,this.store=t,this.services=o,this.languageUtils=o.languageUtils,this.options=s,this.logger=N.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=s.maxParallelReads||10,this.readingCalls=0,this.maxRetries=s.maxRetries>=0?s.maxRetries:5,this.retryTimeout=s.retryTimeout>=1?s.retryTimeout:350,this.state={},this.queue=[],this.backend&&this.backend.init&&this.backend.init(o,s.backend,s)}queueLoad(e,t,o,s){const r={},a={},i={},l={};return e.forEach(u=>{let d=!0;t.forEach(p=>{const c=`${u}|${p}`;!o.reload&&this.store.hasResourceBundle(u,p)?this.state[c]=2:this.state[c]<0||(this.state[c]===1?a[c]===void 0&&(a[c]=!0):(this.state[c]=1,d=!1,a[c]===void 0&&(a[c]=!0),r[c]===void 0&&(r[c]=!0),l[p]===void 0&&(l[p]=!0)))}),d||(i[u]=!0)}),(Object.keys(r).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:s}),{toLoad:Object.keys(r),pending:Object.keys(a),toLoadLanguages:Object.keys(i),toLoadNamespaces:Object.keys(l)}}loaded(e,t,o){const s=e.split("|"),r=s[0],a=s[1];t&&this.emit("failedLoading",r,a,t),!t&&o&&this.store.addResourceBundle(r,a,o,void 0,void 0,{skipCopy:!0}),this.state[e]=t?-1:2,t&&o&&(this.state[e]=0);const i={};this.queue.forEach(l=>{yt(l.loaded,[r],a),Et(l,e),t&&l.errors.push(t),l.pendingCount===0&&!l.done&&(Object.keys(l.loaded).forEach(u=>{i[u]||(i[u]={});const d=l.loaded[u];d.length&&d.forEach(p=>{i[u][p]===void 0&&(i[u][p]=!0)})}),l.done=!0,l.errors.length?l.callback(l.errors):l.callback())}),this.emit("loaded",i),this.queue=this.queue.filter(l=>!l.done)}read(e,t,o){let s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:this.retryTimeout,a=arguments.length>5?arguments[5]:void 0;if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:e,ns:t,fcName:o,tried:s,wait:r,callback:a});return}this.readingCalls++;const i=(u,d)=>{if(this.readingCalls--,this.waitingReads.length>0){const p=this.waitingReads.shift();this.read(p.lng,p.ns,p.fcName,p.tried,p.wait,p.callback)}if(u&&d&&s<this.maxRetries){setTimeout(()=>{this.read.call(this,e,t,o,s+1,r*2,a)},r);return}a(u,d)},l=this.backend[o].bind(this.backend);if(l.length===2){try{const u=l(e,t);u&&typeof u.then=="function"?u.then(d=>i(null,d)).catch(i):i(null,u)}catch(u){i(u)}return}return l(e,t,i)}prepareLoading(e,t){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},s=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),s&&s();m(e)&&(e=this.languageUtils.toResolveHierarchy(e)),m(t)&&(t=[t]);const r=this.queueLoad(e,t,o,s);if(!r.toLoad.length)return r.pending.length||s(),null;r.toLoad.forEach(a=>{this.loadOne(a)})}load(e,t,o){this.prepareLoading(e,t,{},o)}reload(e,t,o){this.prepareLoading(e,t,{reload:!0},o)}loadOne(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const o=e.split("|"),s=o[0],r=o[1];this.read(s,r,"read",void 0,void 0,(a,i)=>{a&&this.logger.warn(`${t}loading namespace ${r} for language ${s} failed`,a),!a&&i&&this.logger.log(`${t}loaded namespace ${r} for language ${s}`,i),this.loaded(e,a,i)})}saveMissing(e,t,o,s,r){let a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:{},i=arguments.length>6&&arguments[6]!==void 0?arguments[6]:()=>{};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)){this.logger.warn(`did not save key "${o}" as the namespace "${t}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(o==null||o==="")){if(this.backend&&this.backend.create){const l={...a,isUpdate:r},u=this.backend.create.bind(this.backend);if(u.length<6)try{let d;u.length===5?d=u(e,t,o,s,l):d=u(e,t,o,s),d&&typeof d.then=="function"?d.then(p=>i(null,p)).catch(i):i(null,d)}catch(d){i(d)}else u(e,t,o,s,i,l)}!e||!e[0]||this.store.addResource(e[0],t,o,s)}}}const _e=()=>({debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:n=>{let e={};if(typeof n[1]=="object"&&(e=n[1]),m(n[1])&&(e.defaultValue=n[1]),m(n[2])&&(e.tDescription=n[2]),typeof n[2]=="object"||typeof n[3]=="object"){const t=n[3]||n[2];Object.keys(t).forEach(o=>{e[o]=t[o]})}return e},interpolation:{escapeValue:!0,format:n=>n,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}),Ee=n=>(m(n.ns)&&(n.ns=[n.ns]),m(n.fallbackLng)&&(n.fallbackLng=[n.fallbackLng]),m(n.fallbackNS)&&(n.fallbackNS=[n.fallbackNS]),n.supportedLngs&&n.supportedLngs.indexOf("cimode")<0&&(n.supportedLngs=n.supportedLngs.concat(["cimode"])),n),te=()=>{},Dt=n=>{Object.getOwnPropertyNames(Object.getPrototypeOf(n)).forEach(t=>{typeof n[t]=="function"&&(n[t]=n[t].bind(n))})};class Z extends ce{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;if(super(),this.options=Ee(e),this.services={},this.logger=N,this.modules={external:[]},Dt(this),t&&!this.isInitialized&&!e.isClone){if(!this.options.initImmediate)return this.init(e,t),this;setTimeout(()=>{this.init(e,t)},0)}}init(){var e=this;let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;this.isInitializing=!0,typeof t=="function"&&(o=t,t={}),!t.defaultNS&&t.defaultNS!==!1&&t.ns&&(m(t.ns)?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));const s=_e();this.options={...s,...this.options,...Ee(t)},this.options.compatibilityAPI!=="v1"&&(this.options.interpolation={...s.interpolation,...this.options.interpolation}),t.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=t.keySeparator),t.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=t.nsSeparator);const r=d=>d?typeof d=="function"?new d:d:null;if(!this.options.isClone){this.modules.logger?N.init(r(this.modules.logger),this.options):N.init(null,this.options);let d;this.modules.formatter?d=this.modules.formatter:typeof Intl<"u"&&(d=_t);const p=new $e(this.options);this.store=new Oe(this.options.resources,this.options);const c=this.services;c.logger=N,c.resourceStore=this.store,c.languageUtils=p,c.pluralResolver=new $t(p,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),d&&(!this.options.interpolation.format||this.options.interpolation.format===s.interpolation.format)&&(c.formatter=r(d),c.formatter.init(c,this.options),this.options.interpolation.format=c.formatter.format.bind(c.formatter)),c.interpolator=new Mt(this.options),c.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},c.backendConnector=new Nt(r(this.modules.backend),c.resourceStore,c,this.options),c.backendConnector.on("*",function(h){for(var f=arguments.length,w=new Array(f>1?f-1:0),y=1;y<f;y++)w[y-1]=arguments[y];e.emit(h,...w)}),this.modules.languageDetector&&(c.languageDetector=r(this.modules.languageDetector),c.languageDetector.init&&c.languageDetector.init(c,this.options.detection,this.options)),this.modules.i18nFormat&&(c.i18nFormat=r(this.modules.i18nFormat),c.i18nFormat.init&&c.i18nFormat.init(this)),this.translator=new le(this.services,this.options),this.translator.on("*",function(h){for(var f=arguments.length,w=new Array(f>1?f-1:0),y=1;y<f;y++)w[y-1]=arguments[y];e.emit(h,...w)}),this.modules.external.forEach(h=>{h.init&&h.init(this)})}if(this.format=this.options.interpolation.format,o||(o=te),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const d=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);d.length>0&&d[0]!=="dev"&&(this.options.lng=d[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(d=>{this[d]=function(){return e.store[d](...arguments)}}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(d=>{this[d]=function(){return e.store[d](...arguments),e}});const l=J(),u=()=>{const d=(p,c)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),l.resolve(c),o(p,c)};if(this.languages&&this.options.compatibilityAPI!=="v1"&&!this.isInitialized)return d(null,this.t.bind(this));this.changeLanguage(this.options.lng,d)};return this.options.resources||!this.options.initImmediate?u():setTimeout(u,0),l}loadResources(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:te;const s=m(e)?e:this.language;if(typeof e=="function"&&(o=e),!this.options.resources||this.options.partialBundledLanguages){if(s&&s.toLowerCase()==="cimode"&&(!this.options.preload||this.options.preload.length===0))return o();const r=[],a=i=>{if(!i||i==="cimode")return;this.services.languageUtils.toResolveHierarchy(i).forEach(u=>{u!=="cimode"&&r.indexOf(u)<0&&r.push(u)})};s?a(s):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(l=>a(l)),this.options.preload&&this.options.preload.forEach(i=>a(i)),this.services.backendConnector.load(r,this.options.ns,i=>{!i&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),o(i)})}else o(null)}reloadResources(e,t,o){const s=J();return typeof e=="function"&&(o=e,e=void 0),typeof t=="function"&&(o=t,t=void 0),e||(e=this.languages),t||(t=this.options.ns),o||(o=te),this.services.backendConnector.reload(e,t,r=>{s.resolve(),o(r)}),s}use(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return e.type==="backend"&&(this.modules.backend=e),(e.type==="logger"||e.log&&e.warn&&e.error)&&(this.modules.logger=e),e.type==="languageDetector"&&(this.modules.languageDetector=e),e.type==="i18nFormat"&&(this.modules.i18nFormat=e),e.type==="postProcessor"&&Ge.addPostProcessor(e),e.type==="formatter"&&(this.modules.formatter=e),e.type==="3rdParty"&&this.modules.external.push(e),this}setResolvedLanguage(e){if(!(!e||!this.languages)&&!(["cimode","dev"].indexOf(e)>-1))for(let t=0;t<this.languages.length;t++){const o=this.languages[t];if(!(["cimode","dev"].indexOf(o)>-1)&&this.store.hasLanguageSomeTranslations(o)){this.resolvedLanguage=o;break}}}changeLanguage(e,t){var o=this;this.isLanguageChangingTo=e;const s=J();this.emit("languageChanging",e);const r=l=>{this.language=l,this.languages=this.services.languageUtils.toResolveHierarchy(l),this.resolvedLanguage=void 0,this.setResolvedLanguage(l)},a=(l,u)=>{u?(r(u),this.translator.changeLanguage(u),this.isLanguageChangingTo=void 0,this.emit("languageChanged",u),this.logger.log("languageChanged",u)):this.isLanguageChangingTo=void 0,s.resolve(function(){return o.t(...arguments)}),t&&t(l,function(){return o.t(...arguments)})},i=l=>{!e&&!l&&this.services.languageDetector&&(l=[]);const u=m(l)?l:this.services.languageUtils.getBestMatchFromCodes(l);u&&(this.language||r(u),this.translator.language||this.translator.changeLanguage(u),this.services.languageDetector&&this.services.languageDetector.cacheUserLanguage&&this.services.languageDetector.cacheUserLanguage(u)),this.loadResources(u,d=>{a(d,u)})};return!e&&this.services.languageDetector&&!this.services.languageDetector.async?i(this.services.languageDetector.detect()):!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(i):this.services.languageDetector.detect(i):i(e),s}getFixedT(e,t,o){var s=this;const r=function(a,i){let l;if(typeof i!="object"){for(var u=arguments.length,d=new Array(u>2?u-2:0),p=2;p<u;p++)d[p-2]=arguments[p];l=s.options.overloadTranslationOptionHandler([a,i].concat(d))}else l={...i};l.lng=l.lng||r.lng,l.lngs=l.lngs||r.lngs,l.ns=l.ns||r.ns,l.keyPrefix!==""&&(l.keyPrefix=l.keyPrefix||o||r.keyPrefix);const c=s.options.keySeparator||".";let h;return l.keyPrefix&&Array.isArray(a)?h=a.map(f=>`${l.keyPrefix}${c}${f}`):h=l.keyPrefix?`${l.keyPrefix}${c}${a}`:a,s.t(h,l)};return m(e)?r.lng=e:r.lngs=e,r.ns=t,r.keyPrefix=o,r}t(){return this.translator&&this.translator.translate(...arguments)}exists(){return this.translator&&this.translator.exists(...arguments)}setDefaultNamespace(e){this.options.defaultNS=e}hasLoadedNamespace(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const o=t.lng||this.resolvedLanguage||this.languages[0],s=this.options?this.options.fallbackLng:!1,r=this.languages[this.languages.length-1];if(o.toLowerCase()==="cimode")return!0;const a=(i,l)=>{const u=this.services.backendConnector.state[`${i}|${l}`];return u===-1||u===0||u===2};if(t.precheck){const i=t.precheck(this,a);if(i!==void 0)return i}return!!(this.hasResourceBundle(o,e)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||a(o,e)&&(!s||a(r,e)))}loadNamespaces(e,t){const o=J();return this.options.ns?(m(e)&&(e=[e]),e.forEach(s=>{this.options.ns.indexOf(s)<0&&this.options.ns.push(s)}),this.loadResources(s=>{o.resolve(),t&&t(s)}),o):(t&&t(),Promise.resolve())}loadLanguages(e,t){const o=J();m(e)&&(e=[e]);const s=this.options.preload||[],r=e.filter(a=>s.indexOf(a)<0&&this.services.languageUtils.isSupportedCode(a));return r.length?(this.options.preload=s.concat(r),this.loadResources(a=>{o.resolve(),t&&t(a)}),o):(t&&t(),Promise.resolve())}dir(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";const t=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],o=this.services&&this.services.languageUtils||new $e(_e());return t.indexOf(o.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new Z(e,t)}cloneInstance(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:te;const o=e.forkResourceStore;o&&delete e.forkResourceStore;const s={...this.options,...e,isClone:!0},r=new Z(s);return(e.debug!==void 0||e.prefix!==void 0)&&(r.logger=r.logger.clone(e)),["store","services","language"].forEach(i=>{r[i]=this[i]}),r.services={...this.services},r.services.utils={hasLoadedNamespace:r.hasLoadedNamespace.bind(r)},o&&(r.store=new Oe(this.store.data,s),r.services.resourceStore=r.store),r.translator=new le(r.services,s),r.translator.on("*",function(i){for(var l=arguments.length,u=new Array(l>1?l-1:0),d=1;d<l;d++)u[d-1]=arguments[d];r.emit(i,...u)}),r.init(s,t),r.translator.options=s,r.translator.backendConnector.services.utils={hasLoadedNamespace:r.hasLoadedNamespace.bind(r)},r}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const b=Z.createInstance();b.createInstance=Z.createInstance;b.createInstance;b.dir;b.init;b.loadResources;b.reloadResources;b.use;b.changeLanguage;b.getFixedT;b.t;b.exists;b.setDefaultNamespace;b.hasLoadedNamespace;b.loadNamespaces;b.loadLanguages;const{slice:Ft,forEach:Ut}=[];function qt(n){return Ut.call(Ft.call(arguments,1),e=>{if(e)for(const t in e)n[t]===void 0&&(n[t]=e[t])}),n}
1function Ht(n){return typeof n!="string"?!1:[/<\s*script.*?>/i,/<\s*\/\s*script\s*>/i,/<\s*img.*?on\w+\s*=/i,/<\s*\w+\s*on\w+\s*=.*?>/i,/javascript\s*:/i,/vbscript\s*:/i,/expression\s*\(/i,/eval\s*\(/i,/alert\s*\(/i,/document\.cookie/i,/document\.write\s*\(/i,/window\.location/i,/innerHTML/i].some(t=>t.test(n))}const Ne=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/,jt=function(n,e){const o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{path:"/"},s=encodeURIComponent(e);let r=`${n}=${s}`;if(o.maxAge>0){const a=o.maxAge-0;if(Number.isNaN(a))throw new Error("maxAge should be a Number");r+=`; Max-Age=${Math.floor(a)}`}if(o.domain){if(!Ne.test(o.domain))throw new TypeError("option domain is invalid");r+=`; Domain=${o.domain}`}if(o.path){if(!Ne.test(o.path))throw new TypeError("option path is invalid");r+=`; Path=${o.path}`}if(o.expires){if(typeof o.expires.toUTCString!="function")throw new TypeError("option expires is invalid");r+=`; Expires=${o.expires.toUTCString()}`}if(o.httpOnly&&(r+="; HttpOnly"),o.secure&&(r+="; Secure"),o.sameSite)switch(typeof o.sameSite=="string"?o.sameSite.toLowerCase():o.sameSite){case!0:r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"strict":r+="; SameSite=Strict";break;case"none":r+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return o.partitioned&&(r+="; Partitioned"),r},De={create(n,e,t,o){let s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{path:"/",sameSite:"strict"};t&&(s.expires=new Date,s.expires.setTime(s.expires.getTime()+t*60*1e3)),o&&(s.domain=o),document.cookie=jt(n,e,s)},read(n){const e=`${n}=`,t=document.cookie.split(";");for(let o=0;o<t.length;o++){let s=t[o];for(;s.charAt(0)===" ";)s=s.substring(1,s.length);if(s.indexOf(e)===0)return s.substring(e.length,s.length)}return null},remove(n,e){this.create(n,"",-1,e)}};var zt={name:"cookie",lookup(n){let{lookupCookie:e}=n;if(e&&typeof document<"u")return De.read(e)||void 0},cacheUserLanguage(n,e){let{lookupCookie:t,cookieMinutes:o,cookieDomain:s,cookieOptions:r}=e;t&&typeof document<"u"&&De.create(t,n,o,s,r)}},Vt={name:"querystring",lookup(n){let{lookupQuerystring:e}=n,t;if(typeof window<"u"){let{search:o}=window.location;!window.location.search&&window.location.hash?.indexOf("?")>-1&&(o=window.location.hash.substring(window.location.hash.indexOf("?")));const r=o.substring(1).split("&");for(let a=0;a<r.length;a++){const i=r[a].indexOf("=");i>0&&r[a].substring(0,i)===e&&(t=r[a].substring(i+1))}}return t}},Kt={name:"hash",lookup(n){let{lookupHash:e,lookupFromHashIndex:t}=n,o;if(typeof window<"u"){const{hash:s}=window.location;if(s&&s.length>2){const r=s.substring(1);if(e){const a=r.split("&");for(let i=0;i<a.length;i++){const l=a[i].indexOf("=");l>0&&a[i].substring(0,l)===e&&(o=a[i].substring(l+1))}}if(o)return o;if(!o&&t>-1){const a=s.match(/\/([a-zA-Z-]*)/g);return Array.isArray(a)?a[typeof t=="number"?t:0]?.replace("/",""):void 0}}}return o}};let V=null;const Fe=()=>{if(V!==null)return V;try{if(V=typeof window<"u"&&window.localStorage!==null,!V)return!1;const n="i18next.translate.boo";window.localStorage.setItem(n,"foo"),window.localStorage.removeItem(n)}catch{V=!1}return V};var Gt={name:"localStorage",lookup(n){let{lookupLocalStorage:e}=n;if(e&&Fe())return window.localStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupLocalStorage:t}=e;t&&Fe()&&window.localStorage.setItem(t,n)}};let K=null;const Ue=()=>{if(K!==null)return K;try{if(K=typeof window<"u"&&window.sessionStorage!==null,!K)return!1;const n="i18next.translate.boo";window.sessionStorage.setItem(n,"foo"),window.sessionStorage.removeItem(n)}catch{K=!1}return K};var Bt={name:"sessionStorage",lookup(n){let{lookupSessionStorage:e}=n;if(e&&Ue())return window.sessionStorage.getItem(e)||void 0},cacheUserLanguage(n,e){let{lookupSessionStorage:t}=e;t&&Ue()&&window.sessionStorage.setItem(t,n)}},Wt={name:"navigator",lookup(n){const e=[];if(typeof navigator<"u"){const{languages:t,userLanguage:o,language:s}=navigator;if(t)for(let r=0;r<t.length;r++)e.push(t[r]);o&&e.push(o),s&&e.push(s)}return e.length>0?e:void 0}},Jt={name:"htmlTag",lookup(n){let{htmlTag:e}=n,t;const o=e||(typeof document<"u"?document.documentElement:null);return o&&typeof o.getAttribute=="function"&&(t=o.getAttribute("lang")),t}},Yt={name:"path",lookup(n){let{lookupFromPathIndex:e}=n;if(typeof window>"u")return;const t=window.location.pathname.match(/\/([a-zA-Z-]*)/g);return Array.isArray(t)?t[typeof e=="number"?e:0]?.replace("/",""):void 0}},Qt={name:"subdomain",lookup(n){let{lookupFromSubdomainIndex:e}=n;const t=typeof e=="number"?e+1:1,o=typeof window<"u"&&window.location?.hostname?.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i);if(o)return o[t]}};let Be=!1;try{document.cookie,Be=!0}catch{}const We=["querystring","cookie","localStorage","sessionStorage","navigator","htmlTag"];Be||We.splice(1,1);const Zt=()=>({order:We,lookupQuerystring:"lng",lookupCookie:"i18next",lookupLocalStorage:"i18nextLng",lookupSessionStorage:"i18nextLng",caches:["localStorage"],excludeCacheFor:["cimode"],convertDetectedLanguage:n=>n});class Je{constructor(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.type="languageDetector",this.detectors={},this.init(e,t)}init(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{languageUtils:{}},t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};this.services=e,this.options=qt(t,this.options||{},Zt()),typeof this.options.convertDetectedLanguage=="string"&&this.options.convertDetectedLanguage.indexOf("15897")>-1&&(this.options.convertDetectedLanguage=s=>s.replace("-","_")),this.options.lookupFromUrlIndex&&(this.options.lookupFromPathIndex=this.options.lookupFromUrlIndex),this.i18nOptions=o,this.addDetector(zt),this.addDetector(Vt),this.addDetector(Gt),this.addDetector(Bt),this.addDetector(Wt),this.addDetector(Jt),this.addDetector(Yt),this.addDetector(Qt),this.addDetector(Kt)}addDetector(e){return this.detectors[e.name]=e,this}detect(){let e=arguments.length>
vendor: 3,851 bytes, line 1
10&&arguments[0]!==void 0?arguments[0]:this.options.order,t=[];return e.forEach(o=>{if(this.detectors[o]){let s=this.detectors[o].lookup(this.options);s&&typeof s=="string"&&(s=[s]),s&&(t=t.concat(s))}}),t=t.filter(o=>o!=null&&!Ht(o)).map(o=>this.options.convertDetectedLanguage(o)),this.services&&this.services.languageUtils&&this.services.languageUtils.getBestMatchFromCodes?t:t.length>0?t[0]:null}cacheUserLanguage(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.caches;t&&(this.options.excludeCacheFor&&this.options.excludeCacheFor.indexOf(e)>-1||t.forEach(o=>{this.detectors[o]&&this.detectors[o].cacheUserLanguage(e,this.options)}))}}Je.type="languageDetector";const Xt="The Unified Gateway for AI Models",eo="Apps Using AIHubMix",to="User",oo="Channel",no="Redemption",so="Logs",ro="Settings",ao="Sign in",io="Sign up",lo="Sign out",uo="Enterprise",co="Dashboard",po="Unit",ho="Reset",mo="OR",fo="username",go="Password",yo="yes",bo="no",wo="modify",vo="Connect Customer",xo="Model",ko="Input",Ao="Output",So="API Key",Lo="Status",Io="enabled",Co="enable",Po="disabled",Oo="disable",Ro="expired",$o="exhausted",Mo="uncertain",To="Actions",_o="edit",Eo="copy",No="sort",Do="from {{start}} to {{end}} items",Fo="submit",Uo="cancel",qo="Recharge",Ho="consume",jo="manage",zo="system",Vo="type",Ko="All",Go="Email",Bo="Linked",Wo="Search",Jo="Reset",Yo="operation failed, redirecting to the login page...",Qo="An error occurred, retrying for the {{count}} time...",Zo="unlimited",Xo="Spend",en="usage trend",tn="distribution",on="Date",nn="start time-end time",sn="today",rn="Trending",an="Featured",ln="Total ",un="Export XLSX",cn="available",dn="Init",pn="Alipay",hn="Stripe",mn="Exchange",fn="Model Authors",gn="rank",yn="Categories",bn="Price",wn="desc",vn="Feedback",xn="Privacy Policy",kn="Terms",An="Capabilities",Sn="Supported Parameters",Ln="API Formats",In="Released",Cn="Categories",Pn="Output Modalities",On="Docs",Rn="add",$n="Notice",Mn="Notes",Tn="Authorize",_n="Deny",En="Allow",Nn="Refresh",Dn="Providers",Fn="Pricing",Un="Specifications",qn="Performance",Hn="Peak",jn="Compare",zn="Comparisons",Vn="Update",Kn="Copied",Gn="Capabilities",Bn="Context length",Wn="Not documented by the vendor",Jn="Model",Yn="Modalities",Qn="Throughput",Zn="Latency",Xn="Input",es="Output",ts="tokens",os="requests",ns="Total",ss="Usage",rs="Tokens",as="Requests",is="Models",ls="free",us="Reasoning",cs="Tools",ds="Vision",ps="Clear",hs="Resets",ms="daily",fs="Apps",gs="Recommended",ys="Deprecating",bs="Retired",ws="Retirements",vs="Active",xs="Author",ks="All",As="Status",Ss="Announced",Ls="Replacement",D={slogan:Xt,"site Name":"AI HUB MIX","slogan desc 1":"Access leading AI models through one unified, OpenAI-compatible API.","start to use":"Get API Key","doc entrance":"View Docs","feature 1":"One API for Any Model","feature 1 desc":"Connect to all major AI models including ChatGPT, Claude, Gemini, DeepSeek, Qwen. All available in consistent format.","price entrance":"All Models >","feature 2":"OpenAI-Compatible API","feature 2 desc":"As an official partner of Azure, AWS, Google Cloud, we integrate official APIs and proprietary services for enterprise-grade reliability and unlimited throughput.","feature 3":"Higher Availability","feature 3 desc":"Automatically route across healthy providers and fall back when one is unavailable.","Model usage":"Model Rankings","Featured Apps":"Featured Apps",Partner:eo,"Partner desc":"Discover apps using AIHubMix. Eligible usage receives 10% off, excluding Claude models.","Partner off":"View All Apps","Earn with Your App":"Integrate AIHubMix and Get 10% Off",User:to,Channel:oo,Redemption:no,"Usage statistics":"Dashboard","Balance/Top-up":"Credits","API keys":"API Keys",Log:so,Setting:ro,Login:ao,Register:io,"Signed in as":"Signed in as",Logout:lo,"Model/Price"
1:"Models","App Store":"Apps",Enterprise:uo,Console:co,"Usage tutorial":"Docs",Unit:po,"call times":"Requests","Last week":"Last week","Last month":"Last month",Reset:ho,"forgot password?":"Forgot password?","no account?":"no account?","had account?":"already have an account?",OR:mo,"Sign in with Github":"Continue with Github","Sign in with Google":"Continue with Google",username:fo,"username placeholder":"Please enter your username,shortest 3 digits, longest 12 digits!",password:go,"password placeholder":"Please enter your password! shortest 8 digits, longest 20 digits","sign in success notice":"Sign in success!","sign in failed notice":"Not logged in or login has expired, please log in again!","reset password notice":"Please change the default password immediately!","typeof amount error notice":"The credit only accepts positive integers!","pay failed notice":"Payment failed!","pay success notice":"Payment success!","order close notice":"Order closed!","account balance":"Available credits","balance remind":"Balance Alert","balance remind desc":"Set Up Low Balance Email Alerts to Ease Your Concerns","close remind":"Turn Off Balance Alerts",yes:yo,no:bo,modify:wo,"close remind notice":"are you sure you no longer receive balance reminder emails?","balance remind notice":"when the balance is less than ${{threshold}}, notify {{email}}","set balance remind":"set balance remind","remind threshold":"low balance threshold","remind threshold placeholder":"please enter the correct amount","remind email":"remind email","remind email placeholder":"please enter your email address","recharge online":"Pay as you go","recharge quota":"Add to credit balance","custom recharge":"Custom","custom recharge placeholder":"minimum $1, integers only","recharge amount placeholder":"please enter an integer amount","Payable amount":"Payable amount:","alipay pay":"Alipay Pay","alipay pay notice":"Alipay scan to complete payment","stripe pay":"Stripe Pay",invoice:vo,"quota notice":"Invoice / Enterprise Customization","exchange quota":"Redeem Promo Code","exchange code":"Code","exchange success notice":"Success!","exchange code placeholder":"please enter the code","exchange code tooltip":"After successful payment, do not leave the current page, wait for about 10 seconds, the page will display the card password, which is the exchange code",model:xo,input:ko,output:Ao,"search model":"Search models...","model price table":"Supported Models","operation success":"operation success!","key name":"Key name",key:So,status:Lo,enabled:Io,enable:Co,disabled:Po,disable:Oo,expired:Ro,exhausted:$o,uncertain:Mo,"used quota":"Usage","remain quota":"Remaining limit","created time":"Created","expired time":"Expires","expired time placeholder":"default no limit","invalid time format":"invalid time format!",operation:To,edit:_o,delete:"delete","add key":"Create API key","delete confirm":"delete data","delete noice":"Are you sure you want to delete the key named {{name}}?",copy:Eo,"copy success":"copy success!","my key":"My Key","go recharge":"Add credits","key name placeholder":"Search API keys...",sort:No,"sort by remain quota":"sort by remain credit","sort by used quota":"sort by used credit",pagination:Do,"create key":"Create API key","create key success":"create key success, copy key on the list!","update key":"Update key","update key success":"update key success!","never expired":"never expired","one month later expired":"one month later expired","one day later expired":"one day later expired","one hour later expired":"one hour later expired","one minute later expired":"one minute later expired","quota setting notice":"Note: Newbies are advised to choose unlimited credit. The credit of the key is only used to limit the maximum credit usage of the key itself, and the actual usage is subject to the remaining quota limit of the account.","quota limit":"quota limit","quota limit placeholder":"please enter the credit limit","cancel quote unlimited":"cancel credit unlimited","set quote unlimited":"set credit unlimited","higher option":"This is an advanced option, newbies do not operate","model range":"model range","model range placeholder":"default no limit","model range tooltip":"limit the model that the current key can use","IP limit":"IP limit","IP limit placeholder":"please enter the IP limit","IP limit tooltip":"used to limit the specific user IP, newbies are not recommended to set",submit:Fo,cancel:Uo,"log detail":"log detail",recharge:qo,consume:Ho,manage:jo,system:zo,type:Vo,all:Ko,"max nums":"Export XLSX (up to 10,000 rows)","model name":"Model","model price":"Pricing","cached tokens":"Cached prompt tokens","quota change":"Amount","start time":"Start time","end time":"End time","personal setting":"Personal Setting","user name":"User Name","display name":"display name",email:Go,"bind email address":"Link Email Address","bind email address placeholder":"please enter the email address","go bind":"Bind Now",binded:Bo,"go update":"Update","send captcha":"send captcha","captcha placeholder":"please enter the captcha","log off account":"Log Off Account","go log off":"Log Off","log off notice":"Are you sure you want to log off?","log off confirm":"please enter your username to confirm log off!","account name placeholder":"please enter your username","token copied":"token has been copied to the clipboard","invite code copied":"invite code has been copied to clipboard","system token copied":"system token has been copied to clipboard","log off confirm notice":"You are deleting your account, all data will be cleared and cannot be recovered","log off success":"Logged out successfully!","bind wechat success":"bind wechat success!","captcha send success":"captcha send success, please check your email","bind email success":"bind email success!","common setting":"common setting","common setting desc":"This token is for system management purposes and is not used for LLM requests.","generate token":"generate system access token","copy invite code":"Invite Link","account setting":"account setting","avaliable models":"Avaliable Models","update user":"update user","user update success":"user update success!","new username":"username","new username placeholder":"please enter the new username,shortest 3 digits, longest 12 digits","display name placeholder":"please enter the display name","binded Github account":"Linked Github account","binded Google account":"Linked Google account","binded email account":"Linked email account","binded account placeholder":"read-only, users need to bind through the relevant binding button on the personal settings page, cannot be modified directly",search:Wo,reset:Jo,"page not exist":"Page not found","page not exist desc":"The page you’re looking for doesn’t exist or may have moved.","back to home":"Back to home","no permission":"no permission","no permission desc":"You do not have permission to access this page. Please contact the administrator to open the permission.","bind success":"Linked 
1success","login success":"login success",redirecting:Yo,retrying:Qo,"params error":"params error","connect server error":"Unable to connect to the server normally!",unlimited:Zo,"statistics title":"Activity",expense:Xo,"expense desc":"Total spend","usage token":"Token volume","usage token desc":"Total prompt and completion tokens","call times desc":"API requests",trend:en,distribution:tn,hour:on,"user id":"user id","user id placeholder":"please enter the user id",period:nn,today:sn,"last 7 days":"last 7 days","last 30 days":"last 30 days","Past 30 Days":"Past 30 Days","week rank":"Past Week","month rank":"Past Month",trending:rn,manual:an,total:ln,"usage detail":"Activity",download:un,"last half a year":"last half a year","recharge record":"Transactions","recharge time":"Date",available:cn,init:dn,alipay:pn,stripe:hn,exchange:mn,"data delay":"Data may be delayed by 1 minute","model filter":"Filter",developer:fn,"total models":"{{total}} models","entered passwords differ!":"the two passwords entered are inconsistent!","register success":"register success!","password reset":"password reset","password sub title":"Please enter your email address, we will send you a password reset email","send email text":"send email","send email retry":"s retry","reset password email":"email address","reset password email placeholder":"please enter the email address!","reset password email confirm":"please enter the correct email address!","reset password email success":"password reset email sent successfully!","reset password confirm":"password reset confirm","reset password confirm desc":"submit to complete password reset","new password":"new password","get new password":"get new password","new password success":"reset password complete","back login":"back to login","new password copied":"new password has been copied to the clipboard: ",rank:gn,feature:yn,"unlimit quota":"unlimit quota","limit quota":"limit quota","advanced settings":"advanced settings","model info":"model info",price:bn,"params count":"params count","context length":"Context length","model params":"model params","param name":"param name",desc:wn,"default value":"example value",Feedback:vn,Privacy:xn,Terms:kn,"Input name":"Input","Output name":"Output","Context name":"Context","Latency name":"TTFT","Throughput name":"Throughput",features:An,Features:Sn,Endpoints:Ln,Released:In,"Throughput (TPS)":"Throughput (tok/s)",tags:Cn,types:Pn,"Model Details":"Model Details",usage:On,"try in playground":"Try in Playground","media async tasks note":"These /ai/v1 media endpoints run as async tasks. Enable Async Tasks for your account first, or task creation returns 403 async_not_enabled.","async tasks guide":"Async Tasks guide",add:Rn,"remind off":"off","remind on":"on",notice:$n,"surfing cost":"Web search","unuser title":"Let's Get You a Code","unuser desc":"Sign in or sign up to generate an App Code and unlock 10% off.","unuser btn":"Sign in","not now":"Not now","user title":"Your 10% off code is ready!","user desc":"Your App Code is now active—check the pre-filled code snippet below to get started right away.","user btn":"Got it","get code":"Generate App Code","get code desc":"Integrate AIHubMix as a model provider and include your App Code in each request. Open-source apps and apps where users bring their own API key can qualify by offering AIHubMix as a provider. Closed-source apps must clearly disclose that model requests are powered by AIHubMix. AIHubMix may revoke the discount or suspend accounts that do not meet these requirements or misuse the program.","get code notice":"Sign in or sign up to generate an App Code.","app name":"App name","app url":"App URL","app name placeholder":"Please enter the app name","app url placeholder":"Please enter the app domain","apps notice":"Apps that integrate AIHubMix as the model provider are eligible for","app url tooltip":"Ensure it is your valid product domain",remark:Mn,"10% off":"10% off","learn more":"Learn More",authorize:Tn,"authorize app":"Authorize {{appName}}","authorize account login":"authorize to use your account info","permissions granted":"Permissions to be granted:","no special permissions":"No special permissions","user basic 
1info":"User basic information (username, email)","user balance info":"User balance information",deny:_n,allow:En,"contact developer":"For more information, please contact the app developer","missing parameters":"Missing required parameters","app info fetch failed":"Failed to fetch app information","authorization request failed":"Authorization request failed",refresh:Nn,"column settings":"Column Settings","go generate":"Generate","Pricing Details":"Pricing","Image Generation":"Image Generation","Input Modalities":"Input Modalities","Output Modalities":"Output Modalities",Providers:Dn,Pricing:Fn,"Quick Start":"Try this model",Attributes:Un,"More Models":"More Models","API Usage Examples":"API Usage Examples","model data api":"Models API",Performance:qn,"Performance for":"Performance for","No data available":"No results","Smart Routing":"LLM Router","router hero title":"Not every request needs the biggest, priciest model","router hero sub":"Smart routing selects the best model for every request in real time — cutting costs significantly without compromising task quality. Cache-friendly by design: each session automatically sticks to the same model, so prompt caches are never lost.","router hero session":"No extra setup required: session identifiers from popular agents like Claude Code, Codex, and OpenCode are recognized automatically. For precise control over session scope, add this to your request:","router hero note":"Scores span {{groups}} major categories and {{dims}} sub-dimensions, normalized from a blend of internal evaluations and public leaderboards.","router hero doc":"API reference","router copy":"Copy","router copied":"Copied","router code sync":"Routing strategy","router code comment default":"bare auto = auto:cost_optimized (default)","router code comment strategy":"{{name}} strategy","router strat eyebrow":"Routing strategies","router strat title":"Model coverage across the four routing strategies","router default tag":"Default","router weight quality":"Quality","router weight cost":"Cost","router weight latency":"Speed","router strat cost_optimized":"Cost first","router strat cost_optimized desc":"Meets the bar, costs the least.","router strat balanced":"Balanced","router strat balanced desc":"Capability, cost and latency in balance.","router strat quality_first":"Quality first","router strat quality_first desc":"Strongest model first.","router strat latency_critical":"Latency first","router strat latency_critical desc":"Fastest response first.","router col model":"Model","router col score":"Normalized score","router col price":"Input / Output","router col latency":"Time to First Token","router best tag":"Current pick","router sort route":'Weighted by "{{name}}"',"router sort score":"Sorted by score","router sort price":"Sorted by price","router sort latency":"Sorted by Time to First Token","router source note":"Sources: internal evals and public leaderboards, jointly normalized.","router group text":"Text","router group vision":"Vision","router group code_webdev":"Web Development","router group search":"Search","router group document":"Document Analysis","router dim text_overall":"Overall","router dim text_coding":"Coding","router dim text_math":"Math","router dim text_instruction_following":"Instruction Following","router dim text_longer_query":"Long Queries","router dim text_language_chinese":"Language › Chinese","router dim text_language_english":"Language › English","router dim text_occupational_software_it":"Occupational › Software & IT","router dim text_occupational_mathematical":"Occupational › Mathematics","router dim text_occupational_legal":"Occupational › Legal & Government","router dim text_occupational_medicine":"Occupational › Medicine & Healthcare","router dim vision_overall":"Overall","router dim vision_ocr":"Vision Text Understanding","router dim vision_diagram":"Diagrams","router dim vision_homework":"Homework Help","router dim vision_chinese":"Chinese","router dim vision_english":"English","router dim code_webdev_overall":"Overall","router dim code_webdev_html":"HTML","router dim code_webdev_react":"React","router dim code_image_to_webdev_overall":"Image to Web","router dim search_overall":"Overall","router dim document_overall":"Overall","router card sub":"AIHubMix LLM Router","router card desc":"AIHubMix's in-house automatic model router. Not every request needs the strongest, most expensive model — drawing on internal evals and public leaderboards, we bring together a range of today's mainstream models of varying capability and route each request automatically through a small model we trained. Set model to auto and requests are dispatched to the right model based on their content, lowering cost. Currently in beta; we keep updating and improving it.","router card fee":"Charged at the actual routed model's price — routing itself is free.","router card cta":"Learn about the LLM Router","up to {{off}}% off":"up to {{off}}% off","{{off}}% off":"{{off}}% off","Uptime is the percentage of requests that succeeded over the past 72 hours. AIHubMix continuously monitors every provider and automatically retries with the next-best provider when one returns an error or responds too slowly.":"Uptime is the percentage of requests that succeeded over the past 72 hours. AIHubMix continuously monitors every provider and automatically retries with the next-best provider when one returns an error or responds too slowly.","Throughput is how fast the model writes (tokens per second, higher is better).":"Throughput is how fast the model writes (tokens per second, higher is better).","Latency is total round-trip time (lower is better).":"Latency is total round-trip time (lower is better).",Peak:Hn,"Off-peak":"Off-peak","Active hours":"Active hours","Other hours":"Other hours",Compare:jn,Comparisons:zn,"Add model":"Add model","Data snapshot":"Data snapshot",Update:Vn,Copied:Kn,"Copy link":"Copy link","requests this week":"requests this week","Pick a second model to start comparing.":"Pick a second model to start comparing.","Pick two models above, or start from one of the comparisons below.":"Select at least two models, or choose a popular comparison below.","What a comparison shows":"What a comparison shows","Every comparison puts 2 to 4 models side by side on the same objective metrics.":"Every comparison puts 2 to 4 models side by side on the same objective metrics.","Pricing per million input and output tokens, with any active discount applied.":"Pricing per million input and output tokens, with any active discount applied.","Context window and maximum output length.":"Context length and maximum output length.","Latency and throughput, as rolling averages measured on AIHubMix.":"Time to First Token and throughput, as rolling averages measured on AIHubMix.","Arena scores, where the model has been rated.":"LMArena benchmarks, where the model has been rated.","Real usage on AIHubMix: weekly requests and token trends.":"Real usage on AIHubMix: weekly requests and token trends.","A monthly cost estimate for your own request volume.":"A monthly cost estimate for your own request volume.","How it works":"How 
1it works","Add models with the picker above. The URL holds your selection, so a comparison can be shared or bookmarked.":"Add models with the picker above. The URL holds your selection, so a comparison can be shared or bookmarked.","Figures are a cached snapshot; the page states when it was taken and refreshes on demand.":"Figures are a cached snapshot; the page states when it was taken and refreshes on demand.","Every model on AIHubMix is callable through one API key and one base URL, so a price you compare here is the price you actually pay.":"Every model on AIHubMix is callable through one API key and one base URL, so a price you compare here is the price you actually pay.","Specs & Pricing":"Pricing & Specifications","Input price":"Input /M","Output price":"Output /M","Cache read":"Cache read /M","Context window":"Context length","Max output":"Max output","Latency (first token)":"Time to First Token","Usage on AIHubMix":"Activity","last 3 days":"Past 3 Days","Requests / day":"Requests / day","Tokens / day":"Tokens / day","Live Performance":"Performance","Arena Scores":"LMArena Benchmarks","Cost Calculator":"Cost calculator","Estimate your monthly bill for the same workload on each model.":"Estimate your monthly bill for the same workload on each model.","Avg input tokens / request":"Avg input tokens / request","Avg output tokens / request":"Avg output tokens / request","Popular Comparisons":"Popular comparisons","Related model match-ups readers also look at.":"Related model match-ups readers also look at.","Which is cheaper":"Which is cheaper","Which responds faster?":"Which responds faster?","Compare pricing, specs, live performance and arena scores side by side. Up to 4 models.":"Compare pricing, specifications, performance, and benchmarks for up to four models.","Prices are per million tokens. Latency and throughput are rolling averages measured on AIHubMix.":"Prices are per million tokens. Time to First Token and throughput are rolling averages measured on AIHubMix.","Daily traffic served through AIHubMix — how demand for each model is trending.":"Daily traffic served through AIHubMix — how demand for each model is trending.","Measured on real AIHubMix traffic, hourly buckets. Gaps mean no traffic in that hour.":"Measured on real AIHubMix traffic, hourly buckets. Gaps mean no traffic in that hour.","LMArena ratings by capability (Bradley-Terry, commonly called Elo). Higher is better.":"LMArena ratings by capability (Bradley-Terry, commonly called Elo). Higher is better.","No published ratings for":"No published ratings for","Monthly = daily × 30. Discounted rates applied where a promotion is active.":"Monthly = daily × 30. Discounted rates applied where a promotion is active.","Promotional prices show the discounted rate; see each model page for promotion windows.":"Promotional prices show the discounted rate; see each model page for promotion windows.",Capabilities:Gn,Context:Bn,capabilityUndocumented:Wn,"Max Output":"Max output","Latency (s)":"TTFT (s)","mirror warning title":"You have been redirected to the official AIHubMix site","mirror warning desc":"{{host}} is not an official AIHubMix domain. Anything you type there — passwords, API keys, payment details — passes through whoever runs it. Our only official site is aihubmix.com.","mirror warning desc generic":"The site you came from is not an official AIHubMix domain. Anything you type there — passwords, API keys, payment details — passes through whoever runs it. Our only official site is aihubmix.com.","Not published in the catalog":"Not published in the catalog","mod text":"text","mod vision":"vision","mod audio":"audio","mod video":"video","mod file":"file","mod pdf":"PDF","Takes {{mods}}. Output modality not published.":"Takes {{mods}}. Output modality not published.","Takes {{in}}, returns {{out}}.":"Takes {{in}}, returns {{out}}.","Official spec, verified {{date}}. The gateway route is configured at {{ctx}}.":"Official spec, verified {{date}}. The gateway route is configured at {{ctx}}.","Copy model ID {{id}}":"Copy model ID {{id}}",Model:Jn,Modalities:Yn,"col context":"Context","col cache read":"Cache read","Cac
1he write":"Cache write",Throughput:Qn,Latency:Zn,Input:Xn,Output:es,"{{count}} more models_one":"{{count}} more model","{{count}} more models_other":"{{count}} more models","Daily {{noun}} for {{dev}} models over the last {{days}} days, stacked by model, up to {{top}} per day.":"Daily {{noun}} for {{dev}} models over the last {{days}} days, stacked by model, up to {{top}} per day.",tokens:ts,requests:os,"Chart legend":"Chart legend",Total:ns,Usage:ss,"Measure usage by":"Measure usage by","By tokens":"By tokens","By requests":"By requests","Last {{days}} days":"Last {{days}} days","date range to":"to",Tokens:rs,Requests:as,"Models in use":"Models in use","of {{total}}":"of {{total}}","Tokens per day, stacked by model":"Tokens per day, stacked by model","Requests per day, stacked by model":"Requests per day, stacked by model","Which models that traffic went to":"Which models that traffic went to","Share of {{total}} tokens.":"Share of {{total}} tokens.","Share of {{total}} requests.":"Share of {{total}} requests.","{{count}} models with traffic report no token counts and cannot be ranked here":"{{count}} models with traffic report no token counts and cannot be ranked here","tok missing including":", including ","tok missing and":" and ","tok missing tail":" — they are in the request view.","usage views disagree note":"The two views disagree on purpose: a model can take a large share of the calls and a small share of the tokens — many short requests — or the reverse. Which one matters depends on whether your cost is driven by call volume or by prompt length. Measured on AIHubMix over the last {{days}} days, counting the {{count}} model IDs listed on this page; traffic routed through upstream-specific IDs that are not in the public catalog is not included.",Models:is,"Model Authors":"Model Authors","{{dev}} Models":"{{dev}} Models","models unit_one":"model","models unit_other":"models","authors unit_one":"model author","authors unit_other":"model authors","General models":"General models",free:ls,"to start":"to start","General models from":"General models from","input unit":"input","Up to":"Up to","context unit":"context","Official site":"Official site","All {{count}} {{dev}} Models":"All {{count}} {{dev}} Models","Open in model list":"Open in model list",Reasoning:us,Tools:cs,"Structured output":"Structured output",Vision:ds,"1M+ context":"1M+ context","Cache discount":"Cache discount",Clear:ps,"{{shown}} of {{total}} models":"{{shown}} of {{total}} models","provider table caption":"{{dev}} models on AIHubMix with input and output modalities, context length, maximum output, price per million tokens including cache read and cache write rates, and measured throughput and latency.","Show first {{count}}":"Show first {{count}}","Show all {{count}} models":"Show all {{count}} models","provider table footnote":"Prices are USD per million tokens; cache read and cache write are the rates for prompt-cache hits and for writing a prompt into the cache. Throughput and latency are measured on AIHubMix — the same figures the model detail page shows — not vendor claims. A dash means the catalog does not publish that field for that model, which is not the same as the model not supporting it.","Common Comparisons":"Common Comparisons","{{dev}} on AIHubMix":"{{dev}} on AIHubMix","Other Model Authors":"Other Model Authors","Start calling {{dev}} in one line":"Start calling {{dev}} in one line","One key, one endpoint, {{models}} models across {{devs}} model authors.":"One key, one endpoint, {{models}} models across {{devs}} model authors.","Get API key":"Get API key","Read the docs":"Read the docs","Free models":"Free models","Free AI Models":"Free AI Models","fm lead base":"Free models are for experimenting, learning and shipping without a bill — AIHubMix covers the inference cost for all {{count}} models on this page, and every model answers all three protocols: Chat Completions, Messages and Responses","fm lead trial":". Every account starts with {{trial}} trial calls, no credit card","fm lead topup":", and a ${{usd}} top-up switches you to permanent daily quotas.","fm lead end":".","Every model":"Every model","/M input & output":"/M input & output","Updated {{date}}":"Updated {{date}}","Model authors with free models":"Model authors with free models","{{name}} models on AIHubMix":"{{name}} models on AIHubMix","Before your first top-up":"Before your first top-up","No credit card required, and trial calls never expire.":"No credit card required, and trial calls never expire.","Trial 
1calls":"Trial calls","total, all free models":"total, all free models","After a one-time ${{usd}} top-up":"After a one-time ${{usd}} top-up","fm paid lane desc":"Top up once — any amount from ${{usd}} — and every free model switches to daily quotas with no expiry, reset every day.","/day unit":"/day","/min unit":"/min",Resets:hs,daily:ms,"fm tok missing":"{{count}} models with traffic report no token counts and are only in the request view.","All {{count}} Free Models":"All {{count}} Free Models","fm table caption":"All free models on AIHubMix, in catalog order, with developer, input and output modalities, context length and the rate limit each model allows on a topped-up account.","Rate limit":"Rate limit","Paid version":"Paid version","Compare {{a}} with {{b}}":"Compare {{a}} with {{b}}","vs paid":"vs paid","fm table note base":"Rate limit shows the daily and per-minute request caps for topped-up accounts. Some models carry a higher request weight — one call counts as several requests — which is why their caps are lower.","fm table note pool":" All free models share one pool of {{tokens}} tokens per day.","fm table note trial":" Before your first top-up, the {{trial}} trial calls apply instead.","fm table note tail":"Context “—” means the value is not published in the catalog. Modalities read input → output — the same fact the developer pages show; a missing output side means the catalog does not publish it, not that the model returns nothing.","How to Start":"How to Start","Create an account":"Create an account","Email or OAuth, no credit card required.":"Email or OAuth, no credit card required.","{{trial}} trial calls are available immediately.":"{{trial}} trial calls are available immediately.","Create an API key":"Create an API key","One key works for every model on the platform, free and paid alike.":"One key works for every model on the platform, free and paid alike.","Open the API keys page":"Open the API keys page","Call a free model":"Call a free model","fm step3 pre":"Point any OpenAI-compatible client — Cursor, Cline, Cherry Studio, LiteLLM — at the gateway and pick a ","fm step3 post":" model ID.","API protocol":"API protocol","Free Models on AIHubMix":"Free Models on AIHubMix","Keep Exploring":"Keep Exploring","All Models":"All Models","fm explore models desc":"The full catalog — {{count}} models across chat, image, video and audio, with per-token pricing.","Browse all models":"Browse all models","LLM Router":"LLM Router","fm router desc pre":"Fill in ","fm router desc post":" as the model ID and the gateway routes each request to the optimal model by cost and quality.","Try the router":"Try the router",Apps:fs,"fm apps desc":"Ready-to-use apps in the AIHubMix app store — and model discounts beyond the free catalog.","Browse the app store":"Browse the app store",Recommended:gs,"Switch version":"Switch version","Model versions":"Model versions","AI Model Authors":"AI Model Authors","authors index stats":"{{providers}} model authors, {{models}} models, one API key.","authors index desc":"Every model author page lists its full catalog with per-token pricing, context windows and measured throughput.","All model authors":"All model authors","calls 30d":"calls · 30d","See all model authors":"See all model authors","Retired models":"Retired models",Deprecating:ys,Retired:bs,Retirements:ws,"Model Retirements":"Model Retirements","mr lead":"Models get retired when the upstream provider shuts them down or replaces them. Everything scheduled and everything already gone is listed here, with the date calls stop working and what to move to.","scheduled for retirement":"scheduled for retirement","already retired":"already retired","Browse all {{count}} models":"Browse all {{count}} models",Active:vs,"Fully supported. No retirement date announced.":"Fully supported. No retirement date announced.","Still callable, but a retirement date is set. Migrate before that date.":"Still callable, but a retirement date is set. Migrate before that date.","No longer callable. Requests return":"No longer callable. Requests return","Filter by author":"Filter by author",Author:xs,All:ks,"Upcoming retirements":"Upcoming retirements","Still callable — migrate before the retirement date":"Still callable — migrate before the retirement date","Detail pages stay online — requests return an error":"Detail pages stay online — requests return an error","mr dash note":"— means the replacement is not published in our catalog.","No retirements for this author.":"No retirements for this author.",Status:As,Announced:Ss,"Retirement date":"Retirement date",Replacement:Ls},Is="一个接口,无限模型",Cs="构建 AI 共赢生态",Ps="用户",Os="渠道",Rs="兑换",$s="日志",Ms="我的设置",Ts="登录",_s="注册",Es="退出登录",Ns="企业定制",Ds="控制台",Fs="统计单位",Us="重置",qs="或者",Hs="用户名",js="密码",zs="是",Vs="否",Ks="修改",Gs="联系客服",Bs="模型",Ws="输入",Js="输出",Ys="Key",Qs="状态",Zs="已启用",Xs="启用",er="已禁用",tr="禁用",or="已过期",nr="已耗尽",sr="未知",rr="操作",ar="编辑",ir="复制",lr="排序方式",ur="第 {{start}} - {{end}} 条",cr="提交",dr="取消",pr="充值",hr="消费",mr="管理",fr="系统",gr="类型",yr="全部",br="邮箱",wr="已绑定",vr="查询",xr="重置",kr="操作失败,重定向至登录界面中...",Ar="出现错误ï¼
1Œç¬¬ {{count}} 次重试中...",Sr="无限制",Lr="花费",Ir="使用趋势",Cr="分布占比",Pr="时间",Or="起始时间",Rr="今天",$r="趋势榜",Mr="手动选择",Tr="总",_r="Excel",Er="可用",Nr="初始化",Dr="支付宝",Fr="Stripe",Ur="兑换",qr="开发者",Hr="排名",jr="标签",zr="ä»·æ ¼",Vr="描述",Kr="反馈",Gr="隐私",Br="条款",Wr="特性",Jr="标签",Yr="类型",Qr="API 文档",Zr="添加",Xr="公告",ea="备注",ta="授权",oa="拒绝",na="授权",sa="刷新",ra="提供商",aa="定价",ia="模型属性",la="性能",ua="参数",ca="类型",da="取值",pa="说明",ha="已废弃",ma="未验证",fa="高峰时段",ga="对比",ya="模型对比",ba="更新",wa="已复制",va="能力",xa="上下文",ka="厂商未标注",Aa="模型",Sa="模态",La="吞吐量",Ia="发布时间",Ca="延迟",Pa="输入",Oa="输出",Ra="token",$a="请求",Ma="总计",Ta="用量",_a="Token",Ea="请求数",Na="模型广场",Da="免费",Fa="推理",Ua="工具调用",qa="视觉",Ha="清除",ja="重置周期",za="每天",Va="应用",Ka="推荐",Ga="即将下线",Ba="已下线",Wa="下线公示",Ja="在售",Ya="厂商",Qa="全部",Za="状态",Xa="公示日",ei="替代模型",oe={slogan:Is,"site Name":"AI HUB MIX","slogan desc 1":"一站式对接各种大模型。让开发更智能、更高效。","start to use":"立即体验","doc entrance":"文档","feature 1":"主流模型全覆盖","feature 1 desc":"连接包括 ChatGPT、Claude、Gemini、DeepSeek、Qwen 在内的所有主流 AI 模型。全部以统一格式提供。","price entrance":"全部模型 >","feature 2":"统一接口,模型轻松切","feature 2 desc":"作为 Azure、AWS、Google Cloud 的官方合作伙伴,我们集成官方 API 和专有服务,提供企业级可靠性和无限吞吐量。","feature 3":"无限并发,永远在线","feature 3 desc":"构建在跨行业验证稳定的高性能基础设施之上。","Model usage":"模型榜单",Partner:Cs,"Featured Apps":"构建 AI 共赢生态","Partner desc":"精选生态伙伴应用,立享所有模型(除 claude 系列模型外) 10% 优惠——持续接入中,欢迎成为下一个!","Partner off":"获取 10% 优惠","Earn with Your App":"集成 Aihubmix,立享 10% 优惠",User:Ps,Channel:Os,Redemption:Rs,"Usage statistics":"用量","Balance/Top-up":"充值","API keys":"秘钥",Log:$s,Setting:Ms,Login:Ts,Register:_s,"Signed in as":"当前登录账号",Logout:Es,"Model/Price"
1:"模型广场","App Store":"应用市场",Enterprise:Ns,Console:Ds,"Usage tutorial":"文档",Unit:Fs,"call times":"请求次数","Last week":"过去一周","Last month":"过去一月",Reset:Us,"forgot password?":"忘记密码?","no account?":"没有账号?","had account?":"已有账户?",OR:qs,"Sign in with Github":"使用 Github 登录","Sign in with Google":"使用 Google 登录",username:Hs,"username placeholder":"请输入用户名,最短3位,最长12位!",password:js,"password placeholder":"请输入密码,最短8位,最长20位","sign in success notice":"登录成功!","sign in failed notice":"未登录或登录已过期,请重新登录!","reset password notice":"请立刻修改默认密码!","typeof amount error notice":"额度只接受正整数!","pay failed notice":"支付失败!","pay success notice":"支付成功!","order close notice":"订单已关闭!","account balance":"余额","balance remind":"余额提醒","balance remind desc":"开启邮箱监控,赶走额度焦虑","close remind":"关闭余额提醒",yes:zs,no:Vs,modify:Ks,"close remind notice":"确认不再接收余额提醒邮件?","balance remind notice":"额度低于 ${{threshold}} 时,通知 {{email}}","set balance remind":"设置余额提醒","remind threshold":"低额阈值","remind threshold placeholder":"请输入正确的金额","remind email":"通知邮箱","remind email placeholder":"请输入邮箱地址","recharge online":"在线充值","recharge quota":"充值额度","custom recharge":"自定义","custom recharge placeholder":"最低1元,仅支持整数","recharge amount placeholder":"请输入整数金额","Payable amount":"结账:","alipay pay":"支付宝支付","alipay pay notice":"支付宝扫一扫完成付款","stripe pay":"Stripe支付",invoice:Gs,"quota notice":"需要发票 / 企业定制","exchange quota":"兑换额度","exchange code":"兑换码","exchange success notice":"兑换成功!","exchange code placeholder":"请输入充值兑换码","exchange code tooltip":"支付成功后,不要离开当前页面,等待10秒左右,页面就会展卡密即是兑换码",model:Bs,input:Ws,output:Js,"search model":"搜索模型","model price table":"后台扣费表","operation success":"操作成功!","key name":"Key 名称",key:Ys,status:Qs,enabled:Zs,enable:Xs,disabled:er,disable:tr,expired:or,exhausted:nr,uncertain:sr,"used quota":"已用","remain quota":"剩余额度","created time":"创建时间","expired time":"过期时间","expired time placeholder":"默认不限制","invalid time format":"过期时间格式错误!",operation:rr,edit:ar,delete:"删除","add key":"创建 Key","delete confirm":"删除数据","delete noice":"你确认删除名称为 {{name}}
1 的key?",copy:ir,"copy success":"复制成功!","my key":"我的 Key","go recharge":"去充值","key name placeholder":"请输入",sort:lr,"sort by remain quota":"按剩余额度","sort by used quota":"按已用额度",pagination:ur,"create key":"创建Key","create key success":"创建Key成功, 点击复制获取Key!","update key":"更新Key","update key success":"更新Key成功!","never expired":"永不","one month later expired":"一个月后过期","one day later expired":"一天后过期","one hour later expired":"一小时后过期","one minute later expired":"一分钟后过期","quota setting notice":"注意,新手建议选择无限额度,Key的额度仅用于限制Key本身的最大额度使用量,实际的使用受到账户的剩余额度限制。","quota limit":"额度限制","quota limit placeholder":"请输入限制额度","cancel quote unlimited":"取消无限额度","set quote unlimited":"设为无限额度","higher option":"此高级选项,新手勿操作","model range":"模型范围","model range placeholder":"默认不限制","model range tooltip":"限制当前Key可用的模型","IP limit":"IP限制","IP limit placeholder":"如:192.168.0.0/24","IP limit tooltip":"用于限制特定的用户IP,新手不建议设置",submit:cr,cancel:dr,"log detail":"日志明细",recharge:pr,consume:hr,manage:mr,system:fr,type:gr,all:yr,"max nums":"Excel(上限 10000)","model name":"模型名称","model price":"单价","cached tokens":"缓存 Tokens","quota change":"额度变动","start time":"开始时间","end time":"结束时间","personal setting":"我的","user name":"用户名","display name":"显示名称",email:br,"bind email address":"绑定邮箱地址","bind email address placeholder":"请输入邮箱地址","go bind":"绑定",binded:wr,"go update":"更新","send captcha":"获取验证码","captcha placeholder":"请输入验证码","log off account":"注销账号","go log off":"注销","log off notice":"您正在删除自己的帐户,将清空所有数据且不可恢复","log off confirm":"输入你的账户名 {{username}} 以确认删除","account name placeholder":"请输入账户名","token copied":"令牌已重置并已复制到剪贴板","invite code copied":"邀请链接已复制到剪切板","system token copied":"系统令牌已复制到剪贴板","log off confirm notice":"请输入你的账户名以确认删除!","log off success":"退出成功!","bind wechat success":"绑定微信成功!","captcha send success":"验证码发送成功,请检查邮箱","bind email success":"绑定邮箱成功!","common setting":"通用设置","common setting desc":"注意,此处生成的令牌用于系统管理,而非用于请求 OpenAI 相关的服务,请知悉。","generate token":"生成系统访问令牌","copy invite code":"邀请链接","account setting":"账户设置","avaliable models":"可用模型","update user":"更新用户信息","user update success":"用户信息更新成功!","new username":"新用户名","new username placeholder":"请输入新用户名,最短3位,最长12位","display name placeholder":"请输入显示名称","binded Github account":"已绑定的 Github 账号","binded Google account":"已绑定的 Google 账号","binded email account":"已绑定的邮箱账号","binded account placeholder":"此项只读,需要用户通过个人设置页面的相关绑定按钮进行绑定,不可直接修改",search:vr,reset:xr,"page not exist":"页面不存在","page not exist desc":"请检查你的浏览器地址是否正确","back to home":"返回首页","no permission":"没有权限访问此页面","no permission desc":"请联系管理员开通权限","bind success":"绑定成功","login success":"登录成功",redirecting:kr,retrying:Ar,"params error":"参数异常","connect server error":"无法正常连接至服务器!",unlimited:Sr,"statistics title":"API 使用统计",expense:Lr,"expense desc":"累计消费金额","usage token":"Token 消耗","usage token desc":"输入+输出Tokens","call times desc":"API调用总次数",trend:Ir,distribution:Cr,hour:Pr,"user id":"用户ID","user id placeholder":"请输入用户ID",period:Or,today:Rr,"last 7 days":"最近一周","last 30 days":"最近一月","week rank":"周排行","month rank":"月排行",trending:$r,manual:Mr,total:Tr,"usage detail":"调用记录",download:_r,"last half a year":"最近半年","recharge record":"充值记录","recharge time":"充值时间",available:Er,init:Nr,alipay:Dr,stripe:Fr,exchange:Ur,"data delay":"数据可能有1分钟延迟","model filter":"筛选",developer:qr,"total models":"全部:{{total}} 模型","entered passwords differ!":"两次输入的密码不一致!","register success":"注册成功!","password reset":"密码重置","password sub title":"请输入您的邮箱地址,我们将发送一封重置密码的邮件","send email text":"发送邮件","send email retry":"s 后重试","reset password email":"邮箱地址","reset password email placeholder":"请输入邮箱地址!","reset password email confirm":"请输入正确的邮箱地址!","reset password email success":"重置邮件发送成功,请检查邮箱!","reset password confirm":"密码重置确认","reset password confirm desc":"提交完成密码重置","new password":"新密码","get new password":"获取新密码","new password success":"密码重置完成","back login":"返回登录","new password copied":"新密码已复制到剪贴板:",rank:Hr,feature:jr,"unlimit quota":"无限额度","limit quota":"限制额度","advanced settings":"高级设置","model info":"模型信息",price:zr,"params count":"参数量","context length":"上下文长度","model params":"模型参数","param name":"参数名",desc:Vr,"default value":"示例值",Feedback:Kr,Privacy:Gr,Terms:Br,"Input name":"输入","Output name":"输出","Context name":"上下文","Latency name":"延迟","Throughput name":"吞吐率",features:Wr,tags:Jr,types:Yr,"Model Details":"模型详情",usage:Qr,"try in playground":"在 Playground 试用","media async tasks note":"这些 /ai/v1 媒体接口按异步任务执行,请先为账号开通「异步任务」,否则创建任务会返回 403 async_not_enabled。","async tasks guide":"异步任务文档",add:Zr,"remind off":"关闭","remind on":"开启",notice:Xr,"surfing cost":"搜索费用","unuser title":"生成专属 Code","unuser desc":"请登录或注册,生成专属 Code 并解锁 10% 优惠","unuser btn":"去登录","not now":"暂不需要","user title":"你的 10% 优惠码已就绪!","user desc":"专属推荐码已激活,代码示例已自动填充。现在就用下方代码快速接入吧。","user btn":"知道了","get code":"获取 Code","get code desc":`1. 在你的应用中集成 AIhubmix 作为模型供应商,并在请求头中增加应用 Code;
22. 获得 10% 优惠条件:开源或者需要用户自行填写模型 key 的应用,只需要把 AIhubmix 作为模型供应商,用户直接填写 key 即可使用;
33. 闭源项目只需在应用中有说明模型提供来自 AIhubmix 即可;
44. AIhubmix 对优惠活动有最终解释权,有权对不符合条件的应用取消优惠或对恶意钻漏洞的账户进行封禁。`,"get code notice":"请登录或注册,生成专属 Code 并解锁 10% 优惠","app name":"应用名称","app url":"应用域名","app name placeholder":"请输入应用名称","app url placeholder":"请输入应用域名","apps notice":"已集成 AIHubmix 为模型供应商,所有模型(除 claude 系列模型外)请求计费","app url tooltip":"确保是您的有效产品域名",remark:ea,"10% off":"10% 优惠","learn more":"更多详情",authorize:ta,"authorize app":"授权 {{appName}}","authorize account login":"授权使用你的帐号信息","permissions granted":"获得以下权限:","no special permissions":"无特殊权限","user basic info":"用户基本信息(用户名、邮箱)","user balance info":"用户余额信息",deny:oa,allow:na,"contact developer":"更多信息请联系应用开发者","missing parameters":"缺少必要参数","app info fetch failed":"应用信息获取失败","authorization request failed":"授权请求失败",refresh:sa,"column settings":"列设置","go generate":"生成","Pricing Details":"价格详情","Image Generation":"图像生成","Input Modalities":"输入模态","Output Modalities":"输出模态",Providers:ra,Pricing:aa,"Quick Start":"快速开始",Attributes:ia,"More Models":"更多模型","API Usage Examples":"接口调用示例","model data api":"模型数据接口",Performance:la,"Performance for":"性能对比","No data available":"暂无数据","Smart Routing":"智能路由","router hero title":"并不是每一次请求,都需要最强最贵的模型","router hero sub":"智能路由为每个请求实时选出最佳模型,在不影响任务质量的前提下大幅降低成本;模型缓存支持,同一会话自动保持同一模型,避免缓存丢失。","router hero session":"无需额外改造:Claude Code、Codex、OpenCode 等主流 Agent 的会话标识会被自动识别。需要精确控制会话范围时,可在请求中添加:","router hero note":"评分覆盖 {{groups}} 大类、{{dims}} 个子维度,来自内部测评与外部公开榜单的综合归一化。","router hero doc":"接口文档","router copy":"复制","router copied":"已复制","router code sync":"路由策略","router code comment default":"不带后缀 = auto:cost_optimized(默认)","router code comment strategy":"策略:{{name}}","router strat eyebrow":"路由策略","router strat title":"四大路由策略对应的模型范围","router default tag":"默认","router weight quality":"能力","router weight cost":"成本","router weight latency":"延迟","router strat cost_optimized":"成本优先","router strat cost_optimized desc":"能力达标就选最便宜。","router strat balanced":"均衡","router strat balanced desc":"能力 / 成本 / 延迟兼顾。","router strat quality_first":"质量优先","router strat quality_first desc":"优先选能力最强。","router strat latency_critical":"速度优先","router strat latency_critical desc":"优先选响应最快。","router col model":"模型","router col score":"归一化分数","router col price":"输入 / 输出价格","router col latency":"首字延迟","router best tag":"当前首选","router sort route":"按「{{name}}」策略加权排序","router sort score":"按分数排序","router sort price":"按价格排序","router sort latency":"按延迟排序","router source note":"数据来源:内部测评与外部公开榜单,综合归一化。","router group text":"文本","router group vision":"视觉","router group code_webdev":"Web 开发","router group search":"联网搜索","router group document":"文档分析","router dim text_overall":"总体","router dim text_coding":"编程","router dim text_math":"数学","router dim text_instruction_following":"指令遵循","router dim text_longer_query":"长查询","router dim text_language_chinese":"语言 › 中文","router dim text_language_english":"语言 › 英文","router dim text_occupational_software_it":"职业 › 软件 / IT","router dim text_occupational_mathematical":"职业 › 数理","router dim text_occupational_legal":"职业 › 法律 / 政
4务","router dim text_occupational_medicine":"职业 › 医疗 / 健康","router dim vision_overall":"总体","router dim vision_ocr":"视觉文字理解","router dim vision_diagram":"图表","router dim vision_homework":"作业","router dim vision_chinese":"中文","router dim vision_english":"英文","router dim code_webdev_overall":"总体","router dim code_webdev_html":"HTML","router dim code_webdev_react":"React","router dim code_image_to_webdev_overall":"图像转 Web","router dim search_overall":"总体","router dim document_overall":"总体","router card sub":"AIHubMix 智能路由","router card desc":"AIHubmix 自研的模型自动路由器。我们认为不是所有请求都需要最强、最贵的模型——网关综合内部测评与公开榜单,覆盖当前一批主流、能力各异的模型,通过我们训练的小模型进行自动路由。请求时把 model 填为 auto,即可按请求内容自动分配合适的模型,降低请求成本。目前为 beta 版本,我们会持续更新优化。","router card fee":"按实际命中模型的原价计费,智能路由本身不额外收费。","router card cta":"了解智能路由","Request Parameters":"请求参数",Parameter:ua,Type:ca,Values:da,Description:pa,Deprecated:ha,"Not supported on this model":"该模型上不支持",Unverified:ma,"up to {{off}}% off":"最高立减 {{off}}%","{{off}}% off":"立减 {{off}}%","Uptime is the percentage of requests that succeeded over the past 72 hours. AIHubMix continuously monitors every provider and automatically retries with the next-best provider when one returns an error or responds too slowly.":"Uptime 指过去 72 小时内请求成功的百分比。AIHubMix 持续监控每个供应商,当某个供应商返回错误或响应过慢时,会自动切换到次优供应商重试。","Throughput is how fast the model writes (tokens per second, higher is better).":"Throughput 指模型的输出速度(每秒 token 数,越高越好)。","Latency is total round-trip time (lower is better).":"Latency 指请求的总往返耗时(越低越好)。",Peak:fa,"Off-peak":"空闲时段","Active hours":"生效时段","Other hours":"其余时段",Compare:ga,Comparisons:ya,"Add model":"添加模型","Data snapshot":"数据快照",Update:ba,Copied:wa,"Copy link":"复制链接","requests this week":"次本周调用","Pick a second model to start comparing.":"选择第二个模型开始对比。","Pick two models above, or start from one of the comparisons below.":"在上方选择两个模型,或从下面的热门对比开始。","What a comparison shows":"对比页展示什么","Every comparison puts 2 to 4 models side by side on the same objective metrics.":"每个对比把 2 到 4 个模型放在同一组客观指标下并排展示。","Pricing per million input and output tokens, with any active discount applied.":"每百万输入 / 输出 token 的价格,已计入正在生效的折扣。","Context window and maximum output length.":"上下文窗口与最大输出长度。","Latency and throughput, as rolling averages measured on AIHubMix.":"延迟与吞吐,取 AIHubMix 实测的滚动平均值。","Arena scores, where the model has been rated.":"Arena 榜单分(该模型已被评分时展示)。","Real usage on AIHubMix: weekly requests and token trends.":"AIHubMix 上的真实用量:周调用次数与 token 趋势。","A monthly cost estimate for your own request volume.":"按你自己的请求量估算的月度成本。","How it works":"怎么用","Add models with the picker above. The URL holds your selection, so a comparison can be shared or bookmarked.":"用上方选择器添加模型。URL 会记住你的选择,对比结果可以直接分享或收藏。","Figures are a cached snapshot; the page states when it was taken and refreshes on demand.":"页面数值是缓存快照,页内标注了快照时间,可随时手动刷新为最新数据。","Every model on AIHubMix is callable through one API key and one base URL, so a price you compare here is the price you actually pay.":"AIHubMix 上所有模型共用一个 API key 和一个 base URL,因此这里比出来的价格就是你实际支付的价格。","Specs & Pricing":"规格与价格","Input price":"输入价格","Output price":"输出价格","Cache read":"缓存读取","Context window":"上下文窗口","Max output":"最大输出","Latency (first token)":"首字延迟","Usage on AIHubMix":"AIHubMix 用量","last 3 days":"近 3 天","Requests / day":"每日调用次数","Tokens / day":"每日 Token 用量","Live Performance":"实时性能","Arena Scores":"Arena 评分","Cost Calculator":"成本估算","Estimate your monthly bill for the same workload on each model.":"估算同一工作负载在各模型上的每月费用。","Avg input tokens / request":"平均每次输入 Token","Avg output tokens / request":"平均每次输出 Token","Popular Comparisons":"热门对比","Related model match-ups readers also look at.":"大家也在看的模型对比组合。","Which is cheaper":"哪个更便宜","Which responds faster?":"哪个响应更快?","Compare pricing, specs, live performance and arena scores side by side. Up to 4 models.":"并排对比价格、规格、实时性能与 Arena 评分,最多 4 个模型。","Prices are per million tokens. Latency and throughput are rolling averages measured on AIHubMix.":"价格按每百万 Token 计。延迟与吞吐为 AIHubMix 实测滚动均值。","Daily traffic served through AIHubMix — how demand for each model is trending.":"AIHubMix 每日真实流量——各模型需求趋势。","Measured on real AIHubMix traffic, hourly buckets. Gaps mean no traffic in that hour.":"基于 AIHubMix 真实流量,小时粒度;断线表示该小时无流量。","LMArena ratings by capability (Bradley-Terry, commonly called Elo). Higher is better.":"按能力维度的 LMArena 评分(Bradley-Terry,俗称 Elo),分数越高越好。","No published ratings for":"暂无榜单数据:","Monthly = daily × 30. Discounted rates applied where a promotion is active.":"月费用 = 日用量 × 30;促销生效时按折后价计算。","Promotional prices show the discounted rate; see each model page for promotion windows.":"促销价为折后价,促销时段见各模型详情页。",Capabilities:va,Context:xa,capabilityUndocumented:ka,"Max Output":"最大输出","mirror warning title":"已为你跳转到 AIHubMix 官方站点","mirror warning desc":"{{host}}
4 不是 AIHubMix 的官方域名。在那里输入的任何内容——密码、API 密钥、支付信息——都会经过对方的服务器。我们唯一的官方站点是 aihubmix.com。","mirror warning desc generic":"你来自的站点不是 AIHubMix 的官方域名。在那里输入的任何内容——密码、API 密钥、支付信息——都会经过对方的服务器。我们唯一的官方站点是 aihubmix.com。","Not published in the catalog":"目录中未公布该值","mod text":"文本","mod vision":"视觉","mod audio":"音频","mod video":"视频","mod file":"文件","mod pdf":"PDF","Takes {{mods}}. Output modality not published.":"输入 {{mods}}。输出模态未公布。","Takes {{in}}, returns {{out}}.":"输入 {{in}},输出 {{out}}。","Official spec, verified {{date}}. The gateway route is configured at {{ctx}}.":"官方规格,{{date}} 核验。网关路由配置为 {{ctx}}。","Copy model ID {{id}}":"复制模型 ID {{id}}",Model:Aa,Modalities:Sa,"col context":"上下文","col cache read":"缓存读","Cache write":"缓存写",Throughput:La,Released:Ia,Latency:Ca,Input:Pa,Output:Oa,"{{count}} more models_other":"其余 {{count}} 个模型","Daily {{noun}} for {{dev}} models over the last {{days}} days, stacked by model, up to {{top}} per day.":"{{dev}} 模型近 {{days}} 天的每日{{noun}}(按模型堆叠),单日最高 {{top}}。",tokens:Ra,requests:$a,"Chart legend":"图例",Total:Ma,Usage:Ta,"Measure usage by":"用量统计维度","By tokens":"按 token","By requests":"按请求数","Last {{days}} days":"近 {{days}} 天","date range to":"至",Tokens:_a,Requests:Ea,"Models in use":"在用模型","of {{total}}":"/ 共 {{total}} 个","Tokens per day, stacked by model":"每日 token(按模型堆叠)","Requests per day, stacked by model":"每日请求数(按模型堆叠)","Which models that traffic went to":"流量流向了哪些模型","Share of {{total}} tokens.":"占 {{total}} token 的份额。","Share of {{total}} requests.":"占 {{total}} 次请求的份额。","{{count}} models with traffic report no token counts and cannot be ranked here":"{{count}} 个有流量的模型未上报 token 数,无法进入此排名","tok missing including":",包括 ","tok missing and":" 和 ","tok missing tail":"——它们在“按请求数”视图中。","usage views disagree note":"两个视图不一致是有意为之:一个模型可能占调用次数的大头、却只占 token 的一小部分——大量短请求——反之亦然。哪个视图更重要,取决于你的成本由调用量驱动还是由提示词长度驱动。以上为 AIHubMix 近 {{days}} 天实测,统计本页列出的 {{count}} 个模型 ID;经由公开目录之外的上游专用 ID 的流量不计入。",Models:Na,"Model Authors":"模型开发商","{{dev}} Models":"{{dev}} 模型","models unit_other":"个模型","authors unit_other":"家开发商","General models":"通用模型",free:Da,"to start":"起步","General models from":"通用模型低至","input unit":"输入","Up to":"最高","context unit":"上下文","Official site":"官网","All {{count}} {{dev}} Models":"{{dev}} 全部 {{count}} 个模型","Open in model list":"在模型列表中打开",Reasoning:Fa,Tools:Ua,"Structured output":"结构化输出",Vision:qa,"1M+ context":"1M+ 上下文","Cache discount":"缓存折扣",Clear:Ha,"{{shown}} of {{total}} models":"{{total}} 个模型中显示 {{shown}} 个","provider table caption":"{{dev}} 在 AIHubMix 上的模型:输入/输出模态、上下文长度、最大输出、每百万 token 价格(含缓存读/写费率),以及实测吞吐与延迟。","Show first {{count}}":"收起到前 {{count}} 个","Show all {{count}} models":"展开全部 {{count}} 个模型","provider table footnote":"价格为每百万 token 的美元价;缓存读/缓存写分别是提示词缓存命中与写入缓存的费率。吞吐与延迟为 AIHubMix 实测——与模型详情页展示的是同一组数字——并非厂商宣称值。“—”表示目录未公布该模型的这一字段,不等于模型不支持。","Common Comparisons":"常见对比","{{dev}} on AIHubMix":"AIHubMix 上的 {{dev}}","Other Model Authors":"其他开发商","Start calling {{dev}} in one line":"一行代码开始调用 {{dev}}","One key, one endpoint, {{models}} models across {{devs}} model authors.":"一个密钥、一个端点,{{devs}} 家开发商的 {{models}} 个模型。","Get API key":"获取 API 密钥","Read the docs":"查看文档","Free models":"免费模型","Free AI Models":"免费 AI 模型","fm lead base":"免费模型的意义,是让实验、学习和上线不必从账单开始——本页 {{count}} 个模型的推理成本由 AIHubMix 承担,且每个模型都同时支持 Chat Completions、
4Messages、Responses 三种协议","fm lead trial":"。注册即得 {{trial}} 次试用调用,无需信用卡","fm lead topup":";充值 ${{usd}} 后转为永久每日配额。","fm lead end":"。","Every model":"每个模型都是","/M input & output":"/M 输入 & 输出","Updated {{date}}":"更新于 {{date}}","Model authors with free models":"提供免费模型的开发商","{{name}} models on AIHubMix":"AIHubMix 上的 {{name}} 模型","Before your first top-up":"首充之前","No credit card required, and trial calls never expire.":"无需信用卡,试用调用永不过期。","Trial calls":"试用调用","total, all free models":"总计,全部免费模型共享","After a one-time ${{usd}} top-up":"充值 ${{usd}} 之后","fm paid lane desc":"只需充值一次——金额 ${{usd}} 起——所有免费模型即切换为每日配额,永不过期、每天重置。","/day unit":"/天","/min unit":"/分钟",Resets:ja,daily:za,"fm tok missing":"{{count}} 个有流量的模型未上报 token 数,仅出现在“按请求数”视图中。","All {{count}} Free Models":"全部 {{count}} 个免费模型","fm table caption":"AIHubMix 上的全部免费模型(按目录顺序):开发商、输入/输出模态、上下文长度,以及充值后账户下各模型的速率上限。","Rate limit":"速率上限","Paid version":"付费版本","Compare {{a}} with {{b}}":"对比 {{a}} 与 {{b}}","vs paid":"对比付费版","fm table note base":"速率上限展示的是充值后账户的每日与每分钟请求上限。部分模型请求权重更高——一次调用计为多次请求——所以上限更低。","fm table note pool":" 全部免费模型共享每天 {{tokens}} token 的总池。","fm table note trial":" 首充之前按 {{trial}} 次试用调用计。","fm table note tail":"上下文为“—”表示目录未公布该值。模态按 输入 → 输出 读——与开发商页展示同一事实;缺少输出侧表示目录未公布,不代表模型没有输出。","How to Start":"如何开始","Create an account":"注册账号","Email or OAuth, no credit card required.":"邮箱或 OAuth 登录,无需信用卡。","{{trial}} trial calls are available immediately.":"{{trial}} 次试用调用即刻可用。","Create an API key":"创建 API 密钥","One key works for every model on the platform, free and paid alike.":"一个密钥即可调用平台上所有模型,免费与付费一视同仁。","Open the API keys page":"打开 API 密钥页","Call a free model":"调用免费模型","fm step3 pre":"把任意 OpenAI 兼容客户端——Cursor、Cline、Cherry Studio、LiteLLM——指向网关,选择一个 ","fm step3 post":" 模型 ID 即可。","API protocol":"API 协议","Free Models on AIHubMix":"AIHubMix 上的免费模型","Keep Exploring":"继续探索","All Models":"全部模型","fm explore models desc":"完整目录——{{count}} 个模型,覆盖对话、图像、视频与音频,按 token 计价。","Browse all models":"浏览全部模型","LLM Router":"LLM Router","fm router desc pre":"把模型 ID 填成 ","fm router desc post":",网关会按成本与质量把每次请求路由到最优模型。","Try the router":"试试路由",Apps:Va,"fm apps desc":"AIHubMix 应用商店里开箱即用的应用——以及免费目录之外的模型折扣。","Browse the app store":"逛逛应用商店",Recommended:Ka,"Switch version":"切换版本","Model versions":"模型版本","AI Model Authors":"AI 模型开发商","authors index stats":"{{providers}} 家开发商、{{models}} 个模型,一个 API Key。","authors index desc":"每个开发商页都列出其全部模型:按 token 计价、上下文窗口与实测吞吐。","All model authors":"全部开发商","calls 30d":"次调用 · 30 天","See all model authors":"查看全部开发商","Retired models":"已下线模型",Deprecating:Ga,Retired:Ba,Retirements:Wa,"Model Retirements":"模型下线公示","mr lead":"模型会因上游厂商停服或替换而下线。已排期和已下线的模型全部列在这里,附调用停止的日期和推荐的替代模型。","scheduled for retirement":"个模型已排期下线","already retired":"个模型已下线","Browse all {{count}} models":"浏览全部 {{count}} 个模型",Active:Ja,"Fully supported. No retirement date announced.":"正常提供,未公布下线日期。","Still callable, but a retirement date is set. Migrate before that date.":"仍可调用,但已定下线日期,请在该日期前完成迁移。","No longer callable. Requests return":"不再可调用,请求返回","Filter by author":"按厂商筛选",Author:Ya,All:Qa,"Upcoming retirements":"即将下线","Still callable — migrate before the retirement date":"仍可调用——请在下线日期前完成迁移","Detail pages stay online — requests return an error":"详情页保留,但调用会直接报错","mr dash note":"— 表示本站目录中没有对应的替代模型。","No retirements for this author.":"该厂商没有下线模型。",Status:Za,Announced:Xa,"Retirement date":"下线日",Replacement:ei}
4,qe={zh:"zh","zh-CN":"zh","zh-hans":"zh","zh-hans-cn":"zh","zh-TW":"zh-TW","zh-HK":"zh-TW","zh-tw":"zh-TW","zh-hant":"zh-TW","zh-hant-tw":"zh-TW",en:"en","en-US":"en","en-GB":"en","en-AU":"en","en-CA":"en","en-NZ":"en","en-IE":"en","en-ZA":"en",ja:"ja",ko:"ko",de:"de",es:"es",fr:"fr",pt:"pt",ru:"ru",tr:"tr",pl:"pl",nl:"nl",it:"it",vi:"vi",uk:"uk",bg:"bg"},ee=async n=>{const e=qe[n]||qe[String(n||"").split("-")[0]]||n;if(!b.hasResourceBundle(n,"translation"))try{let t;switch(e){case"zh-TW":t=await P(()=>import("./zh-TW-DeXKFggQ.js"),[]);break;case"ja":t=await P(()=>import("./ja-Dne5AhFZ.js"),[]);break;case"ko":t=await P(()=>import("./ko-CJR1D-U1.js"),[]);break;case"de":t=await P(()=>import("./de-B2Svfd0-.js"),[]);break;case"es":t=await P(()=>import("./es-BaHZBcWC.js"),[]);break;case"fr":t=await P(()=>import("./fr-CXPCEXZO.js"),[]);break;case"pt":t=await P(()=>import("./pt-BBilbWtJ.js"),[]);break;case"ru":t=await P(()=>import("./ru-DQ1S2Mc9.js"),[]);break;case"tr":t=await P(()=>import("./tr-IA76tsO3.js"),[]);break;case"pl":t=await P(()=>import("./pl-CpWu-cs7.js"),[]);break;case"nl":t=await P(()=>import("./nl-B7qSTY5B.js"),[]);break;case"it":t=await P(()=>import("./it-DTyteECB.js"),[]);break;case"vi":t=await P(()=>import("./vi-D4cw0KbT.js"),[]);break;case"uk":t=await P(()=>import("./uk-3NOaXRf0.js"),[]);break;case"bg":t=await P(()=>import("./bg-DnpS-Qmc.js"),[]);break;default:return}t&&b.addResourceBundle(n,"translation",t.default)}catch(t){console.warn(`Failed to load language: ${n}`,t)}},ti={name:"navigatorEnForZh",lookup(){if(typeof navigator>"u")return;const n=navigator.languages&&navigator.languages.length?navigator.languages:[navigator.language||navigator.userLanguage],e=(n[0]||"").toLowerCase();if(e)return e.startsWith("zh")?"en":n[0]},cacheUserLanguage(){}},Ye=new Je;Ye.addDetector(ti);function oi(n){if(!n||n==="localhost"||/^[\d.]+$|[:[\]]/.test(n))return;const e=n.split(".");return e.length<2?void 0:"."+e.slice(-2).join(".")}const U=typeof window<"u"?oi(window.location.hostname):void 0,ni=3600*24*365;function Qe(n){document.cookie=`i18nextLng=${n}; path=/; max-age=${ni}`+(U?`; domain=${U}`:"")+"; SameSite=Lax"}function si(){document.cookie="i18nextLng=; path=/; max-age=0",U&&(document.cookie=`i18nextLng=; path=/; max-age=0; domain=${U}`)}let Q=null;if(typeof document<"u"){const n=document.cookie.match(/(?:^|;\s*)i18nextLng=([^;]*)/);Q=n&&n[1]?n[1]:null,U&&(document.cookie="i18nextLng=; path=/; max-age=0",Q&&Qe(Q))}const we=typeof window<"u"&&typeof document<"u"&&!!window.__reactRouterContext,ri=we&&document.documentElement.lang||"en";we&&window.addEventListener("load",()=>{setTimeout(()=>{Q?Qe(Q):si();const n=b.services.languageDetector?b.services.languageDetector.detect():void 0,e=Array.isArray(n)?n[0]:n;Promise.resolve(e?ee(e):void 0).then(()=>{P(async()=>{const{startTransition:t}=await import("./jsx-runtime-C5Zd082J.js").then(o=>o.R);return{startTransition:t}},[]).then(({startTransition:t})=>{t(()=>{b.changeLanguage(e||void 0)})})})},0)},{once:!0});b.use(Ye).use(mt).init({...we?{lng:ri}:{},resources:{zh:{translation:oe},"zh-CN":{translation:oe},"zh-hans":{translation:oe},"zh-hans-cn":{translation:oe},en:{translation:D},"en-US":{translation:D},"en-GB":{translation:D},"en-AU":{translation:D},"en-CA":{translation:D},"en-NZ":{translation:D},"en-IE":{translation:D},"en-ZA":{translation:D}},detection:{lookupQuerystring:"lang",lookupLocalStorage:"i18nextLng",lookupCookie:"i18nextLng",caches:["cookie"],cookieMinutes:525600,...U?{cookieDomain:U}:{},order:["querystring","cookie","navigatorEnForZh","htmlTag"]},fallbackLng:"en",interpolation:{escapeValue:!1}});b.on("languageChanged",n=>{ee(n)});const ci=n=>{ee(n)},di=async n=>{try{await ee(n)}catch{}return b.changeLanguage(n)},me=b.language;me&&!["zh","zh-CN","zh-hans","zh-hans-cn","en","en-US","en-GB","en-AU","en-CA","en-NZ","en-IE","en-ZA"].includes(me)&&ee(me);export{Ve as _,G as a,di as c,b as i,ci as p,ui as u};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.