diff --git a/.env.example b/.env.example index 2e64ab531..159a57a03 100644 --- a/.env.example +++ b/.env.example @@ -15,6 +15,11 @@ HOST=0.0.0.0 # 默认: 7861 PORT=7861 +# 反代保留路径前缀时需剥掉的前缀 (如 /AGY2API) +# 仅在反代将 /AGY2API/xxx 原样转发到本服务时配置; 反代已剥掉前缀时留空 +# 默认: 空 (不剥离) +PATH_PREFIX= + # ================================================================ # 密码配置 (分离密码) # ================================================================ diff --git a/README.md b/README.md index e1588944b..b625a2bc2 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,7 @@ docker run -d --name agy2api --network host -e API_PASSWORD=api_pwd -e PANEL_PAS - `OAUTH_PROXY_URL`: OAuth 认证代理端点 - `GOOGLEAPIS_PROXY_URL`: Google APIs 代理端点 - `ANTIGRAVITY_API_URL`: Antigravity API 端点 +- `PATH_PREFIX`: 反代保留路径前缀(如 `/AGY2API`)时配置,由后端在路由匹配前剥掉该前缀;默认:空(不剥离) **性能和稳定性配置** - `RETRY_429_ENABLED`: 启用错误自动重试(默认:true) diff --git a/dist/assets/index-cWGLDUMD.js b/dist/assets/index-BgEyAGbN.js similarity index 63% rename from dist/assets/index-cWGLDUMD.js rename to dist/assets/index-BgEyAGbN.js index a9df5e3ef..ef9505303 100644 --- a/dist/assets/index-cWGLDUMD.js +++ b/dist/assets/index-BgEyAGbN.js @@ -1,4 +1,4 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerPolicy&&(l.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?l.credentials="include":s.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(s){if(s.ep)return;s.ep=!0;const l=n(s);fetch(s.href,l)}})();function Gf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Zu={exports:{}},vl={},ec={exports:{}},q={};/** +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const l of s)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(s){const l={};return s.integrity&&(l.integrity=s.integrity),s.referrerPolicy&&(l.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?l.credentials="include":s.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(s){if(s.ep)return;s.ep=!0;const l=n(s);fetch(s.href,l)}})();function Jf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ec={exports:{}},wl={},tc={exports:{}},q={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var es=Symbol.for("react.element"),Jf=Symbol.for("react.portal"),Xf=Symbol.for("react.fragment"),Yf=Symbol.for("react.strict_mode"),Zf=Symbol.for("react.profiler"),ep=Symbol.for("react.provider"),tp=Symbol.for("react.context"),np=Symbol.for("react.forward_ref"),rp=Symbol.for("react.suspense"),sp=Symbol.for("react.memo"),lp=Symbol.for("react.lazy"),ka=Symbol.iterator;function op(e){return e===null||typeof e!="object"?null:(e=ka&&e[ka]||e["@@iterator"],typeof e=="function"?e:null)}var tc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},nc=Object.assign,rc={};function tr(e,t,n){this.props=e,this.context=t,this.refs=rc,this.updater=n||tc}tr.prototype.isReactComponent={};tr.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};tr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function sc(){}sc.prototype=tr.prototype;function xi(e,t,n){this.props=e,this.context=t,this.refs=rc,this.updater=n||tc}var vi=xi.prototype=new sc;vi.constructor=xi;nc(vi,tr.prototype);vi.isPureReactComponent=!0;var Sa=Array.isArray,lc=Object.prototype.hasOwnProperty,wi={current:null},oc={key:!0,ref:!0,__self:!0,__source:!0};function ic(e,t,n){var r,s={},l=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(l=""+t.key),t)lc.call(t,r)&&!oc.hasOwnProperty(r)&&(s[r]=t[r]);var a=arguments.length-2;if(a===1)s.children=n;else if(1>>1,H=R[W];if(0>>1;Ws(ee,D))Xs(V,ee)?(R[W]=V,R[X]=D,W=X):(R[W]=ee,R[b]=D,W=b);else if(Xs(V,D))R[W]=V,R[X]=D,W=X;else break e}}return A}function s(R,A){var D=R.sortIndex-A.sortIndex;return D!==0?D:R.id-A.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var o=Date,a=o.now();e.unstable_now=function(){return o.now()-a}}var u=[],d=[],m=1,y=null,h=3,v=!1,S=!1,w=!1,z=typeof setTimeout=="function"?setTimeout:null,c=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(R){for(var A=n(d);A!==null;){if(A.callback===null)r(d);else if(A.startTime<=R)r(d),A.sortIndex=A.expirationTime,t(u,A);else break;A=n(d)}}function x(R){if(w=!1,p(R),!S)if(n(u)!==null)S=!0,Y(k);else{var A=n(d);A!==null&&Se(x,A.startTime-R)}}function k(R,A){S=!1,w&&(w=!1,c(E),E=-1),v=!0;var D=h;try{for(p(A),y=n(u);y!==null&&(!(y.expirationTime>A)||R&&!Q());){var W=y.callback;if(typeof W=="function"){y.callback=null,h=y.priorityLevel;var H=W(y.expirationTime<=A);A=e.unstable_now(),typeof H=="function"?y.callback=H:y===n(u)&&r(u),p(A)}else r(u);y=n(u)}if(y!==null)var Ne=!0;else{var b=n(d);b!==null&&Se(x,b.startTime-A),Ne=!1}return Ne}finally{y=null,h=D,v=!1}}var N=!1,j=null,E=-1,F=5,P=-1;function Q(){return!(e.unstable_now()-PR||125W?(R.sortIndex=D,t(d,R),n(u)===null&&R===n(d)&&(w?(c(E),E=-1):w=!0,Se(x,D-W))):(R.sortIndex=H,t(u,R),S||v||(S=!0,Y(k))),R},e.unstable_shouldYield=Q,e.unstable_wrapCallback=function(R){var A=h;return function(){var D=h;h=A;try{return R.apply(this,arguments)}finally{h=D}}}})(fc);dc.exports=fc;var xp=dc.exports;/** + */(function(e){function t(R,A){var D=R.length;R.push(A);e:for(;0>>1,H=R[W];if(0>>1;Ws(ee,D))Xs(V,ee)?(R[W]=V,R[X]=D,W=X):(R[W]=ee,R[b]=D,W=b);else if(Xs(V,D))R[W]=V,R[X]=D,W=X;else break e}}return A}function s(R,A){var D=R.sortIndex-A.sortIndex;return D!==0?D:R.id-A.id}if(typeof performance=="object"&&typeof performance.now=="function"){var l=performance;e.unstable_now=function(){return l.now()}}else{var o=Date,a=o.now();e.unstable_now=function(){return o.now()-a}}var u=[],d=[],m=1,y=null,h=3,v=!1,S=!1,w=!1,z=typeof setTimeout=="function"?setTimeout:null,c=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(R){for(var A=n(d);A!==null;){if(A.callback===null)r(d);else if(A.startTime<=R)r(d),A.sortIndex=A.expirationTime,t(u,A);else break;A=n(d)}}function x(R){if(w=!1,p(R),!S)if(n(u)!==null)S=!0,Y(k);else{var A=n(d);A!==null&&Se(x,A.startTime-R)}}function k(R,A){S=!1,w&&(w=!1,c(E),E=-1),v=!0;var D=h;try{for(p(A),y=n(u);y!==null&&(!(y.expirationTime>A)||R&&!Q());){var W=y.callback;if(typeof W=="function"){y.callback=null,h=y.priorityLevel;var H=W(y.expirationTime<=A);A=e.unstable_now(),typeof H=="function"?y.callback=H:y===n(u)&&r(u),p(A)}else r(u);y=n(u)}if(y!==null)var Ne=!0;else{var b=n(d);b!==null&&Se(x,b.startTime-A),Ne=!1}return Ne}finally{y=null,h=D,v=!1}}var N=!1,j=null,E=-1,F=5,P=-1;function Q(){return!(e.unstable_now()-PR||125W?(R.sortIndex=D,t(d,R),n(u)===null&&R===n(d)&&(w?(c(E),E=-1):w=!0,Se(x,D-W))):(R.sortIndex=H,t(u,R),S||v||(S=!0,Y(k))),R},e.unstable_shouldYield=Q,e.unstable_wrapCallback=function(R){var A=h;return function(){var D=h;h=A;try{return R.apply(this,arguments)}finally{h=D}}}})(pc);fc.exports=pc;var vp=fc.exports;/** * @license React * react-dom.production.min.js * @@ -30,44 +30,44 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var vp=O,Xe=xp;function C(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),wo=Object.prototype.hasOwnProperty,wp=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ja={},_a={};function kp(e){return wo.call(_a,e)?!0:wo.call(ja,e)?!1:wp.test(e)?_a[e]=!0:(ja[e]=!0,!1)}function Sp(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Np(e,t,n,r){if(t===null||typeof t>"u"||Sp(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Fe(e,t,n,r,s,l,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=o}var Ce={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ce[e]=new Fe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ce[t]=new Fe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ce[e]=new Fe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ce[e]=new Fe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ce[e]=new Fe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ce[e]=new Fe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ce[e]=new Fe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ce[e]=new Fe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ce[e]=new Fe(e,5,!1,e.toLowerCase(),null,!1,!1)});var Si=/[\-:]([a-z])/g;function Ni(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Si,Ni);Ce[t]=new Fe(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Si,Ni);Ce[t]=new Fe(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Si,Ni);Ce[t]=new Fe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ce[e]=new Fe(e,1,!1,e.toLowerCase(),null,!1,!1)});Ce.xlinkHref=new Fe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ce[e]=new Fe(e,1,!1,e.toLowerCase(),null,!0,!0)});function ji(e,t,n,r){var s=Ce.hasOwnProperty(t)?Ce[t]:null;(s!==null?s.type!==0:r||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ko=Object.prototype.hasOwnProperty,kp=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,_a={},Ea={};function Sp(e){return ko.call(Ea,e)?!0:ko.call(_a,e)?!1:kp.test(e)?Ea[e]=!0:(_a[e]=!0,!1)}function Np(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function jp(e,t,n,r){if(t===null||typeof t>"u"||Np(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Fe(e,t,n,r,s,l,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=s,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=l,this.removeEmptyString=o}var Ce={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ce[e]=new Fe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ce[t]=new Fe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ce[e]=new Fe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ce[e]=new Fe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ce[e]=new Fe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ce[e]=new Fe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ce[e]=new Fe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ce[e]=new Fe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ce[e]=new Fe(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ni=/[\-:]([a-z])/g;function ji(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ni,ji);Ce[t]=new Fe(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ni,ji);Ce[t]=new Fe(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ni,ji);Ce[t]=new Fe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ce[e]=new Fe(e,1,!1,e.toLowerCase(),null,!1,!1)});Ce.xlinkHref=new Fe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ce[e]=new Fe(e,1,!1,e.toLowerCase(),null,!0,!0)});function _i(e,t,n,r){var s=Ce.hasOwnProperty(t)?Ce[t]:null;(s!==null?s.type!==0:r||!(2a||s[o]!==l[a]){var u=` -`+s[o].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=o&&0<=a);break}}}finally{$l=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?vr(e):""}function jp(e){switch(e.tag){case 5:return vr(e.type);case 16:return vr("Lazy");case 13:return vr("Suspense");case 19:return vr("SuspenseList");case 0:case 2:case 15:return e=Bl(e.type,!1),e;case 11:return e=Bl(e.type.render,!1),e;case 1:return e=Bl(e.type,!0),e;default:return""}}function jo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Rn:return"Fragment";case bn:return"Portal";case ko:return"Profiler";case _i:return"StrictMode";case So:return"Suspense";case No:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case hc:return(e.displayName||"Context")+".Consumer";case mc:return(e._context.displayName||"Context")+".Provider";case Ei:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Ci:return t=e.displayName||null,t!==null?t:jo(e.type)||"Memo";case It:t=e._payload,e=e._init;try{return jo(e(t))}catch{}}return null}function _p(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return jo(t);case 8:return t===_i?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Yt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function gc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Ep(e){var t=gc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(o){r=""+o,l.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ms(e){e._valueTracker||(e._valueTracker=Ep(e))}function xc(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=gc(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function qs(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function _o(e,t){var n=t.checked;return ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ca(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Yt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function vc(e,t){t=t.checked,t!=null&&ji(e,"checked",t,!1)}function Eo(e,t){vc(e,t);var n=Yt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Co(e,t.type,n):t.hasOwnProperty("defaultValue")&&Co(e,t.type,Yt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ba(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Co(e,t,n){(t!=="number"||qs(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var wr=Array.isArray;function Un(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=hs.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function zr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Nr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Cp=["Webkit","ms","Moz","O"];Object.keys(Nr).forEach(function(e){Cp.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Nr[t]=Nr[e]})});function Nc(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Nr.hasOwnProperty(e)&&Nr[e]?(""+t).trim():t+"px"}function jc(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=Nc(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var bp=ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Oo(e,t){if(t){if(bp[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(C(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(C(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(C(61))}if(t.style!=null&&typeof t.style!="object")throw Error(C(62))}}function Po(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var To=null;function bi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Lo=null,$n=null,Bn=null;function Pa(e){if(e=rs(e)){if(typeof Lo!="function")throw Error(C(280));var t=e.stateNode;t&&(t=jl(t),Lo(e.stateNode,e.type,t))}}function _c(e){$n?Bn?Bn.push(e):Bn=[e]:$n=e}function Ec(){if($n){var e=$n,t=Bn;if(Bn=$n=null,Pa(e),t)for(e=0;e>>=0,e===0?32:31-(Fp(e)/Up|0)|0}var ys=64,gs=4194304;function kr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Js(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,l=e.pingedLanes,o=n&268435455;if(o!==0){var a=o&~s;a!==0?r=kr(a):(l&=o,l!==0&&(r=kr(l)))}else o=n&~s,o!==0?r=kr(o):l!==0&&(r=kr(l));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,l=t&-t,s>=l||s===16&&(l&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ts(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function Vp(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=_r),Ua=" ",$a=!1;function qc(e,t){switch(e){case"keyup":return xm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Qc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var On=!1;function wm(e,t){switch(e){case"compositionend":return Qc(t);case"keypress":return t.which!==32?null:($a=!0,Ua);case"textInput":return e=t.data,e===Ua&&$a?null:e;default:return null}}function km(e,t){if(On)return e==="compositionend"||!Di&&qc(e,t)?(e=Vc(),Ls=Li=Bt=null,On=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Wa(n)}}function Xc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Xc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Yc(){for(var e=window,t=qs();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=qs(e.document)}return t}function Mi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Om(e){var t=Yc(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Xc(n.ownerDocument.documentElement,n)){if(r!==null&&Mi(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,l=Math.min(r.start,s);r=r.end===void 0?l:Math.min(r.end,s),!e.extend&&l>r&&(s=r,r=l,l=s),s=qa(n,l);var o=qa(n,r);s&&o&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),l>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Pn=null,Fo=null,Cr=null,Uo=!1;function Qa(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Uo||Pn==null||Pn!==qs(r)||(r=Pn,"selectionStart"in r&&Mi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Cr&&Ur(Cr,r)||(Cr=r,r=Zs(Fo,"onSelect"),0zn||(e.current=qo[zn],qo[zn]=null,zn--)}function te(e,t){zn++,qo[zn]=e.current,e.current=t}var Zt={},ze=nn(Zt),He=nn(!1),mn=Zt;function Gn(e,t){var n=e.type.contextTypes;if(!n)return Zt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},l;for(l in n)s[l]=t[l];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function Ve(e){return e=e.childContextTypes,e!=null}function tl(){se(He),se(ze)}function eu(e,t,n){if(ze.current!==Zt)throw Error(C(168));te(ze,t),te(He,n)}function id(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(C(108,_p(e)||"Unknown",s));return ue({},n,r)}function nl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Zt,mn=ze.current,te(ze,e),te(He,He.current),!0}function tu(e,t,n){var r=e.stateNode;if(!r)throw Error(C(169));n?(e=id(e,t,mn),r.__reactInternalMemoizedMergedChildContext=e,se(He),se(ze),te(ze,e)):se(He),te(He,n)}var Ct=null,_l=!1,no=!1;function ad(e){Ct===null?Ct=[e]:Ct.push(e)}function Bm(e){_l=!0,ad(e)}function rn(){if(!no&&Ct!==null){no=!0;var e=0,t=Z;try{var n=Ct;for(Z=1;e>=o,s-=o,bt=1<<32-ht(t)+s|n<E?(F=j,j=null):F=j.sibling;var P=h(c,j,p[E],x);if(P===null){j===null&&(j=F);break}e&&j&&P.alternate===null&&t(c,j),f=l(P,f,E),N===null?k=P:N.sibling=P,N=P,j=F}if(E===p.length)return n(c,j),oe&&sn(c,E),k;if(j===null){for(;EE?(F=j,j=null):F=j.sibling;var Q=h(c,j,P.value,x);if(Q===null){j===null&&(j=F);break}e&&j&&Q.alternate===null&&t(c,j),f=l(Q,f,E),N===null?k=Q:N.sibling=Q,N=Q,j=F}if(P.done)return n(c,j),oe&&sn(c,E),k;if(j===null){for(;!P.done;E++,P=p.next())P=y(c,P.value,x),P!==null&&(f=l(P,f,E),N===null?k=P:N.sibling=P,N=P);return oe&&sn(c,E),k}for(j=r(c,j);!P.done;E++,P=p.next())P=v(j,c,E,P.value,x),P!==null&&(e&&P.alternate!==null&&j.delete(P.key===null?E:P.key),f=l(P,f,E),N===null?k=P:N.sibling=P,N=P);return e&&j.forEach(function(le){return t(c,le)}),oe&&sn(c,E),k}function z(c,f,p,x){if(typeof p=="object"&&p!==null&&p.type===Rn&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case ps:e:{for(var k=p.key,N=f;N!==null;){if(N.key===k){if(k=p.type,k===Rn){if(N.tag===7){n(c,N.sibling),f=s(N,p.props.children),f.return=c,c=f;break e}}else if(N.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===It&&su(k)===N.type){n(c,N.sibling),f=s(N,p.props),f.ref=pr(c,N,p),f.return=c,c=f;break e}n(c,N);break}else t(c,N);N=N.sibling}p.type===Rn?(f=fn(p.props.children,c.mode,x,p.key),f.return=c,c=f):(x=$s(p.type,p.key,p.props,null,c.mode,x),x.ref=pr(c,f,p),x.return=c,c=x)}return o(c);case bn:e:{for(N=p.key;f!==null;){if(f.key===N)if(f.tag===4&&f.stateNode.containerInfo===p.containerInfo&&f.stateNode.implementation===p.implementation){n(c,f.sibling),f=s(f,p.children||[]),f.return=c,c=f;break e}else{n(c,f);break}else t(c,f);f=f.sibling}f=co(p,c.mode,x),f.return=c,c=f}return o(c);case It:return N=p._init,z(c,f,N(p._payload),x)}if(wr(p))return S(c,f,p,x);if(ar(p))return w(c,f,p,x);js(c,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,f!==null&&f.tag===6?(n(c,f.sibling),f=s(f,p),f.return=c,c=f):(n(c,f),f=uo(p,c.mode,x),f.return=c,c=f),o(c)):n(c,f)}return z}var Xn=fd(!0),pd=fd(!1),ll=nn(null),ol=null,Mn=null,$i=null;function Bi(){$i=Mn=ol=null}function Hi(e){var t=ll.current;se(ll),e._currentValue=t}function Go(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Vn(e,t){ol=e,$i=Mn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Be=!0),e.firstContext=null)}function ot(e){var t=e._currentValue;if($i!==e)if(e={context:e,memoizedValue:t,next:null},Mn===null){if(ol===null)throw Error(C(308));Mn=e,ol.dependencies={lanes:0,firstContext:e}}else Mn=Mn.next=e;return t}var an=null;function Vi(e){an===null?an=[e]:an.push(e)}function md(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,Vi(t)):(n.next=s.next,s.next=n),t.interleaved=n,Lt(e,r)}function Lt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ft=!1;function Wi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function hd(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ot(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Kt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,J&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,Lt(e,n)}return s=r.interleaved,s===null?(t.next=t,Vi(r)):(t.next=s.next,s.next=t),r.interleaved=t,Lt(e,n)}function As(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Oi(e,n)}}function lu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};l===null?s=l=o:l=l.next=o,n=n.next}while(n!==null);l===null?s=l=t:l=l.next=t}else s=l=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:l,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function il(e,t,n,r){var s=e.updateQueue;Ft=!1;var l=s.firstBaseUpdate,o=s.lastBaseUpdate,a=s.shared.pending;if(a!==null){s.shared.pending=null;var u=a,d=u.next;u.next=null,o===null?l=d:o.next=d,o=u;var m=e.alternate;m!==null&&(m=m.updateQueue,a=m.lastBaseUpdate,a!==o&&(a===null?m.firstBaseUpdate=d:a.next=d,m.lastBaseUpdate=u))}if(l!==null){var y=s.baseState;o=0,m=d=u=null,a=l;do{var h=a.lane,v=a.eventTime;if((r&h)===h){m!==null&&(m=m.next={eventTime:v,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var S=e,w=a;switch(h=t,v=n,w.tag){case 1:if(S=w.payload,typeof S=="function"){y=S.call(v,y,h);break e}y=S;break e;case 3:S.flags=S.flags&-65537|128;case 0:if(S=w.payload,h=typeof S=="function"?S.call(v,y,h):S,h==null)break e;y=ue({},y,h);break e;case 2:Ft=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,h=s.effects,h===null?s.effects=[a]:h.push(a))}else v={eventTime:v,lane:h,tag:a.tag,payload:a.payload,callback:a.callback,next:null},m===null?(d=m=v,u=y):m=m.next=v,o|=h;if(a=a.next,a===null){if(a=s.shared.pending,a===null)break;h=a,a=h.next,h.next=null,s.lastBaseUpdate=h,s.shared.pending=null}}while(!0);if(m===null&&(u=y),s.baseState=u,s.firstBaseUpdate=d,s.lastBaseUpdate=m,t=s.shared.interleaved,t!==null){s=t;do o|=s.lane,s=s.next;while(s!==t)}else l===null&&(s.shared.lanes=0);gn|=o,e.lanes=o,e.memoizedState=y}}function ou(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=so.transition;so.transition={};try{e(!1),t()}finally{Z=n,so.transition=r}}function Td(){return it().memoizedState}function qm(e,t,n){var r=Jt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ld(e))zd(t,n);else if(n=md(e,t,n,r),n!==null){var s=Me();yt(n,e,r,s),Ad(n,t,r)}}function Qm(e,t,n){var r=Jt(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ld(e))zd(t,s);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var o=t.lastRenderedState,a=l(o,n);if(s.hasEagerState=!0,s.eagerState=a,xt(a,o)){var u=t.interleaved;u===null?(s.next=s,Vi(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}n=md(e,t,s,r),n!==null&&(s=Me(),yt(n,e,r,s),Ad(n,t,r))}}function Ld(e){var t=e.alternate;return e===ae||t!==null&&t===ae}function zd(e,t){br=ul=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ad(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Oi(e,n)}}var cl={readContext:ot,useCallback:Re,useContext:Re,useEffect:Re,useImperativeHandle:Re,useInsertionEffect:Re,useLayoutEffect:Re,useMemo:Re,useReducer:Re,useRef:Re,useState:Re,useDebugValue:Re,useDeferredValue:Re,useTransition:Re,useMutableSource:Re,useSyncExternalStore:Re,useId:Re,unstable_isNewReconciler:!1},Km={readContext:ot,useCallback:function(e,t){return kt().memoizedState=[e,t===void 0?null:t],e},useContext:ot,useEffect:au,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Ms(4194308,4,Cd.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ms(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ms(4,2,e,t)},useMemo:function(e,t){var n=kt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=kt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=qm.bind(null,ae,e),[r.memoizedState,e]},useRef:function(e){var t=kt();return e={current:e},t.memoizedState=e},useState:iu,useDebugValue:Zi,useDeferredValue:function(e){return kt().memoizedState=e},useTransition:function(){var e=iu(!1),t=e[0];return e=Wm.bind(null,e[1]),kt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ae,s=kt();if(oe){if(n===void 0)throw Error(C(407));n=n()}else{if(n=t(),we===null)throw Error(C(349));yn&30||vd(r,t,n)}s.memoizedState=n;var l={value:n,getSnapshot:t};return s.queue=l,au(kd.bind(null,r,l,e),[e]),r.flags|=2048,Kr(9,wd.bind(null,r,l,n,t),void 0,null),n},useId:function(){var e=kt(),t=we.identifierPrefix;if(oe){var n=Rt,r=bt;n=(r&~(1<<32-ht(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=qr++,0")&&(u=u.replace("",e.displayName)),u}while(1<=o&&0<=a);break}}}finally{Bl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?vr(e):""}function _p(e){switch(e.tag){case 5:return vr(e.type);case 16:return vr("Lazy");case 13:return vr("Suspense");case 19:return vr("SuspenseList");case 0:case 2:case 15:return e=Hl(e.type,!1),e;case 11:return e=Hl(e.type.render,!1),e;case 1:return e=Hl(e.type,!0),e;default:return""}}function _o(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Rn:return"Fragment";case bn:return"Portal";case So:return"Profiler";case Ei:return"StrictMode";case No:return"Suspense";case jo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case yc:return(e.displayName||"Context")+".Consumer";case hc:return(e._context.displayName||"Context")+".Provider";case Ci:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case bi:return t=e.displayName||null,t!==null?t:_o(e.type)||"Memo";case It:t=e._payload,e=e._init;try{return _o(e(t))}catch{}}return null}function Ep(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return _o(t);case 8:return t===Ei?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Yt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function xc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Cp(e){var t=xc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var s=n.get,l=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return s.call(this)},set:function(o){r=""+o,l.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ms(e){e._valueTracker||(e._valueTracker=Cp(e))}function vc(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=xc(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function qs(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Eo(e,t){var n=t.checked;return ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ba(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Yt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function wc(e,t){t=t.checked,t!=null&&_i(e,"checked",t,!1)}function Co(e,t){wc(e,t);var n=Yt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?bo(e,t.type,n):t.hasOwnProperty("defaultValue")&&bo(e,t.type,Yt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ra(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function bo(e,t,n){(t!=="number"||qs(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var wr=Array.isArray;function Un(e,t,n,r){if(e=e.options,t){t={};for(var s=0;s"+t.valueOf().toString()+"",t=hs.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function zr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Nr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},bp=["Webkit","ms","Moz","O"];Object.keys(Nr).forEach(function(e){bp.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Nr[t]=Nr[e]})});function jc(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Nr.hasOwnProperty(e)&&Nr[e]?(""+t).trim():t+"px"}function _c(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,s=jc(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,s):e[n]=s}}var Rp=ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Po(e,t){if(t){if(Rp[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(C(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(C(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(C(61))}if(t.style!=null&&typeof t.style!="object")throw Error(C(62))}}function To(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Lo=null;function Ri(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var zo=null,$n=null,Bn=null;function Ta(e){if(e=rs(e)){if(typeof zo!="function")throw Error(C(280));var t=e.stateNode;t&&(t=_l(t),zo(e.stateNode,e.type,t))}}function Ec(e){$n?Bn?Bn.push(e):Bn=[e]:$n=e}function Cc(){if($n){var e=$n,t=Bn;if(Bn=$n=null,Ta(e),t)for(e=0;e>>=0,e===0?32:31-(Up(e)/$p|0)|0}var ys=64,gs=4194304;function kr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Js(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,s=e.suspendedLanes,l=e.pingedLanes,o=n&268435455;if(o!==0){var a=o&~s;a!==0?r=kr(a):(l&=o,l!==0&&(r=kr(l)))}else o=n&~s,o!==0?r=kr(o):l!==0&&(r=kr(l));if(r===0)return 0;if(t!==0&&t!==r&&!(t&s)&&(s=r&-r,l=t&-t,s>=l||s===16&&(l&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function ts(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function Wp(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=_r),$a=" ",Ba=!1;function Qc(e,t){switch(e){case"keyup":return vm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Kc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var On=!1;function km(e,t){switch(e){case"compositionend":return Kc(t);case"keypress":return t.which!==32?null:(Ba=!0,$a);case"textInput":return e=t.data,e===$a&&Ba?null:e;default:return null}}function Sm(e,t){if(On)return e==="compositionend"||!Mi&&Qc(e,t)?(e=Wc(),Ls=zi=Bt=null,On=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=qa(n)}}function Yc(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Yc(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Zc(){for(var e=window,t=qs();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=qs(e.document)}return t}function Ii(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Pm(e){var t=Zc(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Yc(n.ownerDocument.documentElement,n)){if(r!==null&&Ii(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var s=n.textContent.length,l=Math.min(r.start,s);r=r.end===void 0?l:Math.min(r.end,s),!e.extend&&l>r&&(s=r,r=l,l=s),s=Qa(n,l);var o=Qa(n,r);s&&o&&(e.rangeCount!==1||e.anchorNode!==s.node||e.anchorOffset!==s.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(s.node,s.offset),e.removeAllRanges(),l>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Pn=null,Uo=null,Cr=null,$o=!1;function Ka(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;$o||Pn==null||Pn!==qs(r)||(r=Pn,"selectionStart"in r&&Ii(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Cr&&Ur(Cr,r)||(Cr=r,r=Zs(Uo,"onSelect"),0zn||(e.current=Qo[zn],Qo[zn]=null,zn--)}function te(e,t){zn++,Qo[zn]=e.current,e.current=t}var Zt={},ze=nn(Zt),He=nn(!1),mn=Zt;function Gn(e,t){var n=e.type.contextTypes;if(!n)return Zt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var s={},l;for(l in n)s[l]=t[l];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function Ve(e){return e=e.childContextTypes,e!=null}function tl(){se(He),se(ze)}function tu(e,t,n){if(ze.current!==Zt)throw Error(C(168));te(ze,t),te(He,n)}function ad(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var s in r)if(!(s in t))throw Error(C(108,Ep(e)||"Unknown",s));return ue({},n,r)}function nl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Zt,mn=ze.current,te(ze,e),te(He,He.current),!0}function nu(e,t,n){var r=e.stateNode;if(!r)throw Error(C(169));n?(e=ad(e,t,mn),r.__reactInternalMemoizedMergedChildContext=e,se(He),se(ze),te(ze,e)):se(He),te(He,n)}var Ct=null,El=!1,ro=!1;function ud(e){Ct===null?Ct=[e]:Ct.push(e)}function Hm(e){El=!0,ud(e)}function rn(){if(!ro&&Ct!==null){ro=!0;var e=0,t=Z;try{var n=Ct;for(Z=1;e>=o,s-=o,bt=1<<32-ht(t)+s|n<E?(F=j,j=null):F=j.sibling;var P=h(c,j,p[E],x);if(P===null){j===null&&(j=F);break}e&&j&&P.alternate===null&&t(c,j),f=l(P,f,E),N===null?k=P:N.sibling=P,N=P,j=F}if(E===p.length)return n(c,j),oe&&sn(c,E),k;if(j===null){for(;EE?(F=j,j=null):F=j.sibling;var Q=h(c,j,P.value,x);if(Q===null){j===null&&(j=F);break}e&&j&&Q.alternate===null&&t(c,j),f=l(Q,f,E),N===null?k=Q:N.sibling=Q,N=Q,j=F}if(P.done)return n(c,j),oe&&sn(c,E),k;if(j===null){for(;!P.done;E++,P=p.next())P=y(c,P.value,x),P!==null&&(f=l(P,f,E),N===null?k=P:N.sibling=P,N=P);return oe&&sn(c,E),k}for(j=r(c,j);!P.done;E++,P=p.next())P=v(j,c,E,P.value,x),P!==null&&(e&&P.alternate!==null&&j.delete(P.key===null?E:P.key),f=l(P,f,E),N===null?k=P:N.sibling=P,N=P);return e&&j.forEach(function(le){return t(c,le)}),oe&&sn(c,E),k}function z(c,f,p,x){if(typeof p=="object"&&p!==null&&p.type===Rn&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case ps:e:{for(var k=p.key,N=f;N!==null;){if(N.key===k){if(k=p.type,k===Rn){if(N.tag===7){n(c,N.sibling),f=s(N,p.props.children),f.return=c,c=f;break e}}else if(N.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===It&&lu(k)===N.type){n(c,N.sibling),f=s(N,p.props),f.ref=pr(c,N,p),f.return=c,c=f;break e}n(c,N);break}else t(c,N);N=N.sibling}p.type===Rn?(f=fn(p.props.children,c.mode,x,p.key),f.return=c,c=f):(x=$s(p.type,p.key,p.props,null,c.mode,x),x.ref=pr(c,f,p),x.return=c,c=x)}return o(c);case bn:e:{for(N=p.key;f!==null;){if(f.key===N)if(f.tag===4&&f.stateNode.containerInfo===p.containerInfo&&f.stateNode.implementation===p.implementation){n(c,f.sibling),f=s(f,p.children||[]),f.return=c,c=f;break e}else{n(c,f);break}else t(c,f);f=f.sibling}f=fo(p,c.mode,x),f.return=c,c=f}return o(c);case It:return N=p._init,z(c,f,N(p._payload),x)}if(wr(p))return S(c,f,p,x);if(ar(p))return w(c,f,p,x);js(c,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,f!==null&&f.tag===6?(n(c,f.sibling),f=s(f,p),f.return=c,c=f):(n(c,f),f=co(p,c.mode,x),f.return=c,c=f),o(c)):n(c,f)}return z}var Xn=pd(!0),md=pd(!1),ll=nn(null),ol=null,Mn=null,Bi=null;function Hi(){Bi=Mn=ol=null}function Vi(e){var t=ll.current;se(ll),e._currentValue=t}function Jo(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Vn(e,t){ol=e,Bi=Mn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Be=!0),e.firstContext=null)}function ot(e){var t=e._currentValue;if(Bi!==e)if(e={context:e,memoizedValue:t,next:null},Mn===null){if(ol===null)throw Error(C(308));Mn=e,ol.dependencies={lanes:0,firstContext:e}}else Mn=Mn.next=e;return t}var an=null;function Wi(e){an===null?an=[e]:an.push(e)}function hd(e,t,n,r){var s=t.interleaved;return s===null?(n.next=n,Wi(t)):(n.next=s.next,s.next=n),t.interleaved=n,Lt(e,r)}function Lt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ft=!1;function qi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function yd(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ot(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Kt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,J&2){var s=r.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),r.pending=t,Lt(e,n)}return s=r.interleaved,s===null?(t.next=t,Wi(r)):(t.next=s.next,s.next=t),r.interleaved=t,Lt(e,n)}function As(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Pi(e,n)}}function ou(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var s=null,l=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};l===null?s=l=o:l=l.next=o,n=n.next}while(n!==null);l===null?s=l=t:l=l.next=t}else s=l=t;n={baseState:r.baseState,firstBaseUpdate:s,lastBaseUpdate:l,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function il(e,t,n,r){var s=e.updateQueue;Ft=!1;var l=s.firstBaseUpdate,o=s.lastBaseUpdate,a=s.shared.pending;if(a!==null){s.shared.pending=null;var u=a,d=u.next;u.next=null,o===null?l=d:o.next=d,o=u;var m=e.alternate;m!==null&&(m=m.updateQueue,a=m.lastBaseUpdate,a!==o&&(a===null?m.firstBaseUpdate=d:a.next=d,m.lastBaseUpdate=u))}if(l!==null){var y=s.baseState;o=0,m=d=u=null,a=l;do{var h=a.lane,v=a.eventTime;if((r&h)===h){m!==null&&(m=m.next={eventTime:v,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var S=e,w=a;switch(h=t,v=n,w.tag){case 1:if(S=w.payload,typeof S=="function"){y=S.call(v,y,h);break e}y=S;break e;case 3:S.flags=S.flags&-65537|128;case 0:if(S=w.payload,h=typeof S=="function"?S.call(v,y,h):S,h==null)break e;y=ue({},y,h);break e;case 2:Ft=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,h=s.effects,h===null?s.effects=[a]:h.push(a))}else v={eventTime:v,lane:h,tag:a.tag,payload:a.payload,callback:a.callback,next:null},m===null?(d=m=v,u=y):m=m.next=v,o|=h;if(a=a.next,a===null){if(a=s.shared.pending,a===null)break;h=a,a=h.next,h.next=null,s.lastBaseUpdate=h,s.shared.pending=null}}while(!0);if(m===null&&(u=y),s.baseState=u,s.firstBaseUpdate=d,s.lastBaseUpdate=m,t=s.shared.interleaved,t!==null){s=t;do o|=s.lane,s=s.next;while(s!==t)}else l===null&&(s.shared.lanes=0);gn|=o,e.lanes=o,e.memoizedState=y}}function iu(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=lo.transition;lo.transition={};try{e(!1),t()}finally{Z=n,lo.transition=r}}function Ld(){return it().memoizedState}function Qm(e,t,n){var r=Jt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},zd(e))Ad(t,n);else if(n=hd(e,t,n,r),n!==null){var s=Me();yt(n,e,r,s),Dd(n,t,r)}}function Km(e,t,n){var r=Jt(e),s={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(zd(e))Ad(t,s);else{var l=e.alternate;if(e.lanes===0&&(l===null||l.lanes===0)&&(l=t.lastRenderedReducer,l!==null))try{var o=t.lastRenderedState,a=l(o,n);if(s.hasEagerState=!0,s.eagerState=a,xt(a,o)){var u=t.interleaved;u===null?(s.next=s,Wi(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}n=hd(e,t,s,r),n!==null&&(s=Me(),yt(n,e,r,s),Dd(n,t,r))}}function zd(e){var t=e.alternate;return e===ae||t!==null&&t===ae}function Ad(e,t){br=ul=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Dd(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Pi(e,n)}}var cl={readContext:ot,useCallback:Re,useContext:Re,useEffect:Re,useImperativeHandle:Re,useInsertionEffect:Re,useLayoutEffect:Re,useMemo:Re,useReducer:Re,useRef:Re,useState:Re,useDebugValue:Re,useDeferredValue:Re,useTransition:Re,useMutableSource:Re,useSyncExternalStore:Re,useId:Re,unstable_isNewReconciler:!1},Gm={readContext:ot,useCallback:function(e,t){return kt().memoizedState=[e,t===void 0?null:t],e},useContext:ot,useEffect:uu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Ms(4194308,4,bd.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ms(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ms(4,2,e,t)},useMemo:function(e,t){var n=kt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=kt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Qm.bind(null,ae,e),[r.memoizedState,e]},useRef:function(e){var t=kt();return e={current:e},t.memoizedState=e},useState:au,useDebugValue:ea,useDeferredValue:function(e){return kt().memoizedState=e},useTransition:function(){var e=au(!1),t=e[0];return e=qm.bind(null,e[1]),kt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ae,s=kt();if(oe){if(n===void 0)throw Error(C(407));n=n()}else{if(n=t(),we===null)throw Error(C(349));yn&30||wd(r,t,n)}s.memoizedState=n;var l={value:n,getSnapshot:t};return s.queue=l,uu(Sd.bind(null,r,l,e),[e]),r.flags|=2048,Kr(9,kd.bind(null,r,l,n,t),void 0,null),n},useId:function(){var e=kt(),t=we.identifierPrefix;if(oe){var n=Rt,r=bt;n=(r&~(1<<32-ht(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=qr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[St]=t,e[Hr]=r,Wd(e,t,!1,!1),t.stateNode=e;e:{switch(o=Po(n,r),n){case"dialog":ne("cancel",e),ne("close",e),s=r;break;case"iframe":case"object":case"embed":ne("load",e),s=r;break;case"video":case"audio":for(s=0;ser&&(t.flags|=128,r=!0,mr(l,!1),t.lanes=4194304)}else{if(!r)if(e=al(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),mr(l,!0),l.tail===null&&l.tailMode==="hidden"&&!o.alternate&&!oe)return Oe(t),null}else 2*fe()-l.renderingStartTime>er&&n!==1073741824&&(t.flags|=128,r=!0,mr(l,!1),t.lanes=4194304);l.isBackwards?(o.sibling=t.child,t.child=o):(n=l.last,n!==null?n.sibling=o:t.child=o,l.last=o)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=fe(),t.sibling=null,n=ie.current,te(ie,r?n&1|2:n&1),t):(Oe(t),null);case 22:case 23:return la(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Ke&1073741824&&(Oe(t),t.subtreeFlags&6&&(t.flags|=8192)):Oe(t),null;case 24:return null;case 25:return null}throw Error(C(156,t.tag))}function nh(e,t){switch(Fi(t),t.tag){case 1:return Ve(t.type)&&tl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Yn(),se(He),se(ze),Ki(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Qi(t),null;case 13:if(se(ie),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(C(340));Jn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return se(ie),null;case 4:return Yn(),null;case 10:return Hi(t.type._context),null;case 22:case 23:return la(),null;case 24:return null;default:return null}}var Es=!1,Te=!1,rh=typeof WeakSet=="function"?WeakSet:Set,L=null;function In(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){de(e,t,r)}else n.current=null}function si(e,t,n){try{n()}catch(r){de(e,t,r)}}var vu=!1;function sh(e,t){if($o=Xs,e=Yc(),Mi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,l=r.focusNode;r=r.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var o=0,a=-1,u=-1,d=0,m=0,y=e,h=null;t:for(;;){for(var v;y!==n||s!==0&&y.nodeType!==3||(a=o+s),y!==l||r!==0&&y.nodeType!==3||(u=o+r),y.nodeType===3&&(o+=y.nodeValue.length),(v=y.firstChild)!==null;)h=y,y=v;for(;;){if(y===e)break t;if(h===n&&++d===s&&(a=o),h===l&&++m===r&&(u=o),(v=y.nextSibling)!==null)break;y=h,h=y.parentNode}y=v}n=a===-1||u===-1?null:{start:a,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(Bo={focusedElem:e,selectionRange:n},Xs=!1,L=t;L!==null;)if(t=L,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,L=e;else for(;L!==null;){t=L;try{var S=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var w=S.memoizedProps,z=S.memoizedState,c=t.stateNode,f=c.getSnapshotBeforeUpdate(t.elementType===t.type?w:ft(t.type,w),z);c.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var p=t.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch(x){de(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,L=e;break}L=t.return}return S=vu,vu=!1,S}function Rr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var l=s.destroy;s.destroy=void 0,l!==void 0&&si(t,n,l)}s=s.next}while(s!==r)}}function bl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function li(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Kd(e){var t=e.alternate;t!==null&&(e.alternate=null,Kd(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[St],delete t[Hr],delete t[Wo],delete t[Um],delete t[$m])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Gd(e){return e.tag===5||e.tag===3||e.tag===4}function wu(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Gd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function oi(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=el));else if(r!==4&&(e=e.child,e!==null))for(oi(e,t,n),e=e.sibling;e!==null;)oi(e,t,n),e=e.sibling}function ii(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ii(e,t,n),e=e.sibling;e!==null;)ii(e,t,n),e=e.sibling}var _e=null,pt=!1;function Mt(e,t,n){for(n=n.child;n!==null;)Jd(e,t,n),n=n.sibling}function Jd(e,t,n){if(jt&&typeof jt.onCommitFiberUnmount=="function")try{jt.onCommitFiberUnmount(wl,n)}catch{}switch(n.tag){case 5:Te||In(n,t);case 6:var r=_e,s=pt;_e=null,Mt(e,t,n),_e=r,pt=s,_e!==null&&(pt?(e=_e,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):_e.removeChild(n.stateNode));break;case 18:_e!==null&&(pt?(e=_e,n=n.stateNode,e.nodeType===8?to(e.parentNode,n):e.nodeType===1&&to(e,n),Ir(e)):to(_e,n.stateNode));break;case 4:r=_e,s=pt,_e=n.stateNode.containerInfo,pt=!0,Mt(e,t,n),_e=r,pt=s;break;case 0:case 11:case 14:case 15:if(!Te&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var l=s,o=l.destroy;l=l.tag,o!==void 0&&(l&2||l&4)&&si(n,t,o),s=s.next}while(s!==r)}Mt(e,t,n);break;case 1:if(!Te&&(In(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){de(n,t,a)}Mt(e,t,n);break;case 21:Mt(e,t,n);break;case 22:n.mode&1?(Te=(r=Te)||n.memoizedState!==null,Mt(e,t,n),Te=r):Mt(e,t,n);break;default:Mt(e,t,n)}}function ku(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new rh),t.forEach(function(r){var s=ph.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function dt(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=o),r&=~l}if(r=s,r=fe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*oh(r/1960))-r,10e?16:e,Ht===null)var r=!1;else{if(e=Ht,Ht=null,pl=0,J&6)throw Error(C(331));var s=J;for(J|=4,L=e.current;L!==null;){var l=L,o=l.child;if(L.flags&16){var a=l.deletions;if(a!==null){for(var u=0;ufe()-ra?dn(e,0):na|=n),We(e,t)}function sf(e,t){t===0&&(e.mode&1?(t=gs,gs<<=1,!(gs&130023424)&&(gs=4194304)):t=1);var n=Me();e=Lt(e,t),e!==null&&(ts(e,t,n),We(e,n))}function fh(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),sf(e,n)}function ph(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(C(314))}r!==null&&r.delete(t),sf(e,n)}var lf;lf=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||He.current)Be=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Be=!1,eh(e,t,n);Be=!!(e.flags&131072)}else Be=!1,oe&&t.flags&1048576&&ud(t,sl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Is(e,t),e=t.pendingProps;var s=Gn(t,ze.current);Vn(t,n),s=Ji(null,t,r,e,s,n);var l=Xi();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ve(r)?(l=!0,nl(t)):l=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,Wi(t),s.updater=Cl,t.stateNode=s,s._reactInternals=t,Xo(t,r,e,n),t=ei(null,t,r,!0,l,n)):(t.tag=0,oe&&l&&Ii(t),De(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Is(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=hh(r),e=ft(r,e),s){case 0:t=Zo(null,t,r,e,n);break e;case 1:t=yu(null,t,r,e,n);break e;case 11:t=mu(null,t,r,e,n);break e;case 14:t=hu(null,t,r,ft(r.type,e),n);break e}throw Error(C(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),Zo(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),yu(e,t,r,s,n);case 3:e:{if(Bd(t),e===null)throw Error(C(387));r=t.pendingProps,l=t.memoizedState,s=l.element,hd(e,t),il(t,r,null,n);var o=t.memoizedState;if(r=o.element,l.isDehydrated)if(l={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){s=Zn(Error(C(423)),t),t=gu(e,t,r,n,s);break e}else if(r!==s){s=Zn(Error(C(424)),t),t=gu(e,t,r,n,s);break e}else for(Ge=Qt(t.stateNode.containerInfo.firstChild),Je=t,oe=!0,mt=null,n=pd(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jn(),r===s){t=zt(e,t,n);break e}De(e,t,r,n)}t=t.child}return t;case 5:return yd(t),e===null&&Ko(t),r=t.type,s=t.pendingProps,l=e!==null?e.memoizedProps:null,o=s.children,Ho(r,s)?o=null:l!==null&&Ho(r,l)&&(t.flags|=32),$d(e,t),De(e,t,o,n),t.child;case 6:return e===null&&Ko(t),null;case 13:return Hd(e,t,n);case 4:return qi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Xn(t,null,r,n):De(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),mu(e,t,r,s,n);case 7:return De(e,t,t.pendingProps,n),t.child;case 8:return De(e,t,t.pendingProps.children,n),t.child;case 12:return De(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,l=t.memoizedProps,o=s.value,te(ll,r._currentValue),r._currentValue=o,l!==null)if(xt(l.value,o)){if(l.children===s.children&&!He.current){t=zt(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var a=l.dependencies;if(a!==null){o=l.child;for(var u=a.firstContext;u!==null;){if(u.context===r){if(l.tag===1){u=Ot(-1,n&-n),u.tag=2;var d=l.updateQueue;if(d!==null){d=d.shared;var m=d.pending;m===null?u.next=u:(u.next=m.next,m.next=u),d.pending=u}}l.lanes|=n,u=l.alternate,u!==null&&(u.lanes|=n),Go(l.return,n,t),a.lanes|=n;break}u=u.next}}else if(l.tag===10)o=l.type===t.type?null:l.child;else if(l.tag===18){if(o=l.return,o===null)throw Error(C(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),Go(o,n,t),o=l.sibling}else o=l.child;if(o!==null)o.return=l;else for(o=l;o!==null;){if(o===t){o=null;break}if(l=o.sibling,l!==null){l.return=o.return,o=l;break}o=o.return}l=o}De(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Vn(t,n),s=ot(s),r=r(s),t.flags|=1,De(e,t,r,n),t.child;case 14:return r=t.type,s=ft(r,t.pendingProps),s=ft(r.type,s),hu(e,t,r,s,n);case 15:return Fd(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),Is(e,t),t.tag=1,Ve(r)?(e=!0,nl(t)):e=!1,Vn(t,n),Dd(t,r,s),Xo(t,r,s,n),ei(null,t,r,!0,e,n);case 19:return Vd(e,t,n);case 22:return Ud(e,t,n)}throw Error(C(156,t.tag))};function of(e,t){return Lc(e,t)}function mh(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function st(e,t,n,r){return new mh(e,t,n,r)}function ia(e){return e=e.prototype,!(!e||!e.isReactComponent)}function hh(e){if(typeof e=="function")return ia(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ei)return 11;if(e===Ci)return 14}return 2}function Xt(e,t){var n=e.alternate;return n===null?(n=st(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function $s(e,t,n,r,s,l){var o=2;if(r=e,typeof e=="function")ia(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Rn:return fn(n.children,s,l,t);case _i:o=8,s|=8;break;case ko:return e=st(12,n,t,s|2),e.elementType=ko,e.lanes=l,e;case So:return e=st(13,n,t,s),e.elementType=So,e.lanes=l,e;case No:return e=st(19,n,t,s),e.elementType=No,e.lanes=l,e;case yc:return Ol(n,s,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case mc:o=10;break e;case hc:o=9;break e;case Ei:o=11;break e;case Ci:o=14;break e;case It:o=16,r=null;break e}throw Error(C(130,e==null?e:typeof e,""))}return t=st(o,n,t,s),t.elementType=e,t.type=r,t.lanes=l,t}function fn(e,t,n,r){return e=st(7,e,r,t),e.lanes=n,e}function Ol(e,t,n,r){return e=st(22,e,r,t),e.elementType=yc,e.lanes=n,e.stateNode={isHidden:!1},e}function uo(e,t,n){return e=st(6,e,null,t),e.lanes=n,e}function co(e,t,n){return t=st(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function yh(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Vl(0),this.expirationTimes=Vl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Vl(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function aa(e,t,n,r,s,l,o,a,u){return e=new yh(e,t,n,a,u),t===1?(t=1,l===!0&&(t|=8)):t=0,l=st(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Wi(l),e}function gh(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(df)}catch(e){console.error(e)}}df(),cc.exports=Ye;var Sh=cc.exports,Ru=Sh;vo.createRoot=Ru.createRoot,vo.hydrateRoot=Ru.hydrateRoot;/** +`+l.stack}return{value:e,source:t,stack:s,digest:null}}function ao(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Zo(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Ym=typeof WeakMap=="function"?WeakMap:Map;function Id(e,t,n){n=Ot(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){fl||(fl=!0,ui=r),Zo(e,t)},n}function Fd(e,t,n){n=Ot(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var s=t.value;n.payload=function(){return r(s)},n.callback=function(){Zo(e,t)}}var l=e.stateNode;return l!==null&&typeof l.componentDidCatch=="function"&&(n.callback=function(){Zo(e,t),typeof r!="function"&&(Gt===null?Gt=new Set([this]):Gt.add(this));var o=t.stack;this.componentDidCatch(t.value,{componentStack:o!==null?o:""})}),n}function fu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Ym;var s=new Set;r.set(t,s)}else s=r.get(t),s===void 0&&(s=new Set,r.set(t,s));s.has(n)||(s.add(n),e=fh.bind(null,e,t,n),t.then(e,e))}function pu(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function mu(e,t,n,r,s){return e.mode&1?(e.flags|=65536,e.lanes=s,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Ot(-1,1),t.tag=2,Kt(n,t,1))),n.lanes|=1),e)}var Zm=At.ReactCurrentOwner,Be=!1;function De(e,t,n,r){t.child=e===null?md(t,null,n,r):Xn(t,e.child,n,r)}function hu(e,t,n,r,s){n=n.render;var l=t.ref;return Vn(t,s),r=Xi(e,t,n,r,l,s),n=Yi(),e!==null&&!Be?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,zt(e,t,s)):(oe&&n&&Fi(t),t.flags|=1,De(e,t,r,s),t.child)}function yu(e,t,n,r,s){if(e===null){var l=n.type;return typeof l=="function"&&!aa(l)&&l.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=l,Ud(e,t,l,r,s)):(e=$s(n.type,null,r,t,t.mode,s),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,!(e.lanes&s)){var o=l.memoizedProps;if(n=n.compare,n=n!==null?n:Ur,n(o,r)&&e.ref===t.ref)return zt(e,t,s)}return t.flags|=1,e=Xt(l,r),e.ref=t.ref,e.return=t,t.child=e}function Ud(e,t,n,r,s){if(e!==null){var l=e.memoizedProps;if(Ur(l,r)&&e.ref===t.ref)if(Be=!1,t.pendingProps=r=l,(e.lanes&s)!==0)e.flags&131072&&(Be=!0);else return t.lanes=e.lanes,zt(e,t,s)}return ei(e,t,n,r,s)}function $d(e,t,n){var r=t.pendingProps,s=r.children,l=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},te(Fn,Ke),Ke|=n;else{if(!(n&1073741824))return e=l!==null?l.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,te(Fn,Ke),Ke|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=l!==null?l.baseLanes:n,te(Fn,Ke),Ke|=r}else l!==null?(r=l.baseLanes|n,t.memoizedState=null):r=n,te(Fn,Ke),Ke|=r;return De(e,t,s,n),t.child}function Bd(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function ei(e,t,n,r,s){var l=Ve(n)?mn:ze.current;return l=Gn(t,l),Vn(t,s),n=Xi(e,t,n,r,l,s),r=Yi(),e!==null&&!Be?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,zt(e,t,s)):(oe&&r&&Fi(t),t.flags|=1,De(e,t,n,s),t.child)}function gu(e,t,n,r,s){if(Ve(n)){var l=!0;nl(t)}else l=!1;if(Vn(t,s),t.stateNode===null)Is(e,t),Md(t,n,r),Yo(t,n,r,s),r=!0;else if(e===null){var o=t.stateNode,a=t.memoizedProps;o.props=a;var u=o.context,d=n.contextType;typeof d=="object"&&d!==null?d=ot(d):(d=Ve(n)?mn:ze.current,d=Gn(t,d));var m=n.getDerivedStateFromProps,y=typeof m=="function"||typeof o.getSnapshotBeforeUpdate=="function";y||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(a!==r||u!==d)&&du(t,o,r,d),Ft=!1;var h=t.memoizedState;o.state=h,il(t,r,o,s),u=t.memoizedState,a!==r||h!==u||He.current||Ft?(typeof m=="function"&&(Xo(t,n,m,r),u=t.memoizedState),(a=Ft||cu(t,n,a,r,h,u,d))?(y||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount()),typeof o.componentDidMount=="function"&&(t.flags|=4194308)):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=u),o.props=r,o.state=u,o.context=d,r=a):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{o=t.stateNode,yd(e,t),a=t.memoizedProps,d=t.type===t.elementType?a:ft(t.type,a),o.props=d,y=t.pendingProps,h=o.context,u=n.contextType,typeof u=="object"&&u!==null?u=ot(u):(u=Ve(n)?mn:ze.current,u=Gn(t,u));var v=n.getDerivedStateFromProps;(m=typeof v=="function"||typeof o.getSnapshotBeforeUpdate=="function")||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(a!==y||h!==u)&&du(t,o,r,u),Ft=!1,h=t.memoizedState,o.state=h,il(t,r,o,s);var S=t.memoizedState;a!==y||h!==S||He.current||Ft?(typeof v=="function"&&(Xo(t,n,v,r),S=t.memoizedState),(d=Ft||cu(t,n,d,r,h,S,u)||!1)?(m||typeof o.UNSAFE_componentWillUpdate!="function"&&typeof o.componentWillUpdate!="function"||(typeof o.componentWillUpdate=="function"&&o.componentWillUpdate(r,S,u),typeof o.UNSAFE_componentWillUpdate=="function"&&o.UNSAFE_componentWillUpdate(r,S,u)),typeof o.componentDidUpdate=="function"&&(t.flags|=4),typeof o.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof o.componentDidUpdate!="function"||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!="function"||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=S),o.props=r,o.state=S,o.context=u,r=d):(typeof o.componentDidUpdate!="function"||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),typeof o.getSnapshotBeforeUpdate!="function"||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=1024),r=!1)}return ti(e,t,n,r,l,s)}function ti(e,t,n,r,s,l){Bd(e,t);var o=(t.flags&128)!==0;if(!r&&!o)return s&&nu(t,n,!1),zt(e,t,l);r=t.stateNode,Zm.current=t;var a=o&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&o?(t.child=Xn(t,e.child,null,l),t.child=Xn(t,null,a,l)):De(e,t,a,l),t.memoizedState=r.state,s&&nu(t,n,!0),t.child}function Hd(e){var t=e.stateNode;t.pendingContext?tu(e,t.pendingContext,t.pendingContext!==t.context):t.context&&tu(e,t.context,!1),Qi(e,t.containerInfo)}function xu(e,t,n,r,s){return Jn(),$i(s),t.flags|=256,De(e,t,n,r),t.child}var ni={dehydrated:null,treeContext:null,retryLane:0};function ri(e){return{baseLanes:e,cachePool:null,transitions:null}}function Vd(e,t,n){var r=t.pendingProps,s=ie.current,l=!1,o=(t.flags&128)!==0,a;if((a=o)||(a=e!==null&&e.memoizedState===null?!1:(s&2)!==0),a?(l=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(s|=1),te(ie,s&1),e===null)return Go(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(o=r.children,e=r.fallback,l?(r=t.mode,l=t.child,o={mode:"hidden",children:o},!(r&1)&&l!==null?(l.childLanes=0,l.pendingProps=o):l=Pl(o,r,0,null),e=fn(e,r,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=ri(n),t.memoizedState=ni,e):ta(t,o));if(s=e.memoizedState,s!==null&&(a=s.dehydrated,a!==null))return eh(e,t,o,r,a,s,n);if(l){l=r.fallback,o=t.mode,s=e.child,a=s.sibling;var u={mode:"hidden",children:r.children};return!(o&1)&&t.child!==s?(r=t.child,r.childLanes=0,r.pendingProps=u,t.deletions=null):(r=Xt(s,u),r.subtreeFlags=s.subtreeFlags&14680064),a!==null?l=Xt(a,l):(l=fn(l,o,n,null),l.flags|=2),l.return=t,r.return=t,r.sibling=l,t.child=r,r=l,l=t.child,o=e.child.memoizedState,o=o===null?ri(n):{baseLanes:o.baseLanes|n,cachePool:null,transitions:o.transitions},l.memoizedState=o,l.childLanes=e.childLanes&~n,t.memoizedState=ni,r}return l=e.child,e=l.sibling,r=Xt(l,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function ta(e,t){return t=Pl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function _s(e,t,n,r){return r!==null&&$i(r),Xn(t,e.child,null,n),e=ta(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function eh(e,t,n,r,s,l,o){if(n)return t.flags&256?(t.flags&=-257,r=ao(Error(C(422))),_s(e,t,o,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(l=r.fallback,s=t.mode,r=Pl({mode:"visible",children:r.children},s,0,null),l=fn(l,s,o,null),l.flags|=2,r.return=t,l.return=t,r.sibling=l,t.child=r,t.mode&1&&Xn(t,e.child,null,o),t.child.memoizedState=ri(o),t.memoizedState=ni,l);if(!(t.mode&1))return _s(e,t,o,null);if(s.data==="$!"){if(r=s.nextSibling&&s.nextSibling.dataset,r)var a=r.dgst;return r=a,l=Error(C(419)),r=ao(l,r,void 0),_s(e,t,o,r)}if(a=(o&e.childLanes)!==0,Be||a){if(r=we,r!==null){switch(o&-o){case 4:s=2;break;case 16:s=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:s=32;break;case 536870912:s=268435456;break;default:s=0}s=s&(r.suspendedLanes|o)?0:s,s!==0&&s!==l.retryLane&&(l.retryLane=s,Lt(e,s),yt(r,e,s,-1))}return ia(),r=ao(Error(C(421))),_s(e,t,o,r)}return s.data==="$?"?(t.flags|=128,t.child=e.child,t=ph.bind(null,e),s._reactRetry=t,null):(e=l.treeContext,Ge=Qt(s.nextSibling),Je=t,oe=!0,mt=null,e!==null&&(nt[rt++]=bt,nt[rt++]=Rt,nt[rt++]=hn,bt=e.id,Rt=e.overflow,hn=t),t=ta(t,r.children),t.flags|=4096,t)}function vu(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Jo(e.return,t,n)}function uo(e,t,n,r,s){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:s}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=r,l.tail=n,l.tailMode=s)}function Wd(e,t,n){var r=t.pendingProps,s=r.revealOrder,l=r.tail;if(De(e,t,r.children,n),r=ie.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&vu(e,n,t);else if(e.tag===19)vu(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(te(ie,r),!(t.mode&1))t.memoizedState=null;else switch(s){case"forwards":for(n=t.child,s=null;n!==null;)e=n.alternate,e!==null&&al(e)===null&&(s=n),n=n.sibling;n=s,n===null?(s=t.child,t.child=null):(s=n.sibling,n.sibling=null),uo(t,!1,s,n,l);break;case"backwards":for(n=null,s=t.child,t.child=null;s!==null;){if(e=s.alternate,e!==null&&al(e)===null){t.child=s;break}e=s.sibling,s.sibling=n,n=s,s=e}uo(t,!0,n,null,l);break;case"together":uo(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Is(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function zt(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),gn|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(C(153));if(t.child!==null){for(e=t.child,n=Xt(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Xt(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function th(e,t,n){switch(t.tag){case 3:Hd(t),Jn();break;case 5:gd(t);break;case 1:Ve(t.type)&&nl(t);break;case 4:Qi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,s=t.memoizedProps.value;te(ll,r._currentValue),r._currentValue=s;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(te(ie,ie.current&1),t.flags|=128,null):n&t.child.childLanes?Vd(e,t,n):(te(ie,ie.current&1),e=zt(e,t,n),e!==null?e.sibling:null);te(ie,ie.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return Wd(e,t,n);t.flags|=128}if(s=t.memoizedState,s!==null&&(s.rendering=null,s.tail=null,s.lastEffect=null),te(ie,ie.current),r)break;return null;case 22:case 23:return t.lanes=0,$d(e,t,n)}return zt(e,t,n)}var qd,si,Qd,Kd;qd=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};si=function(){};Qd=function(e,t,n,r){var s=e.memoizedProps;if(s!==r){e=t.stateNode,un(_t.current);var l=null;switch(n){case"input":s=Eo(e,s),r=Eo(e,r),l=[];break;case"select":s=ue({},s,{value:void 0}),r=ue({},r,{value:void 0}),l=[];break;case"textarea":s=Ro(e,s),r=Ro(e,r),l=[];break;default:typeof s.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=el)}Po(n,r);var o;n=null;for(d in s)if(!r.hasOwnProperty(d)&&s.hasOwnProperty(d)&&s[d]!=null)if(d==="style"){var a=s[d];for(o in a)a.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else d!=="dangerouslySetInnerHTML"&&d!=="children"&&d!=="suppressContentEditableWarning"&&d!=="suppressHydrationWarning"&&d!=="autoFocus"&&(Lr.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var u=r[d];if(a=s!=null?s[d]:void 0,r.hasOwnProperty(d)&&u!==a&&(u!=null||a!=null))if(d==="style")if(a){for(o in a)!a.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in u)u.hasOwnProperty(o)&&a[o]!==u[o]&&(n||(n={}),n[o]=u[o])}else n||(l||(l=[]),l.push(d,n)),n=u;else d==="dangerouslySetInnerHTML"?(u=u?u.__html:void 0,a=a?a.__html:void 0,u!=null&&a!==u&&(l=l||[]).push(d,u)):d==="children"?typeof u!="string"&&typeof u!="number"||(l=l||[]).push(d,""+u):d!=="suppressContentEditableWarning"&&d!=="suppressHydrationWarning"&&(Lr.hasOwnProperty(d)?(u!=null&&d==="onScroll"&&ne("scroll",e),l||a===u||(l=[])):(l=l||[]).push(d,u))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}};Kd=function(e,t,n,r){n!==r&&(t.flags|=4)};function mr(e,t){if(!oe)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Oe(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var s=e.child;s!==null;)n|=s.lanes|s.childLanes,r|=s.subtreeFlags&14680064,r|=s.flags&14680064,s.return=e,s=s.sibling;else for(s=e.child;s!==null;)n|=s.lanes|s.childLanes,r|=s.subtreeFlags,r|=s.flags,s.return=e,s=s.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function nh(e,t,n){var r=t.pendingProps;switch(Ui(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Oe(t),null;case 1:return Ve(t.type)&&tl(),Oe(t),null;case 3:return r=t.stateNode,Yn(),se(He),se(ze),Gi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Ns(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,mt!==null&&(fi(mt),mt=null))),si(e,t),Oe(t),null;case 5:Ki(t);var s=un(Wr.current);if(n=t.type,e!==null&&t.stateNode!=null)Qd(e,t,n,r,s),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(C(166));return Oe(t),null}if(e=un(_t.current),Ns(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[St]=t,r[Hr]=l,e=(t.mode&1)!==0,n){case"dialog":ne("cancel",r),ne("close",r);break;case"iframe":case"object":case"embed":ne("load",r);break;case"video":case"audio":for(s=0;s<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[St]=t,e[Hr]=r,qd(e,t,!1,!1),t.stateNode=e;e:{switch(o=To(n,r),n){case"dialog":ne("cancel",e),ne("close",e),s=r;break;case"iframe":case"object":case"embed":ne("load",e),s=r;break;case"video":case"audio":for(s=0;ser&&(t.flags|=128,r=!0,mr(l,!1),t.lanes=4194304)}else{if(!r)if(e=al(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),mr(l,!0),l.tail===null&&l.tailMode==="hidden"&&!o.alternate&&!oe)return Oe(t),null}else 2*fe()-l.renderingStartTime>er&&n!==1073741824&&(t.flags|=128,r=!0,mr(l,!1),t.lanes=4194304);l.isBackwards?(o.sibling=t.child,t.child=o):(n=l.last,n!==null?n.sibling=o:t.child=o,l.last=o)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=fe(),t.sibling=null,n=ie.current,te(ie,r?n&1|2:n&1),t):(Oe(t),null);case 22:case 23:return oa(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Ke&1073741824&&(Oe(t),t.subtreeFlags&6&&(t.flags|=8192)):Oe(t),null;case 24:return null;case 25:return null}throw Error(C(156,t.tag))}function rh(e,t){switch(Ui(t),t.tag){case 1:return Ve(t.type)&&tl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Yn(),se(He),se(ze),Gi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ki(t),null;case 13:if(se(ie),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(C(340));Jn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return se(ie),null;case 4:return Yn(),null;case 10:return Vi(t.type._context),null;case 22:case 23:return oa(),null;case 24:return null;default:return null}}var Es=!1,Te=!1,sh=typeof WeakSet=="function"?WeakSet:Set,L=null;function In(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){de(e,t,r)}else n.current=null}function li(e,t,n){try{n()}catch(r){de(e,t,r)}}var wu=!1;function lh(e,t){if(Bo=Xs,e=Zc(),Ii(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var s=r.anchorOffset,l=r.focusNode;r=r.focusOffset;try{n.nodeType,l.nodeType}catch{n=null;break e}var o=0,a=-1,u=-1,d=0,m=0,y=e,h=null;t:for(;;){for(var v;y!==n||s!==0&&y.nodeType!==3||(a=o+s),y!==l||r!==0&&y.nodeType!==3||(u=o+r),y.nodeType===3&&(o+=y.nodeValue.length),(v=y.firstChild)!==null;)h=y,y=v;for(;;){if(y===e)break t;if(h===n&&++d===s&&(a=o),h===l&&++m===r&&(u=o),(v=y.nextSibling)!==null)break;y=h,h=y.parentNode}y=v}n=a===-1||u===-1?null:{start:a,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ho={focusedElem:e,selectionRange:n},Xs=!1,L=t;L!==null;)if(t=L,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,L=e;else for(;L!==null;){t=L;try{var S=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var w=S.memoizedProps,z=S.memoizedState,c=t.stateNode,f=c.getSnapshotBeforeUpdate(t.elementType===t.type?w:ft(t.type,w),z);c.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var p=t.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch(x){de(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,L=e;break}L=t.return}return S=wu,wu=!1,S}function Rr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var s=r=r.next;do{if((s.tag&e)===e){var l=s.destroy;s.destroy=void 0,l!==void 0&&li(t,n,l)}s=s.next}while(s!==r)}}function Rl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function oi(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Gd(e){var t=e.alternate;t!==null&&(e.alternate=null,Gd(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[St],delete t[Hr],delete t[qo],delete t[$m],delete t[Bm])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Jd(e){return e.tag===5||e.tag===3||e.tag===4}function ku(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Jd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ii(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=el));else if(r!==4&&(e=e.child,e!==null))for(ii(e,t,n),e=e.sibling;e!==null;)ii(e,t,n),e=e.sibling}function ai(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(ai(e,t,n),e=e.sibling;e!==null;)ai(e,t,n),e=e.sibling}var _e=null,pt=!1;function Mt(e,t,n){for(n=n.child;n!==null;)Xd(e,t,n),n=n.sibling}function Xd(e,t,n){if(jt&&typeof jt.onCommitFiberUnmount=="function")try{jt.onCommitFiberUnmount(kl,n)}catch{}switch(n.tag){case 5:Te||In(n,t);case 6:var r=_e,s=pt;_e=null,Mt(e,t,n),_e=r,pt=s,_e!==null&&(pt?(e=_e,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):_e.removeChild(n.stateNode));break;case 18:_e!==null&&(pt?(e=_e,n=n.stateNode,e.nodeType===8?no(e.parentNode,n):e.nodeType===1&&no(e,n),Ir(e)):no(_e,n.stateNode));break;case 4:r=_e,s=pt,_e=n.stateNode.containerInfo,pt=!0,Mt(e,t,n),_e=r,pt=s;break;case 0:case 11:case 14:case 15:if(!Te&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){s=r=r.next;do{var l=s,o=l.destroy;l=l.tag,o!==void 0&&(l&2||l&4)&&li(n,t,o),s=s.next}while(s!==r)}Mt(e,t,n);break;case 1:if(!Te&&(In(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){de(n,t,a)}Mt(e,t,n);break;case 21:Mt(e,t,n);break;case 22:n.mode&1?(Te=(r=Te)||n.memoizedState!==null,Mt(e,t,n),Te=r):Mt(e,t,n);break;default:Mt(e,t,n)}}function Su(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new sh),t.forEach(function(r){var s=mh.bind(null,e,r);n.has(r)||(n.add(r),r.then(s,s))})}}function dt(e,t){var n=t.deletions;if(n!==null)for(var r=0;rs&&(s=o),r&=~l}if(r=s,r=fe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*ih(r/1960))-r,10e?16:e,Ht===null)var r=!1;else{if(e=Ht,Ht=null,pl=0,J&6)throw Error(C(331));var s=J;for(J|=4,L=e.current;L!==null;){var l=L,o=l.child;if(L.flags&16){var a=l.deletions;if(a!==null){for(var u=0;ufe()-sa?dn(e,0):ra|=n),We(e,t)}function lf(e,t){t===0&&(e.mode&1?(t=gs,gs<<=1,!(gs&130023424)&&(gs=4194304)):t=1);var n=Me();e=Lt(e,t),e!==null&&(ts(e,t,n),We(e,n))}function ph(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),lf(e,n)}function mh(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,s=e.memoizedState;s!==null&&(n=s.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(C(314))}r!==null&&r.delete(t),lf(e,n)}var of;of=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||He.current)Be=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Be=!1,th(e,t,n);Be=!!(e.flags&131072)}else Be=!1,oe&&t.flags&1048576&&cd(t,sl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Is(e,t),e=t.pendingProps;var s=Gn(t,ze.current);Vn(t,n),s=Xi(null,t,r,e,s,n);var l=Yi();return t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ve(r)?(l=!0,nl(t)):l=!1,t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,qi(t),s.updater=bl,t.stateNode=s,s._reactInternals=t,Yo(t,r,e,n),t=ti(null,t,r,!0,l,n)):(t.tag=0,oe&&l&&Fi(t),De(null,t,s,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Is(e,t),e=t.pendingProps,s=r._init,r=s(r._payload),t.type=r,s=t.tag=yh(r),e=ft(r,e),s){case 0:t=ei(null,t,r,e,n);break e;case 1:t=gu(null,t,r,e,n);break e;case 11:t=hu(null,t,r,e,n);break e;case 14:t=yu(null,t,r,ft(r.type,e),n);break e}throw Error(C(306,r,""))}return t;case 0:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),ei(e,t,r,s,n);case 1:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),gu(e,t,r,s,n);case 3:e:{if(Hd(t),e===null)throw Error(C(387));r=t.pendingProps,l=t.memoizedState,s=l.element,yd(e,t),il(t,r,null,n);var o=t.memoizedState;if(r=o.element,l.isDehydrated)if(l={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){s=Zn(Error(C(423)),t),t=xu(e,t,r,n,s);break e}else if(r!==s){s=Zn(Error(C(424)),t),t=xu(e,t,r,n,s);break e}else for(Ge=Qt(t.stateNode.containerInfo.firstChild),Je=t,oe=!0,mt=null,n=md(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Jn(),r===s){t=zt(e,t,n);break e}De(e,t,r,n)}t=t.child}return t;case 5:return gd(t),e===null&&Go(t),r=t.type,s=t.pendingProps,l=e!==null?e.memoizedProps:null,o=s.children,Vo(r,s)?o=null:l!==null&&Vo(r,l)&&(t.flags|=32),Bd(e,t),De(e,t,o,n),t.child;case 6:return e===null&&Go(t),null;case 13:return Vd(e,t,n);case 4:return Qi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Xn(t,null,r,n):De(e,t,r,n),t.child;case 11:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),hu(e,t,r,s,n);case 7:return De(e,t,t.pendingProps,n),t.child;case 8:return De(e,t,t.pendingProps.children,n),t.child;case 12:return De(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,s=t.pendingProps,l=t.memoizedProps,o=s.value,te(ll,r._currentValue),r._currentValue=o,l!==null)if(xt(l.value,o)){if(l.children===s.children&&!He.current){t=zt(e,t,n);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var a=l.dependencies;if(a!==null){o=l.child;for(var u=a.firstContext;u!==null;){if(u.context===r){if(l.tag===1){u=Ot(-1,n&-n),u.tag=2;var d=l.updateQueue;if(d!==null){d=d.shared;var m=d.pending;m===null?u.next=u:(u.next=m.next,m.next=u),d.pending=u}}l.lanes|=n,u=l.alternate,u!==null&&(u.lanes|=n),Jo(l.return,n,t),a.lanes|=n;break}u=u.next}}else if(l.tag===10)o=l.type===t.type?null:l.child;else if(l.tag===18){if(o=l.return,o===null)throw Error(C(341));o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),Jo(o,n,t),o=l.sibling}else o=l.child;if(o!==null)o.return=l;else for(o=l;o!==null;){if(o===t){o=null;break}if(l=o.sibling,l!==null){l.return=o.return,o=l;break}o=o.return}l=o}De(e,t,s.children,n),t=t.child}return t;case 9:return s=t.type,r=t.pendingProps.children,Vn(t,n),s=ot(s),r=r(s),t.flags|=1,De(e,t,r,n),t.child;case 14:return r=t.type,s=ft(r,t.pendingProps),s=ft(r.type,s),yu(e,t,r,s,n);case 15:return Ud(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,s=t.pendingProps,s=t.elementType===r?s:ft(r,s),Is(e,t),t.tag=1,Ve(r)?(e=!0,nl(t)):e=!1,Vn(t,n),Md(t,r,s),Yo(t,r,s,n),ti(null,t,r,!0,e,n);case 19:return Wd(e,t,n);case 22:return $d(e,t,n)}throw Error(C(156,t.tag))};function af(e,t){return zc(e,t)}function hh(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function st(e,t,n,r){return new hh(e,t,n,r)}function aa(e){return e=e.prototype,!(!e||!e.isReactComponent)}function yh(e){if(typeof e=="function")return aa(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ci)return 11;if(e===bi)return 14}return 2}function Xt(e,t){var n=e.alternate;return n===null?(n=st(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function $s(e,t,n,r,s,l){var o=2;if(r=e,typeof e=="function")aa(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case Rn:return fn(n.children,s,l,t);case Ei:o=8,s|=8;break;case So:return e=st(12,n,t,s|2),e.elementType=So,e.lanes=l,e;case No:return e=st(13,n,t,s),e.elementType=No,e.lanes=l,e;case jo:return e=st(19,n,t,s),e.elementType=jo,e.lanes=l,e;case gc:return Pl(n,s,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case hc:o=10;break e;case yc:o=9;break e;case Ci:o=11;break e;case bi:o=14;break e;case It:o=16,r=null;break e}throw Error(C(130,e==null?e:typeof e,""))}return t=st(o,n,t,s),t.elementType=e,t.type=r,t.lanes=l,t}function fn(e,t,n,r){return e=st(7,e,r,t),e.lanes=n,e}function Pl(e,t,n,r){return e=st(22,e,r,t),e.elementType=gc,e.lanes=n,e.stateNode={isHidden:!1},e}function co(e,t,n){return e=st(6,e,null,t),e.lanes=n,e}function fo(e,t,n){return t=st(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function gh(e,t,n,r,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Wl(0),this.expirationTimes=Wl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Wl(0),this.identifierPrefix=r,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function ua(e,t,n,r,s,l,o,a,u){return e=new gh(e,t,n,a,u),t===1?(t=1,l===!0&&(t|=8)):t=0,l=st(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},qi(l),e}function xh(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(ff)}catch(e){console.error(e)}}ff(),dc.exports=Ye;var Nh=dc.exports,Ou=Nh;wo.createRoot=Ou.createRoot,wo.hydrateRoot=Ou.hydrateRoot;/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */var Nh={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + */var jh={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const jh=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().trim(),G=(e,t)=>{const n=O.forwardRef(({color:r="currentColor",size:s=24,strokeWidth:l=2,absoluteStrokeWidth:o,className:a="",children:u,...d},m)=>O.createElement("svg",{ref:m,...Nh,width:s,height:s,stroke:r,strokeWidth:o?Number(l)*24/Number(s):l,className:["lucide",`lucide-${jh(e)}`,a].join(" "),...d},[...t.map(([y,h])=>O.createElement(y,h)),...Array.isArray(u)?u:[u]]));return n.displayName=`${e}`,n};/** + */const _h=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().trim(),G=(e,t)=>{const n=O.forwardRef(({color:r="currentColor",size:s=24,strokeWidth:l=2,absoluteStrokeWidth:o,className:a="",children:u,...d},m)=>O.createElement("svg",{ref:m,...jh,width:s,height:s,stroke:r,strokeWidth:o?Number(l)*24/Number(s):l,className:["lucide",`lucide-${_h(e)}`,a].join(" "),...d},[...t.map(([y,h])=>O.createElement(y,h)),...Array.isArray(u)?u:[u]]));return n.displayName=`${e}`,n};/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const fi=G("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + */const pi=G("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const _h=G("AlertTriangle",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"c3ski4"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + */const Eh=G("AlertTriangle",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z",key:"c3ski4"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ou=G("Ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.9 4.9 14.2 14.2",key:"1m5liu"}]]);/** + */const Pu=G("Ban",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m4.9 4.9 14.2 14.2",key:"1m5liu"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ff=G("BarChart3",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** + */const pf=G("BarChart3",[["path",{d:"M3 3v18h18",key:"1s2lah"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. @@ -77,67 +77,67 @@ Error generating stack: `+l.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const pf=G("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + */const mf=G("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const mf=G("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + */const hf=G("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const pi=G("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + */const mi=G("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Eh=G("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** + */const Ch=G("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ch=G("Cpu",[["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"9",y:"9",width:"6",height:"6",key:"o3kz5p"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + */const bh=G("Cpu",[["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"9",y:"9",width:"6",height:"6",key:"o3kz5p"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const bh=G("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** + */const Rh=G("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Pu=G("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** + */const Tu=G("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const hf=G("ExternalLink",[["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}],["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["line",{x1:"10",x2:"21",y1:"14",y2:"3",key:"18c3s4"}]]);/** + */const yf=G("ExternalLink",[["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}],["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["line",{x1:"10",x2:"21",y1:"14",y2:"3",key:"18c3s4"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Rh=G("EyeOff",[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24",key:"1jxqfv"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68",key:"9wicm4"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61",key:"1jreej"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** + */const Oh=G("EyeOff",[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24",key:"1jxqfv"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68",key:"9wicm4"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61",key:"1jreej"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Oh=G("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + */const Ph=G("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ph=G("FileJson",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]]);/** + */const Th=G("FileJson",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Th=G("FileText",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"16",x2:"8",y1:"13",y2:"13",key:"14keom"}],["line",{x1:"16",x2:"8",y1:"17",y2:"17",key:"17nazh"}],["line",{x1:"10",x2:"8",y1:"9",y2:"9",key:"1a5vjj"}]]);/** + */const Lh=G("FileText",[["path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z",key:"1nnpy2"}],["polyline",{points:"14 2 14 8 20 8",key:"1ew0cm"}],["line",{x1:"16",x2:"8",y1:"13",y2:"13",key:"14keom"}],["line",{x1:"16",x2:"8",y1:"17",y2:"17",key:"17nazh"}],["line",{x1:"10",x2:"8",y1:"9",y2:"9",key:"1a5vjj"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Lh=G("Github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** + */const zh=G("Github",[["path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4",key:"tonef"}],["path",{d:"M9 18c-4.51 2-5-2-7-2",key:"9comsn"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. @@ -147,7 +147,7 @@ Error generating stack: `+l.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const zh=G("KeyRound",[["path",{d:"M2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4a6.5 6.5 0 1 0-4-4Z",key:"167ctg"}],["circle",{cx:"16.5",cy:"7.5",r:".5",key:"1kog09"}]]);/** + */const Ah=G("KeyRound",[["path",{d:"M2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4a6.5 6.5 0 1 0-4-4Z",key:"167ctg"}],["circle",{cx:"16.5",cy:"7.5",r:".5",key:"1kog09"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. @@ -157,12 +157,12 @@ Error generating stack: `+l.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ah=G("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** + */const Dh=G("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Dh=G("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + */const Mh=G("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. @@ -177,22 +177,22 @@ Error generating stack: `+l.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Mh=G("Save",[["path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z",key:"1owoqh"}],["polyline",{points:"17 21 17 13 7 13 7 21",key:"1md35c"}],["polyline",{points:"7 3 7 8 15 8",key:"8nz8an"}]]);/** + */const Ih=G("Save",[["path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z",key:"1owoqh"}],["polyline",{points:"17 21 17 13 7 13 7 21",key:"1md35c"}],["polyline",{points:"7 3 7 8 15 8",key:"8nz8an"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ih=G("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + */const Fh=G("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Fh=G("Shield",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}]]);/** + */const Uh=G("Shield",[["path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10",key:"1irkt0"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Uh=G("Snowflake",[["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"m20 16-4-4 4-4",key:"rquw4f"}],["path",{d:"m4 8 4 4-4 4",key:"12s3z9"}],["path",{d:"m16 4-4 4-4-4",key:"1tumq1"}],["path",{d:"m8 20 4-4 4 4",key:"9p200w"}]]);/** + */const $h=G("Snowflake",[["line",{x1:"2",x2:"22",y1:"12",y2:"12",key:"1dnqot"}],["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"m20 16-4-4 4-4",key:"rquw4f"}],["path",{d:"m4 8 4 4-4 4",key:"12s3z9"}],["path",{d:"m16 4-4 4-4-4",key:"1tumq1"}],["path",{d:"m8 20 4-4 4 4",key:"9p200w"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. @@ -202,36 +202,36 @@ Error generating stack: `+l.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const mi=G("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** + */const hi=G("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $h=G("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** + */const Bh=G("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const yf=G("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** + */const gf=G("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/** * @license lucide-react v0.294.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const gf=G("Zap",[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2",key:"45s27k"}]]);function xf(e,t){return function(){return e.apply(t,arguments)}}const{toString:Bh}=Object.prototype,{getPrototypeOf:en}=Object,{iterator:ls,toStringTag:vf}=Symbol,Xr=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),wf=e=>typeof e=="string"&&(e==="__proto__"||e==="constructor"||e==="prototype"),kf=(e,t,n)=>e===Object.prototype||!n&&t===null,Hh=e=>{if(!Object.isExtensible(e))return!1;const t=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&t.push(...Object.getOwnPropertySymbols(e)),t.every(n=>{if(wf(n))return!1;const r=Object.getOwnPropertyDescriptor(e,n);return!!r&&r.configurable&&r.writable===!0})},Yr=(e,t)=>{let n=e;const r=[];for(;n!=null;){if(r.indexOf(n)!==-1)return!1;r.push(n);const s=en(n);if(kf(n,s,n===e))return!1;if(Xr(n,t))return!0;n=s}return!1},Vh=(e,t)=>e!=null&&Yr(e,t)?e[t]:void 0,Wh=e=>{if(e==null||typeof e!="object"&&typeof e!="function")return e;const t=en(e);if(t===null&&Hh(e))return e;const n=Object.create(null),r=Object.create(null),s=[];let l=e;for(;l!=null&&s.indexOf(l)===-1;){s.push(l);const o=l===e?t:en(l);if(kf(l,o,l===e))break;const a=Object.getOwnPropertyNames(l);Object.getOwnPropertySymbols&&a.push(...Object.getOwnPropertySymbols(l));for(const u of a)wf(u)||Xr(r,u)||(n[u]=e[u],r[u]=!0);l=o}return n},fa=(e=>t=>{const n=Bh.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),at=e=>(e=e.toLowerCase(),t=>fa(t)===e),Al=e=>t=>typeof t===e,{isArray:vn}=Array,wn=Al("undefined");function sr(e){return e!==null&&!wn(e)&&e.constructor!==null&&!wn(e.constructor)&&qe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Sf=at("ArrayBuffer");function qh(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Sf(e.buffer),t}const Qh=Al("string"),qe=Al("function"),Nf=Al("number"),lr=e=>e!==null&&typeof e=="object",Kh=e=>e===!0||e===!1,Bs=e=>{if(!lr(e))return!1;const t=en(e);return(t===null||t===Object.prototype||en(t)===null)&&!Yr(e,vf)&&!Yr(e,ls)},Gh=e=>{if(!lr(e)||sr(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Jh=at("Date"),Xh=at("File"),Yh=e=>!!(e&&typeof e.uri<"u"),Zh=e=>e&&typeof e.getParts<"u",e0=at("Blob"),t0=at("FileList"),n0=at("Set"),r0=e=>lr(e)&&qe(e.pipe);function s0(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Tu=s0(),Lu=typeof Tu.FormData<"u"?Tu.FormData:void 0,l0=e=>{if(!e)return!1;if(Lu&&e instanceof Lu)return!0;const t=en(e);if(!t||t===Object.prototype||!qe(e.append))return!1;const n=fa(e);return n==="formdata"||n==="object"&&qe(e.toString)&&e.toString()==="[object FormData]"},o0=at("URLSearchParams"),[i0,a0,u0,c0]=["ReadableStream","Request","Response","Headers"].map(at),d0=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function os(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),vn(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,_f=e=>!wn(e)&&e!==cn;function hi(...e){const{caseless:t,skipUndefined:n}=_f(this)&&this||{},r={},s=(l,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const a=t&&typeof o=="string"&&jf(r,o)||o,u=Xr(r,a)?r[a]:void 0;Bs(u)&&Bs(l)?r[a]=hi(u,l):Bs(l)?r[a]=hi({},l):vn(l)?r[a]=l.slice():(!n||!wn(l))&&(r[a]=l)};for(let l=0,o=e.length;l(os(t,(s,l)=>{n&&qe(s)?Object.defineProperty(e,l,{__proto__:null,value:xf(s,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,l,{__proto__:null,value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),p0=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),m0=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},h0=(e,t,n,r)=>{let s,l,o;const a={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),l=s.length;l-- >0;)o=s[l],(!r||r(o,e,t))&&!a[o]&&(t[o]=e[o],a[o]=!0);e=n!==!1&&en(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},y0=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},g0=e=>{if(!e)return null;if(vn(e))return e;let t=e.length;if(!Nf(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},x0=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&en(Uint8Array)),v0=(e,t)=>{const r=(e&&e[ls]).call(e);let s;for(;(s=r.next())&&!s.done;){const l=s.value;t.call(e,l[0],l[1])}},w0=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},k0=at("HTMLFormElement"),S0=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),{propertyIsEnumerable:N0}=Object.prototype,j0=at("RegExp"),Ef=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};os(n,(s,l)=>{let o;(o=t(s,l,e))!==!1&&(r[l]=o||s)}),Object.defineProperties(e,r)},_0=e=>{Ef(e,(t,n)=>{if(qe(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];if(qe(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},E0=(e,t)=>{const n={},r=s=>{s.forEach(l=>{n[l]=!0})};return vn(e)?r(e):r(String(e).split(t)),n},C0=()=>{},b0=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function R0(e){return!!(e&&qe(e.append)&&e[vf]==="FormData"&&e[ls])}const O0=e=>{const t=new WeakSet,n=r=>{if(lr(r)){if(t.has(r))return;if(sr(r))return r;if(!("toJSON"in r)){t.add(r);let s;if(n0(r)){s=[];for(const l of r){const o=n(l);!wn(o)&&s.push(o)}}else s=vn(r)?[]:{},os(r,(l,o)=>{const a=n(l);!wn(a)&&(s[o]=a)});return t.delete(r),s}}return r};return n(e)},P0=at("AsyncFunction"),T0=e=>e&&(lr(e)||qe(e))&&qe(e.then)&&qe(e.catch),Cf=((e,t)=>e?setImmediate:t?((n,r)=>(cn.addEventListener("message",({source:s,data:l})=>{s===cn&&l===n&&r.length&&r.shift()()},!1),s=>{r.push(s),cn.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",qe(cn.postMessage)),L0=typeof queueMicrotask<"u"?queueMicrotask.bind(cn):typeof process<"u"&&process.nextTick||Cf,bf=e=>e!=null&&qe(e[ls]),z0=e=>e!=null&&Yr(e,ls)&&bf(e),g={isArray:vn,isArrayBuffer:Sf,isBuffer:sr,isFormData:l0,isArrayBufferView:qh,isString:Qh,isNumber:Nf,isBoolean:Kh,isObject:lr,isPlainObject:Bs,isEmptyObject:Gh,isReadableStream:i0,isRequest:a0,isResponse:u0,isHeaders:c0,isUndefined:wn,isDate:Jh,isFile:Xh,isReactNativeBlob:Yh,isReactNative:Zh,isBlob:e0,isRegExp:j0,isFunction:qe,isStream:r0,isURLSearchParams:o0,isTypedArray:x0,isFileList:t0,forEach:os,merge:hi,extend:f0,trim:d0,stripBOM:p0,inherits:m0,toFlatObject:h0,kindOf:fa,kindOfTest:at,endsWith:y0,toArray:g0,forEachEntry:v0,matchAll:w0,isHTMLForm:k0,hasOwnProperty:Xr,hasOwnProp:Xr,hasOwnInPrototypeChain:Yr,getSafeProp:Vh,toSafeFlatObject:Wh,reduceDescriptors:Ef,freezeMethods:_0,toObjectSet:E0,toCamelCase:S0,noop:C0,toFiniteNumber:b0,findKey:jf,global:cn,isContextDefined:_f,isSpecCompliantForm:R0,toJSONObject:O0,isAsyncFn:P0,isThenable:T0,setImmediate:Cf,asap:L0,isIterable:bf,isSafeIterable:z0},A0=g.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),D0=e=>{const t={};let n,r,s;return e&&e.split(` -`).forEach(function(o){s=o.indexOf(":"),n=o.substring(0,s).trim().toLowerCase(),r=o.substring(s+1).trim();const a=g.hasOwnProp(t,n);!n||a&&g.hasOwnProp(A0,n)||(n==="set-cookie"?a?t[n].push(r):t[n]=[r]:t[n]=a?t[n]+", "+r:r)}),t};function M0(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const I0=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),F0=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function pa(e,t){return g.isArray(e)?e.map(n=>pa(n,t)):M0(String(e).replace(t,""))}const U0=e=>pa(e,I0),$0=e=>pa(e,F0);function Rf(e){const t=Object.create(null);return g.forEach(e.toJSON(),(n,r)=>{t[r]=$0(n)}),t}const zu=Symbol("internals");function yr(e){return e&&String(e).trim().toLowerCase()}function Hs(e){return e===!1||e==null?e:g.isArray(e)?e.map(Hs):U0(String(e))}function B0(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const H0=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;function fo(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}function V0(e){const t=e.length-1;if(t<1||e.charCodeAt(0)!==34||e.charCodeAt(t)!==34)return e;let n="";for(let r=1;r=t))return e;n+=e[r]}return n}function W0(e){const t=Object.create(null),n=String(e);let r=0,s=!1,l=!1;function o(a){const u=fo(n.slice(r,a)),d=u.indexOf("=");if(d<1)return;const m=fo(u.slice(0,d));if(!H0.test(m))return;const y=m.toLowerCase();if(y==="__proto__"||y==="constructor"||y==="prototype")return;const h=fo(u.slice(d+1));t[y]=V0(h)}for(let a=0;a/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function po(e,t,n,r,s){if(g.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!g.isString(t)){if(g.isString(r))return t.indexOf(r)!==-1;if(g.isRegExp(r))return r.test(t)}}function Q0(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function K0(e,t){const n=g.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(s,l,o){return this[r].call(this,t,s,l,o)},configurable:!0})})}let Le=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function l(a,u,d){const m=yr(u);if(!m)return;const y=g.findKey(s,m);(!y||s[y]===void 0||d===!0||d===void 0&&s[y]!==!1)&&(s[y||u]=Hs(a))}const o=(a,u)=>g.forEach(a,(d,m)=>l(d,m,u));if(g.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(g.isString(t)&&(t=t.trim())&&!q0(t))o(D0(t),n);else if(g.isObject(t)&&g.isSafeIterable(t)){let a=Object.create(null),u,d;for(const m of t){if(!g.isArray(m))throw new TypeError("Object iterator must return a key-value pair");d=m[0],g.hasOwnProp(a,d)?(u=a[d],a[d]=g.isArray(u)?[...u,m[1]]:[u,m[1]]):a[d]=m[1]}o(a,n)}else t!=null&&l(n,t,r);return this}get(t,n){if(t=yr(t),t){const r=g.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return B0(s);if(g.isFunction(n))return n.call(this,s,r);if(g.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=yr(t),t){const r=g.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||po(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function l(o){if(o=yr(o),o){const a=g.findKey(r,o);a&&(!n||po(r,r[a],a,n))&&(delete r[a],s=!0)}}return g.isArray(t)?t.forEach(l):l(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const l=n[r];(!t||po(this,this[l],l,t,!0))&&(delete this[l],s=!0)}return s}normalize(t){const n=this,r={};return g.forEach(this,(s,l)=>{const o=g.findKey(r,l);if(o){n[o]=Hs(s),delete n[l];return}const a=t?Q0(l):String(l).trim();a!==l&&delete n[l],n[a]=Hs(s),r[a]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return g.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&g.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}getSetCookie(){const t=this.get("set-cookie");return g.isArray(t)?t:t==null||t===!1?[]:[t]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static parseParameters(t){return W0(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[zu]=this[zu]={accessors:{}}).accessors,s=this.prototype;function l(o){const a=yr(o);r[a]||(K0(s,o),r[a]=!0)}return g.isArray(t)?t.forEach(l):l(t),this}};Le.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);g.reduceDescriptors(Le.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});g.freezeMethods(Le);const gl="[REDACTED ****]";function G0(e){if(g.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(g.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function J0(e,t){const n=new Set(t.map(l=>String(l).toLowerCase())),r=[],s=l=>{if(l===null||typeof l!="object"||g.isBuffer(l))return l;if(r.indexOf(l)!==-1)return;l instanceof Le&&(l=l.toJSON()),r.push(l);let o;if(g.isArray(l))o=[],l.forEach((a,u)=>{const d=s(a);g.isUndefined(d)||(o[u]=d)});else{if(!g.isPlainObject(l)&&G0(l))return r.pop(),l;o=Object.create(null);for(const[a,u]of Object.entries(l)){const d=n.has(a.toLowerCase())?gl:s(u);g.isUndefined(d)||(o[a]=d)}}return r.pop(),o};return s(e)}function Au(e){try{return String(e)}catch{return""}}function X0(e){return e.errors.map(n=>{try{return n&&n.message?Au(n.message):Au(n)}catch{return""}}).filter(Boolean).join("; ")||e.name||"AggregateError"}let T=class Of extends Error{static from(t,n,r,s,l,o){let a=t.message;!a&&g.isArray(t.errors)&&t.errors.length&&(a=X0(t));const u=new Of(a,n||t.code,r,s,l);return Object.defineProperty(u,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),u.name=t.name,t.status!=null&&u.status==null&&(u.status=t.status),o&&Object.assign(u,o),u}constructor(t,n,r,s,l){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),r&&(this.config=r),s&&(this.request=s),l&&(this.response=l,this.status=l.status)}toJSON(){const t=this.config,n=t&&g.hasOwnProp(t,"redact")?t.redact:void 0,r=g.isArray(n)&&n.length>0?J0(t,n):g.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:r,code:this.code,status:this.status}}};T.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";T.ERR_BAD_OPTION="ERR_BAD_OPTION";T.ECONNABORTED="ECONNABORTED";T.ETIMEDOUT="ETIMEDOUT";T.ECONNREFUSED="ECONNREFUSED";T.ERR_NETWORK="ERR_NETWORK";T.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";T.ERR_DEPRECATED="ERR_DEPRECATED";T.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";T.ERR_BAD_REQUEST="ERR_BAD_REQUEST";T.ERR_CANCELED="ERR_CANCELED";T.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";T.ERR_INVALID_URL="ERR_INVALID_URL";T.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const Y0=null,Pf=100;function yi(e){return g.isPlainObject(e)||g.isArray(e)}function Tf(e){return g.endsWith(e,"[]")?e.slice(0,-2):e}function mo(e,t,n){return e?e.concat(t).map(function(s,l){return s=Tf(s),!n&&l?"["+s+"]":s}).join(n?".":""):t}function Z0(e){return g.isArray(e)&&!e.some(yi)}const ey=g.toFlatObject(g,{},null,function(t){return/^is[A-Z]/.test(t)});function Dl(e,t,n){if(!g.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(f,p)=>{const x=g.getSafeProp(n,f);return g.isUndefined(x)?p:x},s=r("metaTokens",!0),l=r("visitor")||w,o=r("dots",!1),a=r("indexes",!1),u=r("Blob")||typeof Blob<"u"&&Blob,d=r("maxDepth",Pf),m=u&&g.isSpecCompliantForm(t),y=[];if(!g.isFunction(l))throw new TypeError("visitor must be a function");function h(f){if(f===null)return"";if(g.isDate(f))return f.toISOString();if(g.isBoolean(f))return f.toString();if(!m&&g.isBlob(f))throw new T("Blob is not supported. Use a Buffer instead.");if(g.isArrayBuffer(f)||g.isTypedArray(f)){if(m&&typeof u=="function")return new u([f]);throw new T("Blob is not supported. Use a Buffer instead.",T.ERR_NOT_SUPPORT)}return f}function v(f){if(f>d)throw new T("Object is too deeply nested ("+f+" levels). Max depth: "+d,T.ERR_FORM_DATA_DEPTH_EXCEEDED)}function S(f,p){if(d===1/0)return JSON.stringify(f);const x=[];return JSON.stringify(f,function(N,j){if(!g.isObject(j))return j;for(;x.length&&x[x.length-1]!==this;)x.pop();return x.push(j),v(p+x.length-1),j})}function w(f,p,x){let k=f;if(g.isReactNative(t)&&g.isReactNativeBlob(f))return t.append(mo(x,p,o),h(f)),!1;if(f&&!x&&typeof f=="object"){if(g.endsWith(p,"{}"))p=s?p:p.slice(0,-2),f=S(f,1);else if(g.isArray(f)&&Z0(f)||(g.isFileList(f)||g.endsWith(p,"[]"))&&(k=g.toArray(f)))return p=Tf(p),k.forEach(function(j,E){!(g.isUndefined(j)||j===null)&&t.append(a===!0?mo([p],E,o):a===null?p:p+"[]",h(j))}),!1}return yi(f)?!0:(t.append(mo(x,p,o),h(f)),!1)}const z=Object.assign(ey,{defaultVisitor:w,convertValue:h,isVisitable:yi});function c(f,p,x=0){if(!g.isUndefined(f)){if(v(x),y.indexOf(f)!==-1)throw new Error("Circular reference detected in "+p.join("."));y.push(f),g.forEach(f,function(N,j){(!(g.isUndefined(N)||N===null)&&l.call(t,N,g.isString(j)?j.trim():j,p,z))===!0&&c(N,p?p.concat(j):[j],x+1)}),y.pop()}}if(!g.isObject(e))throw new TypeError("data must be an object");return c(e),t}function Du(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(r){return t[r]})}function ma(e,t){this._pairs=[],e&&Dl(e,this,t)}const Lf=ma.prototype;Lf.append=function(t,n){this._pairs.push([t,n])};Lf.toString=function(t){const n=t?r=>t.call(this,r,Du):Du;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function ty(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function zf(e,t,n){if(!t)return e;e=e||"";const r=g.isFunction(n)?{serialize:n}:n,s=g.getSafeProp(r,"encode")||ty,l=g.getSafeProp(r,"serialize");let o;if(l?o=l(t,r):o=g.isURLSearchParams(t)?t.toString():new ma(t,r).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}const gr=Symbol("internals");function Af(e){return e?e.length:0}function Mu(e){if(e)for(;e.length&&e[e.length-1]===null;)e.pop()}function xr(e,t){const n=e.handlers,r=Af(n);n!==t.handlersRef?(t.handlersRef=n,t.handlerEntries.clear()):r!==t.handlersLength&&(r?t.handlerEntries.forEach(function(l,o){n[l.index]!==l.handler&&t.handlerEntries.delete(o)}):t.handlerEntries.clear()),t.handlersLength=r}class Iu{constructor(){this.handlers=[],this[gr]={handlersRef:this.handlers,handlersLength:this.handlers.length,handlerEntries:new Map,iterationDepth:0,nextId:0}}use(t,n,r){const s={fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null},l=this[gr];this.handlers==null&&(this.handlers=[]),xr(this,l);const o=l.nextId++;return this.handlers.push(s),l.handlerEntries.set(o,{handler:s,index:this.handlers.length-1}),l.handlersLength=this.handlers.length,o}eject(t){const n=this[gr];xr(this,n);const r=n.handlerEntries.get(t);if(r){if(n.handlerEntries.delete(t),this.handlers[r.index]!==r.handler)return;this.handlers[r.index]=null,n.iterationDepth||(Mu(this.handlers),n.handlersLength=this.handlers.length)}}clear(){this.handlers&&(this.handlers=[],xr(this,this[gr]))}forEach(t){const n=this[gr];xr(this,n),n.iterationDepth++;try{g.forEach(this.handlers,function(s){s!==null&&t(s)})}finally{--n.iterationDepth||(xr(this,n),Mu(this.handlers),n.handlersLength=Af(this.handlers))}}}const ha={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},ny=typeof URLSearchParams<"u"?URLSearchParams:ma,ry=typeof FormData<"u"?FormData:null,sy=typeof Blob<"u"?Blob:null,ly={isBrowser:!0,classes:{URLSearchParams:ny,FormData:ry,Blob:sy},protocols:["http","https","file","blob","url","data"]},ya=typeof window<"u"&&typeof document<"u",gi=typeof navigator=="object"&&navigator||void 0,oy=ya&&(!gi||["ReactNative","NativeScript","NS"].indexOf(gi.product)<0),iy=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",ay=ya&&window.location.href||"http://localhost",uy=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:ya,hasStandardBrowserEnv:oy,hasStandardBrowserWebWorkerEnv:iy,navigator:gi,origin:ay},Symbol.toStringTag,{value:"Module"})),ve={...uy,...ly};function cy(e,t){return Dl(e,new ve.classes.URLSearchParams,{visitor:function(n,r,s,l){return ve.isNode&&g.isBuffer(n)?(this.append(r,n.toString("base64")),!1):l.defaultVisitor.apply(this,arguments)},...t})}const Fu=Pf;function Df(e){if(e>Fu)throw new T("FormData field is too deeply nested ("+e+" levels). Max depth: "+Fu,T.ERR_FORM_DATA_DEPTH_EXCEEDED)}function dy(e){const t=[],n=/[^.[\]]+|\[([^.[\]]*)]/g;let r;for(;(r=n.exec(e))!==null;)Df(t.length),t.push(r[0]==="[]"?"":r[1]||r[0]);return t}function fy(e){const t={},n=Object.keys(e);let r;const s=n.length;let l;for(r=0;r=n.length;return o=!o&&g.isArray(s)?s.length:o,u?(g.hasOwnProp(s,o)?s[o]=g.isArray(s[o])?s[o].concat(r):[s[o],r]:s[o]=r,!a):((!g.hasOwnProp(s,o)||!g.isObject(s[o]))&&(s[o]=[]),t(n,r,s[o],l)&&g.isArray(s[o])&&(s[o]=fy(s[o])),!a)}if(g.isFormData(e)&&g.isFunction(e.entries)){const n={};return g.forEachEntry(e,(r,s)=>{t(dy(r),s,n,0)}),n}return null}const If=Object.freeze(["get","delete","head","options","post","put","patch","purge","link","unlink","query"]),En=(e,t)=>e!=null&&g.hasOwnProp(e,t)?e[t]:void 0;function py(e,t,n){if(g.isString(e))try{return(t||JSON.parse)(e),g.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const is={transitional:ha,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,l=g.isObject(t);if(l&&g.isHTMLForm(t)&&(t=new FormData(t)),g.isFormData(t))return s?JSON.stringify(Mf(t)):t;if(g.isArrayBuffer(t)||g.isBuffer(t)||g.isStream(t)||g.isFile(t)||g.isBlob(t)||g.isReadableStream(t))return t;if(g.isArrayBufferView(t))return t.buffer;if(g.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let a;if(l){const u=En(this,"formSerializer");if(r.indexOf("application/x-www-form-urlencoded")>-1)return cy(t,u).toString();if((a=g.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=En(this,"env"),m=d&&d.FormData;return Dl(a?{"files[]":t}:t,m&&new m,u)}}return l||s?(n.setContentType("application/json",!1),py(t)):t}],transformResponse:[function(t){const n=En(this,"transitional")||is.transitional,r=n&&n.forcedJSONParsing,s=En(this,"responseType"),l=s==="json";if(g.isResponse(t)||g.isReadableStream(t))return t;if(t&&g.isString(t)&&(r&&!s||l)){const a=!(n&&n.silentJSONParsing)&&l;try{return JSON.parse(t,En(this,"parseReviver"))}catch(u){if(a)throw u.name==="SyntaxError"?T.from(u,T.ERR_BAD_RESPONSE,this,null,En(this,"response")):u}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ve.classes.FormData,Blob:ve.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};g.forEach(If,e=>{is.headers[e]={}});function ho(e,t){const n=this||is,r=t||n,s=Le.from(r.headers);let l=r.data;return g.forEach(e,function(a){l=a.call(n,l,s.normalize(),t?t.status:void 0)}),s.normalize(),l}function Ff(e){return!!(e&&e.__CANCEL__)}let as=class extends T{constructor(t,n,r){super(t??"canceled",T.ERR_CANCELED,n,r),this.name="CanceledError",this.__CANCEL__=!0}};function Uf(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new T("Request failed with status code "+n.status,n.status>=400&&n.status<500?T.ERR_BAD_REQUEST:T.ERR_BAD_RESPONSE,n.config,n.request,n))}const my=/[\t\n\r]/g;function $f(e){if(typeof e!="string")return e;let t=0;for(;t{n=y,s=null,l&&(clearTimeout(l),l=null),e(...m)};return[(...m)=>{const y=Date.now(),h=y-n;h>=r?o(m,y):(s=m,l||(l=setTimeout(()=>{l=null,o(s)},r-h)))},()=>s&&o(s),(...m)=>o(m)]}const xl=(e,t,n=3)=>{let r=0;const s=hy(50,250);return yy(l=>{if(!l||!g.isNumber(l.loaded))return;const o=l.loaded,a=l.lengthComputable?l.total:void 0,u=Math.max(0,a!=null?Math.min(o,a):o),d=Math.max(0,u-r),m=s(d);r=Math.max(r,u);const y={loaded:u,total:a,progress:a?u/a:void 0,bytes:d,rate:m||void 0,estimated:m&&a?(a-u)/m:void 0,event:l,lengthComputable:a!=null,[t?"download":"upload"]:!0};e(y)},n)},Uu=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},$u=(e,t=g.asap)=>(...n)=>t(()=>e(...n)),gy=ve.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ve.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ve.origin),ve.navigator&&/(msie|trident)/i.test(ve.navigator.userAgent)):()=>!0,xy=ve.hasStandardBrowserEnv?{write(e,t,n,r,s,l,o){if(typeof document>"u")return;const a=[`${e}=${encodeURIComponent(t)}`];g.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),g.isString(r)&&a.push(`path=${r}`),g.isString(s)&&a.push(`domain=${s}`),l===!0&&a.push("secure"),g.isString(o)&&a.push(`SameSite=${o}`),document.cookie=a.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;n0&&e.charCodeAt(n-1)===47;)n--;return e.slice(0,n)+"/"+t.replace(/^\/+/,"")}const ky=/^https?:(?!\/\/)/i;function Sy(e){return e&&e.replace(/(^|&)([^=&]*=)?[^&]+/g,(t,n,r="")=>`${n}${r}${gl}`)}function Ny(e){const t=e.replace(/^(https?:\/{0,2})[^/?#]*@/i,`$1${gl}@`),n=t.indexOf("#"),s=(n===-1?t:t.slice(0,n)).replace(/([?&][^=&#]*=)[^&#]*/g,`$1${gl}`);return n===-1?s:`${s}#${Sy(t.slice(n+1))}`}function Bu(e,t){if(typeof e=="string"){const n=$f(e);if(ky.test(n))throw new T(`Invalid URL ${JSON.stringify(Ny(n))}: missing "//" after protocol`,T.ERR_INVALID_URL,t)}}function Bf(e,t,n,r){Bu(t,r);let s=!vy(t);return e&&(s||n===!1)?(Bu(e,r),wy(e,t)):t}const Hu=e=>e instanceof Le?{...e}:e,jy=e=>Object.getOwnPropertySymbols&&Object.getOwnPropertyDescriptor?Object.keys(e).concat(Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)):Object.keys(e);function kn(e,t){e=e||{},t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function r(m,y,h,v){return g.isPlainObject(m)&&g.isPlainObject(y)?g.merge.call({caseless:v},m,y):g.isPlainObject(y)?g.merge({},y):g.isArray(y)?y.slice():y}function s(m,y,h,v){if(g.isUndefined(y)){if(!g.isUndefined(m))return r(void 0,m,h,v)}else return r(m,y,h,v)}function l(m,y){if(!g.isUndefined(y))return r(void 0,y)}function o(m,y){if(g.isUndefined(y)){if(!g.isUndefined(m))return r(void 0,m)}else return r(void 0,y)}function a(m){const y=g.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!g.isUndefined(y))if(g.isPlainObject(y)){if(g.hasOwnProp(y,m))return y[m]}else return;const h=g.hasOwnProp(e,"transitional")?e.transitional:void 0;if(g.isPlainObject(h)&&g.hasOwnProp(h,m))return h[m]}function u(m,y,h){if(g.hasOwnProp(t,h))return r(m,y);if(g.hasOwnProp(e,h))return r(void 0,m)}const d={url:l,method:l,data:l,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutErrorMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,allowedSocketPaths:o,responseEncoding:o,validateStatus:u,headers:(m,y,h)=>s(Hu(m),Hu(y),h,!0)};return g.forEach(jy({...e,...t}),function(y){if(y==="__proto__"||y==="constructor"||y==="prototype")return;const h=g.hasOwnProp(d,y)?d[y]:s,v=g.hasOwnProp(e,y)?e[y]:void 0,S=g.hasOwnProp(t,y)?t[y]:void 0,w=h(v,S,y);g.isUndefined(w)&&h!==u||(n[y]=w)}),g.hasOwnProp(t,"validateStatus")&&g.isUndefined(t.validateStatus)&&a("validateStatusUndefinedResolves")===!1&&(g.hasOwnProp(e,"validateStatus")?n.validateStatus=r(void 0,e.validateStatus):delete n.validateStatus),n}const _y=["content-type","content-length"];function Ey(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([r,s])=>{_y.includes(r.toLowerCase())&&e.set(r,s)})}const Cy=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function Hf(e){const t=kn({},e),n=h=>g.hasOwnProp(t,h)?t[h]:void 0,r=n("data");let s=n("withXSRFToken");const l=n("xsrfHeaderName"),o=n("xsrfCookieName");let a=n("headers");const u=n("auth"),d=n("baseURL"),m=n("allowAbsoluteUrls"),y=n("url");if(t.headers=a=Le.from(a),t.url=zf(Bf(d,y,m,t),n("params"),n("paramsSerializer")),u){const h=g.getSafeProp(u,"username")||"",v=g.getSafeProp(u,"password")||"";try{a.set("Authorization","Basic "+btoa(h+":"+(v?Cy(v):"")))}catch(S){throw T.from(S,T.ERR_BAD_OPTION_VALUE,e)}}if(g.isFormData(r)){const h=g.getSafeProp(r,"getHeaders");ve.hasStandardBrowserEnv||ve.hasStandardBrowserWebWorkerEnv||g.isReactNative(r)?a.setContentType(void 0):g.isFunction(h)&&Ey(a,h.call(r),n("formDataHeaderPolicy"))}if(ve.hasStandardBrowserEnv&&(g.isFunction(s)&&(s=s(t)),s===!0||s==null&&gy(t.url))){const v=l&&o&&xy.read(o);v&&a.set(l,v)}return t}const by=typeof XMLHttpRequest<"u",Ry=by&&function(e){return new Promise(function(n,r){const s=Hf(e);let l=s.data;const o=Le.from(s.headers).normalize();let{responseType:a,onUploadProgress:u,onDownloadProgress:d}=s,m,y,h,v,S,w;function z(){v&&v(),S&&S(),s.cancelToken&&s.cancelToken.unsubscribe(m),s.signal&&s.signal.removeEventListener("abort",m)}let c=new XMLHttpRequest;c.open(s.method.toUpperCase(),s.url,!0),c.timeout=s.timeout;function f(x){if(!c)return;if(c.status===0&&(yo($f(s.url))||yo(ve.origin))!=="file"&&!(c.responseURL&&c.responseURL.startsWith("file:"))){r(new T("Request aborted",T.ECONNABORTED,e,c)),z(),c=null;return}try{x?w&&w(x):S&&S()}catch(E){setTimeout(()=>{throw E})}if(!c)return;const k=Le.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),j={data:!a||a==="text"||a==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:k,config:e,request:c};Uf(function(F){n(F),z()},function(F){r(F),z()},j),c=null}"onloadend"in c?c.onloadend=f:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.startsWith("file:"))||setTimeout(f)},c.onabort=function(){c&&(r(new T("Request aborted",T.ECONNABORTED,e,c)),z(),c=null)},c.onerror=function(k){const N=k&&k.message?k.message:"Network Error",j=new T(N,T.ERR_NETWORK,e,c);j.event=k||null,r(j),z(),c=null},c.ontimeout=function(){let k=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const N=s.transitional||ha;s.timeoutErrorMessage&&(k=s.timeoutErrorMessage),r(new T(k,N.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,e,c)),z(),c=null},l===void 0&&o.setContentType(null),"setRequestHeader"in c&&g.forEach(Rf(o),function(k,N){c.setRequestHeader(N,k)}),g.isUndefined(s.withCredentials)||(c.withCredentials=!!s.withCredentials),a&&a!=="json"&&(c.responseType=s.responseType),d&&([h,S,w]=xl(d,!0),c.addEventListener("progress",h)),u&&c.upload&&([y,v]=xl(u),c.upload.addEventListener("progress",y),c.upload.addEventListener("loadend",v)),(s.cancelToken||s.signal)&&(m=x=>{c&&(r(!x||x.type?new as(null,e,c):x),c.abort(),z(),c=null)},s.cancelToken&&s.cancelToken.subscribe(m),s.signal&&(s.signal.aborted?m():s.signal.addEventListener("abort",m)));const p=yo(s.url);if(p&&!ve.protocols.includes(p)){r(new T("Unsupported protocol "+p+":",T.ERR_BAD_REQUEST,e)),z();return}c.send(l||null)})},Oy=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let r=!1;const s=function(u){if(!r){r=!0,o();const d=u instanceof Error?u:this.reason;n.abort(d instanceof T?d:new as(d instanceof Error?d.message:d))}};let l=t&&setTimeout(()=>{l=null,s(new T(`timeout of ${t}ms exceeded`,T.ETIMEDOUT))},t);const o=()=>{e&&(l&&clearTimeout(l),l=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(s):u.removeEventListener("abort",s)}),e=null)};e.forEach(u=>{if(!r){if(u.aborted){s.call(u);return}u.addEventListener("abort",s,{once:!0})}});const{signal:a}=n;return a.unsubscribe=()=>g.asap(o),a},Py=function*(e,t){let n=e.byteLength;if(n{const s=Ty(e,t);let l=0,o,a=u=>{o||(o=!0,r&&r(u))};return new ReadableStream({async pull(u){try{const{done:d,value:m}=await s.next();if(d){a(),u.close();return}let y=m.byteLength;if(n){let h=l+=y;n(h)}u.enqueue(new Uint8Array(m))}catch(d){throw a(d),d}},cancel(u){return a(u),s.return()}},{highWaterMark:2})},Wu=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,Vf=(e,t,n)=>t+2e<=57?e-48:(e&223)-55,zy=e=>e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===43||e===47||e===45||e===95,Ay=e=>e===9||e===10||e===12||e===13||e===32,Dy=e=>{const t=Math.floor(e/4),n=e%4;return t*3+(n===2?1:n===3?2:0)},My=e=>{const t=e.length;let n=0;return t>0&&e.charCodeAt(t-1)===61&&(n++,t>1&&e.charCodeAt(t-2)===61&&n++),Math.floor((t-n)*3/4)},Iy=e=>{const t=e.length;let n=0,r=0,s=!1;for(let l=0;l0){s=!0;continue}n++}}return s||r>2||r>0&&(n+r)%4!==0||n%4===1?My(e):Dy(n)},Fy=(e,t)=>{if(!e||typeof e!="string"||!e.startsWith("data:"))return 0;const n=e.indexOf(",");if(n<0)return 0;const r=e.slice(5,n),s=e.slice(n+1);if(/;base64/i.test(r))return t(s);let o=0;for(let a=0,u=s.length;a=55296&&d<=56319&&a+1=56320&&m<=57343?(o+=4,a++):o+=3}else o+=3}return o};function Uy(e){const t=typeof e=="string"?e.indexOf("#"):-1;return Fy(t===-1?e:e.slice(0,t),Iy)}const ga="1.20.0",Qu=64*1024,$y={cache:"default",redirect:"follow",referrer:"about:client",referrerPolicy:"",mode:"cors",integrity:"",keepalive:!1,priority:"auto",window:null},{isFunction:Rs}=g,By=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),Ku=e=>{if(!g.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Gu=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Hy=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},Vy=e=>{const t=g.global!==void 0&&g.global!==null?g.global:globalThis,{ReadableStream:n,TextEncoder:r}=t;e=g.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:s,Request:l,Response:o}=e,a=s?Rs(s):typeof fetch=="function",u=Rs(l),d=Rs(o);if(!a)return!1;const m=a&&Rs(n),y=a&&(typeof r=="function"?(c=>f=>c.encode(f))(new r):async c=>new Uint8Array(await new l(c).arrayBuffer())),h=u&&m&&Gu(()=>{let c=!1;const f=new l(ve.origin,{body:new n,method:"POST",get duplex(){return c=!0,"half"}}),p=f.headers.has("Content-Type");return f.body!=null&&f.body.cancel(),c&&!p}),v=d&&m&&Gu(()=>g.isReadableStream(new o("").body)),S={stream:v&&(c=>c.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(c=>{!S[c]&&(S[c]=(f,p)=>{let x=f&&f[c];if(x)return x.call(f);throw new T(`Response type '${c}' is not supported`,T.ERR_NOT_SUPPORT,p)})});const w=async c=>{if(c==null)return 0;if(g.isBlob(c))return c.size;if(g.isSpecCompliantForm(c))return(await new l(ve.origin,{method:"POST",body:c}).arrayBuffer()).byteLength;if(g.isArrayBufferView(c)||g.isArrayBuffer(c))return c.byteLength;if(g.isURLSearchParams(c)&&(c=c+""),g.isString(c))return(await y(c)).byteLength},z=async(c,f)=>{const p=g.toFiniteNumber(c.getContentLength());return p??w(f)};return async c=>{let{url:f,method:p,data:x,signal:k,cancelToken:N,timeout:j,onDownloadProgress:E,onUploadProgress:F,responseType:P,headers:Q,withCredentials:le="same-origin",fetchOptions:ke,maxContentLength:I,maxBodyLength:ut,maxRedirects:Y}=Hf(c);const Se=g.isNumber(I)&&I>-1,R=g.isNumber(ut)&&ut>-1,A=V=>g.hasOwnProp(c,V)?c[V]:void 0;let D=s||fetch;P=P?(P+"").toLowerCase():"text";let W=Oy([k,N&&N.toAbortSignal()],j),H=null;const Ne=W&&W.unsubscribe&&(()=>{W.unsubscribe()});let b,ee=null;const X=()=>new T("Request body larger than maxBodyLength limit",T.ERR_BAD_REQUEST,c,H);try{let V;const je=A("auth");if(je){const U=g.getSafeProp(je,"username")||"",he=g.getSafeProp(je,"password")||"";V={username:U,password:he}}if(Hy(f)){const U=new URL(f,ve.origin);if(!V&&(U.username||U.password)){const he=Ku(U.username),ct=Ku(U.password);V={username:he,password:ct}}(U.username||U.password)&&(U.username="",U.password="",f=U.href)}if(V&&(Q.delete("authorization"),Q.set("Authorization","Basic "+btoa(By((V.username||"")+":"+(V.password||""))))),Se&&typeof f=="string"&&f.startsWith("data:")&&Uy(f)>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H);if(R&&p!=="get"&&p!=="head"){const U=await w(x);if(typeof U=="number"&&isFinite(U)&&(b=U,U>ut))throw X()}const jn=R&&(g.isReadableStream(x)||g.isStream(x)),us=(U,he,ct)=>Vu(U,Qu,vt=>{if(R&&vt>ut)throw ee=X();he&&he(vt)},ct);if(h&&p!=="get"&&p!=="head"&&(F||jn)){if(b=b??await z(Q,x),b!==0||jn){let U=new l(f,{method:"POST",body:x,duplex:"half"}),he;if(g.isFormData(x)&&(he=U.headers.get("content-type"))&&Q.setContentType(he),U.body){const[ct,vt]=F&&Uu(b,xl($u(F)))||[];x=us(U.body,ct,vt)}}}else if(jn&&!u&&m&&p!=="get"&&p!=="head")x=us(x);else if(jn&&u&&!h&&p!=="get"&&p!=="head")throw new T("Stream request bodies are not supported by the current fetch implementation",T.ERR_NOT_SUPPORT,c,H);g.isString(le)||(le=le?"include":"omit");const Il=u&&"credentials"in l.prototype;if(g.isFormData(x)){const U=Q.getContentType();U&&/^multipart\/form-data/i.test(U)&&!/boundary=/i.test(U)&&Q.delete("content-type")}Q.set("User-Agent","axios/"+ga,!1);const Qe=ke==null?ke:Object.assign(Object.create(null),ke);Qe&&(delete Qe.body,delete Qe.headers,delete Qe.method,delete Qe.signal,delete Qe.duplex,delete Qe.credentials);const Ue=Object.assign(Object.create(null),Qe,{signal:W,method:p.toUpperCase(),headers:Rf(Q.normalize()),body:x,duplex:"half",credentials:Il?le:void 0});u&&(g.forEach($y,(U,he)=>{Ue[he]===void 0&&(Ue[he]=U)}),Ue.signal===void 0&&(Ue.signal=null),Ue.body===void 0&&(Ue.body=null)),Y===0&&(Ue.redirect="manual",Qe&&(Qe.redirect="manual")),H=u&&new l(f,Ue);let et=await(u?D(H,Qe):D(f,Ue));const cs=Le.from(et.headers);if(Se){const U=g.toFiniteNumber(cs.getContentLength());if(U!=null&&U>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H)}const or=v&&(P==="stream"||P==="response");if(v&&et.body&&(E||Se||or&&Ne)){const U={};["status","statusText","headers"].forEach(Dt=>{U[Dt]=et[Dt]});const he=g.toFiniteNumber(cs.getContentLength()),[ct,vt]=E&&Uu(he,xl($u(E),!0))||[];let ir=0;const ds=Dt=>{if(Se&&(ir=Dt,ir>I))throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H);ct&&ct(Dt)};et=new o(Vu(et.body,Qu,ds,()=>{vt&&vt(),Ne&&Ne()}),U)}P=P||"text";let tt=await S[g.findKey(S,P)||"text"](et,c);if(Se&&!v&&!or){let U;if(tt!=null&&(typeof tt.byteLength=="number"?U=tt.byteLength:typeof tt.size=="number"?U=tt.size:typeof tt=="string"&&(U=typeof r=="function"?new r().encode(tt).byteLength:tt.length)),typeof U=="number"&&U>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H)}return!or&&Ne&&Ne(),await new Promise((U,he)=>{Uf(U,he,{data:tt,headers:Le.from(et.headers),status:et.status,statusText:et.statusText,config:c,request:H})})}catch(V){if(Ne&&Ne(),W&&W.aborted&&W.reason instanceof T){const je=W.reason;throw je.config=c,H&&(je.request=H),V!==je&&Object.defineProperty(je,"cause",{__proto__:null,value:V,writable:!0,enumerable:!1,configurable:!0}),je}if(ee)throw H&&!ee.request&&(ee.request=H),ee;if(V instanceof T)throw H&&!V.request&&(V.request=H),V;if(V&&V.name==="TypeError"&&/Load failed|fetch/i.test(V.message)){const je=new T("Network Error",T.ERR_NETWORK,c,H,V&&V.response);throw Object.defineProperty(je,"cause",{__proto__:null,value:V.cause||V,writable:!0,enumerable:!1,configurable:!0}),je}throw T.from(V,V&&V.code,c,H,V&&V.response)}}},Wy=new Map,Wf=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,l=[r,s,n];let o=l.length,a=o,u,d,m=Wy;for(;a--;)u=l[a],d=m.get(u),d===void 0&&m.set(u,d=a?new Map:Vy(t)),m=d;return d};Wf();const xa={http:Y0,xhr:Ry,fetch:{get:Wf}};g.forEach(xa,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const Ju=e=>`- ${e}`,qy=e=>g.isFunction(e)||e===null||e===!1;function Qy(e,t){e=g.isArray(e)?e:[e];const{length:n}=e;let r,s;const l={};for(let o=0;o`adapter ${u} `+(d===!1?"is not supported by the environment":"is not available in the build"));let a=n?o.length>1?`since : -`+o.map(Ju).join(` -`):" "+Ju(o[0]):"as no adapter specified";throw new T("There is no suitable adapter to dispatch the request "+a,T.ERR_NOT_SUPPORT)}return s}const qf={getAdapter:Qy,adapters:xa};function go(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new as(null,e)}function xo(e){const t=g.toSafeFlatObject(e);return go(t),t.headers=Le.from(g.getSafeProp(t,"headers")),t.data=ho.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),qf.getAdapter(t.adapter||is.adapter,t)(t).then(function(s){go(t),t.response=s;try{s.data=ho.call(t,t.transformResponse,s)}finally{delete t.response}return s.headers=Le.from(s.headers),s},function(s){if(!Ff(s)&&(go(t),s&&s.response)){t.response=s.response;try{s.response.data=ho.call(t,t.transformResponse,s.response)}finally{delete t.response}s.response.headers=Le.from(s.response.headers)}return Promise.reject(s)})}const Ml={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ml[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const Xu={};Ml.transitional=function(t,n,r){function s(l,o){return"[Axios v"+ga+"] Transitional option '"+l+"'"+o+(r?". "+r:"")}return(l,o,a)=>{if(t===!1)throw new T(s(o," has been removed"+(n?" in "+n:"")),T.ERR_DEPRECATED);return n&&!Xu[o]&&(Xu[o]=!0,console.warn(s(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(l,o,a):!0}};Ml.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function Ky(e,t,n){if(typeof e!="object"||e===null)throw new T("options must be an object",T.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const l=r[s],o=Object.prototype.hasOwnProperty.call(t,l)?t[l]:void 0;if(o){const a=e[l],u=a===void 0||o(a,l,e);if(u!==!0)throw new T("option "+l+" must be "+u,T.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new T("Unknown option "+l,T.ERR_BAD_OPTION)}}const Vs={assertOptions:Ky,validators:Ml},Pe=Vs.validators;let pn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Iu,response:new Iu}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error)try{let s={};Error.captureStackTrace?Error.captureStackTrace(s):s=new Error;const l=s.stack;let o="";if(typeof l=="string"){const a=l.indexOf(` + */const xf=G("Zap",[["polygon",{points:"13 2 3 14 12 14 11 22 21 10 12 10 13 2",key:"45s27k"}]]);function vf(e,t){return function(){return e.apply(t,arguments)}}const{toString:Hh}=Object.prototype,{getPrototypeOf:en}=Object,{iterator:ls,toStringTag:wf}=Symbol,Xr=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),kf=e=>typeof e=="string"&&(e==="__proto__"||e==="constructor"||e==="prototype"),Sf=(e,t,n)=>e===Object.prototype||!n&&t===null,Vh=e=>{if(!Object.isExtensible(e))return!1;const t=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&t.push(...Object.getOwnPropertySymbols(e)),t.every(n=>{if(kf(n))return!1;const r=Object.getOwnPropertyDescriptor(e,n);return!!r&&r.configurable&&r.writable===!0})},Yr=(e,t)=>{let n=e;const r=[];for(;n!=null;){if(r.indexOf(n)!==-1)return!1;r.push(n);const s=en(n);if(Sf(n,s,n===e))return!1;if(Xr(n,t))return!0;n=s}return!1},Wh=(e,t)=>e!=null&&Yr(e,t)?e[t]:void 0,qh=e=>{if(e==null||typeof e!="object"&&typeof e!="function")return e;const t=en(e);if(t===null&&Vh(e))return e;const n=Object.create(null),r=Object.create(null),s=[];let l=e;for(;l!=null&&s.indexOf(l)===-1;){s.push(l);const o=l===e?t:en(l);if(Sf(l,o,l===e))break;const a=Object.getOwnPropertyNames(l);Object.getOwnPropertySymbols&&a.push(...Object.getOwnPropertySymbols(l));for(const u of a)kf(u)||Xr(r,u)||(n[u]=e[u],r[u]=!0);l=o}return n},pa=(e=>t=>{const n=Hh.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),at=e=>(e=e.toLowerCase(),t=>pa(t)===e),Dl=e=>t=>typeof t===e,{isArray:vn}=Array,wn=Dl("undefined");function sr(e){return e!==null&&!wn(e)&&e.constructor!==null&&!wn(e.constructor)&&qe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Nf=at("ArrayBuffer");function Qh(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Nf(e.buffer),t}const Kh=Dl("string"),qe=Dl("function"),jf=Dl("number"),lr=e=>e!==null&&typeof e=="object",Gh=e=>e===!0||e===!1,Bs=e=>{if(!lr(e))return!1;const t=en(e);return(t===null||t===Object.prototype||en(t)===null)&&!Yr(e,wf)&&!Yr(e,ls)},Jh=e=>{if(!lr(e)||sr(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Xh=at("Date"),Yh=at("File"),Zh=e=>!!(e&&typeof e.uri<"u"),e0=e=>e&&typeof e.getParts<"u",t0=at("Blob"),n0=at("FileList"),r0=at("Set"),s0=e=>lr(e)&&qe(e.pipe);function l0(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Lu=l0(),zu=typeof Lu.FormData<"u"?Lu.FormData:void 0,o0=e=>{if(!e)return!1;if(zu&&e instanceof zu)return!0;const t=en(e);if(!t||t===Object.prototype||!qe(e.append))return!1;const n=pa(e);return n==="formdata"||n==="object"&&qe(e.toString)&&e.toString()==="[object FormData]"},i0=at("URLSearchParams"),[a0,u0,c0,d0]=["ReadableStream","Request","Response","Headers"].map(at),f0=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function os(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,s;if(typeof e!="object"&&(e=[e]),vn(e))for(r=0,s=e.length;r0;)if(s=n[r],t===s.toLowerCase())return s;return null}const cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ef=e=>!wn(e)&&e!==cn;function yi(...e){const{caseless:t,skipUndefined:n}=Ef(this)&&this||{},r={},s=(l,o)=>{if(o==="__proto__"||o==="constructor"||o==="prototype")return;const a=t&&typeof o=="string"&&_f(r,o)||o,u=Xr(r,a)?r[a]:void 0;Bs(u)&&Bs(l)?r[a]=yi(u,l):Bs(l)?r[a]=yi({},l):vn(l)?r[a]=l.slice():(!n||!wn(l))&&(r[a]=l)};for(let l=0,o=e.length;l(os(t,(s,l)=>{n&&qe(s)?Object.defineProperty(e,l,{__proto__:null,value:vf(s,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,l,{__proto__:null,value:s,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:r}),e),m0=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),h0=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),Object.defineProperty(e.prototype,"constructor",{__proto__:null,value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{__proto__:null,value:t.prototype}),n&&Object.assign(e.prototype,n)},y0=(e,t,n,r)=>{let s,l,o;const a={};if(t=t||{},e==null)return t;do{for(s=Object.getOwnPropertyNames(e),l=s.length;l-- >0;)o=s[l],(!r||r(o,e,t))&&!a[o]&&(t[o]=e[o],a[o]=!0);e=n!==!1&&en(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},g0=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},x0=e=>{if(!e)return null;if(vn(e))return e;let t=e.length;if(!jf(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},v0=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&en(Uint8Array)),w0=(e,t)=>{const r=(e&&e[ls]).call(e);let s;for(;(s=r.next())&&!s.done;){const l=s.value;t.call(e,l[0],l[1])}},k0=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},S0=at("HTMLFormElement"),N0=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,s){return r.toUpperCase()+s}),{propertyIsEnumerable:j0}=Object.prototype,_0=at("RegExp"),Cf=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};os(n,(s,l)=>{let o;(o=t(s,l,e))!==!1&&(r[l]=o||s)}),Object.defineProperties(e,r)},E0=e=>{Cf(e,(t,n)=>{if(qe(e)&&["arguments","caller","callee"].includes(n))return!1;const r=e[n];if(qe(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},C0=(e,t)=>{const n={},r=s=>{s.forEach(l=>{n[l]=!0})};return vn(e)?r(e):r(String(e).split(t)),n},b0=()=>{},R0=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function O0(e){return!!(e&&qe(e.append)&&e[wf]==="FormData"&&e[ls])}const P0=e=>{const t=new WeakSet,n=r=>{if(lr(r)){if(t.has(r))return;if(sr(r))return r;if(!("toJSON"in r)){t.add(r);let s;if(r0(r)){s=[];for(const l of r){const o=n(l);!wn(o)&&s.push(o)}}else s=vn(r)?[]:{},os(r,(l,o)=>{const a=n(l);!wn(a)&&(s[o]=a)});return t.delete(r),s}}return r};return n(e)},T0=at("AsyncFunction"),L0=e=>e&&(lr(e)||qe(e))&&qe(e.then)&&qe(e.catch),bf=((e,t)=>e?setImmediate:t?((n,r)=>(cn.addEventListener("message",({source:s,data:l})=>{s===cn&&l===n&&r.length&&r.shift()()},!1),s=>{r.push(s),cn.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",qe(cn.postMessage)),z0=typeof queueMicrotask<"u"?queueMicrotask.bind(cn):typeof process<"u"&&process.nextTick||bf,Rf=e=>e!=null&&qe(e[ls]),A0=e=>e!=null&&Yr(e,ls)&&Rf(e),g={isArray:vn,isArrayBuffer:Nf,isBuffer:sr,isFormData:o0,isArrayBufferView:Qh,isString:Kh,isNumber:jf,isBoolean:Gh,isObject:lr,isPlainObject:Bs,isEmptyObject:Jh,isReadableStream:a0,isRequest:u0,isResponse:c0,isHeaders:d0,isUndefined:wn,isDate:Xh,isFile:Yh,isReactNativeBlob:Zh,isReactNative:e0,isBlob:t0,isRegExp:_0,isFunction:qe,isStream:s0,isURLSearchParams:i0,isTypedArray:v0,isFileList:n0,forEach:os,merge:yi,extend:p0,trim:f0,stripBOM:m0,inherits:h0,toFlatObject:y0,kindOf:pa,kindOfTest:at,endsWith:g0,toArray:x0,forEachEntry:w0,matchAll:k0,isHTMLForm:S0,hasOwnProperty:Xr,hasOwnProp:Xr,hasOwnInPrototypeChain:Yr,getSafeProp:Wh,toSafeFlatObject:qh,reduceDescriptors:Cf,freezeMethods:E0,toObjectSet:C0,toCamelCase:N0,noop:b0,toFiniteNumber:R0,findKey:_f,global:cn,isContextDefined:Ef,isSpecCompliantForm:O0,toJSONObject:P0,isAsyncFn:T0,isThenable:L0,setImmediate:bf,asap:z0,isIterable:Rf,isSafeIterable:A0},D0=g.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),M0=e=>{const t={};let n,r,s;return e&&e.split(` +`).forEach(function(o){s=o.indexOf(":"),n=o.substring(0,s).trim().toLowerCase(),r=o.substring(s+1).trim();const a=g.hasOwnProp(t,n);!n||a&&g.hasOwnProp(D0,n)||(n==="set-cookie"?a?t[n].push(r):t[n]=[r]:t[n]=a?t[n]+", "+r:r)}),t};function I0(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}const F0=new RegExp("[\\u0000-\\u0008\\u000a-\\u001f\\u007f]+","g"),U0=new RegExp("[^\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+","g");function ma(e,t){return g.isArray(e)?e.map(n=>ma(n,t)):I0(String(e).replace(t,""))}const $0=e=>ma(e,F0),B0=e=>ma(e,U0);function Of(e){const t=Object.create(null);return g.forEach(e.toJSON(),(n,r)=>{t[r]=B0(n)}),t}const Au=Symbol("internals");function yr(e){return e&&String(e).trim().toLowerCase()}function Hs(e){return e===!1||e==null?e:g.isArray(e)?e.map(Hs):$0(String(e))}function H0(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const V0=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;function po(e){let t=0,n=e.length;for(;tt;){const r=e.charCodeAt(n-1);if(r!==9&&r!==32)break;n-=1}return t===0&&n===e.length?e:e.slice(t,n)}function W0(e){const t=e.length-1;if(t<1||e.charCodeAt(0)!==34||e.charCodeAt(t)!==34)return e;let n="";for(let r=1;r=t))return e;n+=e[r]}return n}function q0(e){const t=Object.create(null),n=String(e);let r=0,s=!1,l=!1;function o(a){const u=po(n.slice(r,a)),d=u.indexOf("=");if(d<1)return;const m=po(u.slice(0,d));if(!V0.test(m))return;const y=m.toLowerCase();if(y==="__proto__"||y==="constructor"||y==="prototype")return;const h=po(u.slice(d+1));t[y]=W0(h)}for(let a=0;a/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function mo(e,t,n,r,s){if(g.isFunction(r))return r.call(this,t,n);if(s&&(t=n),!!g.isString(t)){if(g.isString(r))return t.indexOf(r)!==-1;if(g.isRegExp(r))return r.test(t)}}function K0(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function G0(e,t){const n=g.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{__proto__:null,value:function(s,l,o){return this[r].call(this,t,s,l,o)},configurable:!0})})}let Le=class{constructor(t){t&&this.set(t)}set(t,n,r){const s=this;function l(a,u,d){const m=yr(u);if(!m)return;const y=g.findKey(s,m);(!y||s[y]===void 0||d===!0||d===void 0&&s[y]!==!1)&&(s[y||u]=Hs(a))}const o=(a,u)=>g.forEach(a,(d,m)=>l(d,m,u));if(g.isPlainObject(t)||t instanceof this.constructor)o(t,n);else if(g.isString(t)&&(t=t.trim())&&!Q0(t))o(M0(t),n);else if(g.isObject(t)&&g.isSafeIterable(t)){let a=Object.create(null),u,d;for(const m of t){if(!g.isArray(m))throw new TypeError("Object iterator must return a key-value pair");d=m[0],g.hasOwnProp(a,d)?(u=a[d],a[d]=g.isArray(u)?[...u,m[1]]:[u,m[1]]):a[d]=m[1]}o(a,n)}else t!=null&&l(n,t,r);return this}get(t,n){if(t=yr(t),t){const r=g.findKey(this,t);if(r){const s=this[r];if(!n)return s;if(n===!0)return H0(s);if(g.isFunction(n))return n.call(this,s,r);if(g.isRegExp(n))return n.exec(s);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=yr(t),t){const r=g.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||mo(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let s=!1;function l(o){if(o=yr(o),o){const a=g.findKey(r,o);a&&(!n||mo(r,r[a],a,n))&&(delete r[a],s=!0)}}return g.isArray(t)?t.forEach(l):l(t),s}clear(t){const n=Object.keys(this);let r=n.length,s=!1;for(;r--;){const l=n[r];(!t||mo(this,this[l],l,t,!0))&&(delete this[l],s=!0)}return s}normalize(t){const n=this,r={};return g.forEach(this,(s,l)=>{const o=g.findKey(r,l);if(o){n[o]=Hs(s),delete n[l];return}const a=t?K0(l):String(l).trim();a!==l&&delete n[l],n[a]=Hs(s),r[a]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return g.forEach(this,(r,s)=>{r!=null&&r!==!1&&(n[s]=t&&g.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){const t=this.get("set-cookie");return g.isArray(t)?t:t==null||t===!1?[]:[t]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static parseParameters(t){return q0(t)}static concat(t,...n){const r=new this(t);return n.forEach(s=>r.set(s)),r}static accessor(t){const r=(this[Au]=this[Au]={accessors:{}}).accessors,s=this.prototype;function l(o){const a=yr(o);r[a]||(G0(s,o),r[a]=!0)}return g.isArray(t)?t.forEach(l):l(t),this}};Le.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);g.reduceDescriptors(Le.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});g.freezeMethods(Le);const gl="[REDACTED ****]";function J0(e){if(g.hasOwnProp(e,"toJSON"))return!0;let t=Object.getPrototypeOf(e);for(;t&&t!==Object.prototype;){if(g.hasOwnProp(t,"toJSON"))return!0;t=Object.getPrototypeOf(t)}return!1}function X0(e,t){const n=new Set(t.map(l=>String(l).toLowerCase())),r=[],s=l=>{if(l===null||typeof l!="object"||g.isBuffer(l))return l;if(r.indexOf(l)!==-1)return;l instanceof Le&&(l=l.toJSON()),r.push(l);let o;if(g.isArray(l))o=[],l.forEach((a,u)=>{const d=s(a);g.isUndefined(d)||(o[u]=d)});else{if(!g.isPlainObject(l)&&J0(l))return r.pop(),l;o=Object.create(null);for(const[a,u]of Object.entries(l)){const d=n.has(a.toLowerCase())?gl:s(u);g.isUndefined(d)||(o[a]=d)}}return r.pop(),o};return s(e)}function Du(e){try{return String(e)}catch{return""}}function Y0(e){return e.errors.map(n=>{try{return n&&n.message?Du(n.message):Du(n)}catch{return""}}).filter(Boolean).join("; ")||e.name||"AggregateError"}let T=class Pf extends Error{static from(t,n,r,s,l,o){let a=t.message;!a&&g.isArray(t.errors)&&t.errors.length&&(a=Y0(t));const u=new Pf(a,n||t.code,r,s,l);return Object.defineProperty(u,"cause",{__proto__:null,value:t,writable:!0,enumerable:!1,configurable:!0}),u.name=t.name,t.status!=null&&u.status==null&&(u.status=t.status),o&&Object.assign(u,o),u}constructor(t,n,r,s,l){super(t),Object.defineProperty(this,"message",{__proto__:null,value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),r&&(this.config=r),s&&(this.request=s),l&&(this.response=l,this.status=l.status)}toJSON(){const t=this.config,n=t&&g.hasOwnProp(t,"redact")?t.redact:void 0,r=g.isArray(n)&&n.length>0?X0(t,n):g.toJSONObject(t);return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:r,code:this.code,status:this.status}}};T.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";T.ERR_BAD_OPTION="ERR_BAD_OPTION";T.ECONNABORTED="ECONNABORTED";T.ETIMEDOUT="ETIMEDOUT";T.ECONNREFUSED="ECONNREFUSED";T.ERR_NETWORK="ERR_NETWORK";T.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";T.ERR_DEPRECATED="ERR_DEPRECATED";T.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";T.ERR_BAD_REQUEST="ERR_BAD_REQUEST";T.ERR_CANCELED="ERR_CANCELED";T.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";T.ERR_INVALID_URL="ERR_INVALID_URL";T.ERR_FORM_DATA_DEPTH_EXCEEDED="ERR_FORM_DATA_DEPTH_EXCEEDED";const Z0=null,Tf=100;function gi(e){return g.isPlainObject(e)||g.isArray(e)}function Lf(e){return g.endsWith(e,"[]")?e.slice(0,-2):e}function ho(e,t,n){return e?e.concat(t).map(function(s,l){return s=Lf(s),!n&&l?"["+s+"]":s}).join(n?".":""):t}function ey(e){return g.isArray(e)&&!e.some(gi)}const ty=g.toFlatObject(g,{},null,function(t){return/^is[A-Z]/.test(t)});function Ml(e,t,n){if(!g.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(f,p)=>{const x=g.getSafeProp(n,f);return g.isUndefined(x)?p:x},s=r("metaTokens",!0),l=r("visitor")||w,o=r("dots",!1),a=r("indexes",!1),u=r("Blob")||typeof Blob<"u"&&Blob,d=r("maxDepth",Tf),m=u&&g.isSpecCompliantForm(t),y=[];if(!g.isFunction(l))throw new TypeError("visitor must be a function");function h(f){if(f===null)return"";if(g.isDate(f))return f.toISOString();if(g.isBoolean(f))return f.toString();if(!m&&g.isBlob(f))throw new T("Blob is not supported. Use a Buffer instead.");if(g.isArrayBuffer(f)||g.isTypedArray(f)){if(m&&typeof u=="function")return new u([f]);throw new T("Blob is not supported. Use a Buffer instead.",T.ERR_NOT_SUPPORT)}return f}function v(f){if(f>d)throw new T("Object is too deeply nested ("+f+" levels). Max depth: "+d,T.ERR_FORM_DATA_DEPTH_EXCEEDED)}function S(f,p){if(d===1/0)return JSON.stringify(f);const x=[];return JSON.stringify(f,function(N,j){if(!g.isObject(j))return j;for(;x.length&&x[x.length-1]!==this;)x.pop();return x.push(j),v(p+x.length-1),j})}function w(f,p,x){let k=f;if(g.isReactNative(t)&&g.isReactNativeBlob(f))return t.append(ho(x,p,o),h(f)),!1;if(f&&!x&&typeof f=="object"){if(g.endsWith(p,"{}"))p=s?p:p.slice(0,-2),f=S(f,1);else if(g.isArray(f)&&ey(f)||(g.isFileList(f)||g.endsWith(p,"[]"))&&(k=g.toArray(f)))return p=Lf(p),k.forEach(function(j,E){!(g.isUndefined(j)||j===null)&&t.append(a===!0?ho([p],E,o):a===null?p:p+"[]",h(j))}),!1}return gi(f)?!0:(t.append(ho(x,p,o),h(f)),!1)}const z=Object.assign(ty,{defaultVisitor:w,convertValue:h,isVisitable:gi});function c(f,p,x=0){if(!g.isUndefined(f)){if(v(x),y.indexOf(f)!==-1)throw new Error("Circular reference detected in "+p.join("."));y.push(f),g.forEach(f,function(N,j){(!(g.isUndefined(N)||N===null)&&l.call(t,N,g.isString(j)?j.trim():j,p,z))===!0&&c(N,p?p.concat(j):[j],x+1)}),y.pop()}}if(!g.isObject(e))throw new TypeError("data must be an object");return c(e),t}function Mu(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"};return encodeURIComponent(e).replace(/[!'()~]|%20/g,function(r){return t[r]})}function ha(e,t){this._pairs=[],e&&Ml(e,this,t)}const zf=ha.prototype;zf.append=function(t,n){this._pairs.push([t,n])};zf.toString=function(t){const n=t?r=>t.call(this,r,Mu):Mu;return this._pairs.map(function(s){return n(s[0])+"="+n(s[1])},"").join("&")};function ny(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Af(e,t,n){if(!t)return e;e=e||"";const r=g.isFunction(n)?{serialize:n}:n,s=g.getSafeProp(r,"encode")||ny,l=g.getSafeProp(r,"serialize");let o;if(l?o=l(t,r):o=g.isURLSearchParams(t)?t.toString():new ha(t,r).toString(s),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}const gr=Symbol("internals");function Df(e){return e?e.length:0}function Iu(e){if(e)for(;e.length&&e[e.length-1]===null;)e.pop()}function xr(e,t){const n=e.handlers,r=Df(n);n!==t.handlersRef?(t.handlersRef=n,t.handlerEntries.clear()):r!==t.handlersLength&&(r?t.handlerEntries.forEach(function(l,o){n[l.index]!==l.handler&&t.handlerEntries.delete(o)}):t.handlerEntries.clear()),t.handlersLength=r}class Fu{constructor(){this.handlers=[],this[gr]={handlersRef:this.handlers,handlersLength:this.handlers.length,handlerEntries:new Map,iterationDepth:0,nextId:0}}use(t,n,r){const s={fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null},l=this[gr];this.handlers==null&&(this.handlers=[]),xr(this,l);const o=l.nextId++;return this.handlers.push(s),l.handlerEntries.set(o,{handler:s,index:this.handlers.length-1}),l.handlersLength=this.handlers.length,o}eject(t){const n=this[gr];xr(this,n);const r=n.handlerEntries.get(t);if(r){if(n.handlerEntries.delete(t),this.handlers[r.index]!==r.handler)return;this.handlers[r.index]=null,n.iterationDepth||(Iu(this.handlers),n.handlersLength=this.handlers.length)}}clear(){this.handlers&&(this.handlers=[],xr(this,this[gr]))}forEach(t){const n=this[gr];xr(this,n),n.iterationDepth++;try{g.forEach(this.handlers,function(s){s!==null&&t(s)})}finally{--n.iterationDepth||(xr(this,n),Iu(this.handlers),n.handlersLength=Df(this.handlers))}}}const ya={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0,advertiseZstdAcceptEncoding:!1,validateStatusUndefinedResolves:!0},ry=typeof URLSearchParams<"u"?URLSearchParams:ha,sy=typeof FormData<"u"?FormData:null,ly=typeof Blob<"u"?Blob:null,oy={isBrowser:!0,classes:{URLSearchParams:ry,FormData:sy,Blob:ly},protocols:["http","https","file","blob","url","data"]},ga=typeof window<"u"&&typeof document<"u",xi=typeof navigator=="object"&&navigator||void 0,iy=ga&&(!xi||["ReactNative","NativeScript","NS"].indexOf(xi.product)<0),ay=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",uy=ga&&window.location.href||"http://localhost",cy=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:ga,hasStandardBrowserEnv:iy,hasStandardBrowserWebWorkerEnv:ay,navigator:xi,origin:uy},Symbol.toStringTag,{value:"Module"})),ve={...cy,...oy};function dy(e,t){return Ml(e,new ve.classes.URLSearchParams,{visitor:function(n,r,s,l){return ve.isNode&&g.isBuffer(n)?(this.append(r,n.toString("base64")),!1):l.defaultVisitor.apply(this,arguments)},...t})}const Uu=Tf;function Mf(e){if(e>Uu)throw new T("FormData field is too deeply nested ("+e+" levels). Max depth: "+Uu,T.ERR_FORM_DATA_DEPTH_EXCEEDED)}function fy(e){const t=[],n=/[^.[\]]+|\[([^.[\]]*)]/g;let r;for(;(r=n.exec(e))!==null;)Mf(t.length),t.push(r[0]==="[]"?"":r[1]||r[0]);return t}function py(e){const t={},n=Object.keys(e);let r;const s=n.length;let l;for(r=0;r=n.length;return o=!o&&g.isArray(s)?s.length:o,u?(g.hasOwnProp(s,o)?s[o]=g.isArray(s[o])?s[o].concat(r):[s[o],r]:s[o]=r,!a):((!g.hasOwnProp(s,o)||!g.isObject(s[o]))&&(s[o]=[]),t(n,r,s[o],l)&&g.isArray(s[o])&&(s[o]=py(s[o])),!a)}if(g.isFormData(e)&&g.isFunction(e.entries)){const n={};return g.forEachEntry(e,(r,s)=>{t(fy(r),s,n,0)}),n}return null}const Ff=Object.freeze(["get","delete","head","options","post","put","patch","purge","link","unlink","query"]),En=(e,t)=>e!=null&&g.hasOwnProp(e,t)?e[t]:void 0;function my(e,t,n){if(g.isString(e))try{return(t||JSON.parse)(e),g.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const is={transitional:ya,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",s=r.indexOf("application/json")>-1,l=g.isObject(t);if(l&&g.isHTMLForm(t)&&(t=new FormData(t)),g.isFormData(t))return s?JSON.stringify(If(t)):t;if(g.isArrayBuffer(t)||g.isBuffer(t)||g.isStream(t)||g.isFile(t)||g.isBlob(t)||g.isReadableStream(t))return t;if(g.isArrayBufferView(t))return t.buffer;if(g.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let a;if(l){const u=En(this,"formSerializer");if(r.indexOf("application/x-www-form-urlencoded")>-1)return dy(t,u).toString();if((a=g.isFileList(t))||r.indexOf("multipart/form-data")>-1){const d=En(this,"env"),m=d&&d.FormData;return Ml(a?{"files[]":t}:t,m&&new m,u)}}return l||s?(n.setContentType("application/json",!1),my(t)):t}],transformResponse:[function(t){const n=En(this,"transitional")||is.transitional,r=n&&n.forcedJSONParsing,s=En(this,"responseType"),l=s==="json";if(g.isResponse(t)||g.isReadableStream(t))return t;if(t&&g.isString(t)&&(r&&!s||l)){const a=!(n&&n.silentJSONParsing)&&l;try{return JSON.parse(t,En(this,"parseReviver"))}catch(u){if(a)throw u.name==="SyntaxError"?T.from(u,T.ERR_BAD_RESPONSE,this,null,En(this,"response")):u}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ve.classes.FormData,Blob:ve.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};g.forEach(Ff,e=>{is.headers[e]={}});function yo(e,t){const n=this||is,r=t||n,s=Le.from(r.headers);let l=r.data;return g.forEach(e,function(a){l=a.call(n,l,s.normalize(),t?t.status:void 0)}),s.normalize(),l}function Uf(e){return!!(e&&e.__CANCEL__)}let as=class extends T{constructor(t,n,r){super(t??"canceled",T.ERR_CANCELED,n,r),this.name="CanceledError",this.__CANCEL__=!0}};function $f(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new T("Request failed with status code "+n.status,n.status>=400&&n.status<500?T.ERR_BAD_REQUEST:T.ERR_BAD_RESPONSE,n.config,n.request,n))}const hy=/[\t\n\r]/g;function Bf(e){if(typeof e!="string")return e;let t=0;for(;t{n=y,s=null,l&&(clearTimeout(l),l=null),e(...m)};return[(...m)=>{const y=Date.now(),h=y-n;h>=r?o(m,y):(s=m,l||(l=setTimeout(()=>{l=null,o(s)},r-h)))},()=>s&&o(s),(...m)=>o(m)]}const xl=(e,t,n=3)=>{let r=0;const s=yy(50,250);return gy(l=>{if(!l||!g.isNumber(l.loaded))return;const o=l.loaded,a=l.lengthComputable?l.total:void 0,u=Math.max(0,a!=null?Math.min(o,a):o),d=Math.max(0,u-r),m=s(d);r=Math.max(r,u);const y={loaded:u,total:a,progress:a?u/a:void 0,bytes:d,rate:m||void 0,estimated:m&&a?(a-u)/m:void 0,event:l,lengthComputable:a!=null,[t?"download":"upload"]:!0};e(y)},n)},$u=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Bu=(e,t=g.asap)=>(...n)=>t(()=>e(...n)),xy=ve.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ve.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ve.origin),ve.navigator&&/(msie|trident)/i.test(ve.navigator.userAgent)):()=>!0,vy=ve.hasStandardBrowserEnv?{write(e,t,n,r,s,l,o){if(typeof document>"u")return;const a=[`${e}=${encodeURIComponent(t)}`];g.isNumber(n)&&a.push(`expires=${new Date(n).toUTCString()}`),g.isString(r)&&a.push(`path=${r}`),g.isString(s)&&a.push(`domain=${s}`),l===!0&&a.push("secure"),g.isString(o)&&a.push(`SameSite=${o}`),document.cookie=a.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.split(";");for(let n=0;n0&&e.charCodeAt(n-1)===47;)n--;return e.slice(0,n)+"/"+t.replace(/^\/+/,"")}const Sy=/^https?:(?!\/\/)/i;function Ny(e){return e&&e.replace(/(^|&)([^=&]*=)?[^&]+/g,(t,n,r="")=>`${n}${r}${gl}`)}function jy(e){const t=e.replace(/^(https?:\/{0,2})[^/?#]*@/i,`$1${gl}@`),n=t.indexOf("#"),s=(n===-1?t:t.slice(0,n)).replace(/([?&][^=&#]*=)[^&#]*/g,`$1${gl}`);return n===-1?s:`${s}#${Ny(t.slice(n+1))}`}function Hu(e,t){if(typeof e=="string"){const n=Bf(e);if(Sy.test(n))throw new T(`Invalid URL ${JSON.stringify(jy(n))}: missing "//" after protocol`,T.ERR_INVALID_URL,t)}}function Hf(e,t,n,r){Hu(t,r);let s=!wy(t);return e&&(s||n===!1)?(Hu(e,r),ky(e,t)):t}const Vu=e=>e instanceof Le?{...e}:e,_y=e=>Object.getOwnPropertySymbols&&Object.getOwnPropertyDescriptor?Object.keys(e).concat(Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)):Object.keys(e);function kn(e,t){e=e||{},t=t||{};const n=Object.create(null);Object.defineProperty(n,"hasOwnProperty",{__proto__:null,value:Object.prototype.hasOwnProperty,enumerable:!1,writable:!0,configurable:!0});function r(m,y,h,v){return g.isPlainObject(m)&&g.isPlainObject(y)?g.merge.call({caseless:v},m,y):g.isPlainObject(y)?g.merge({},y):g.isArray(y)?y.slice():y}function s(m,y,h,v){if(g.isUndefined(y)){if(!g.isUndefined(m))return r(void 0,m,h,v)}else return r(m,y,h,v)}function l(m,y){if(!g.isUndefined(y))return r(void 0,y)}function o(m,y){if(g.isUndefined(y)){if(!g.isUndefined(m))return r(void 0,m)}else return r(void 0,y)}function a(m){const y=g.hasOwnProp(t,"transitional")?t.transitional:void 0;if(!g.isUndefined(y))if(g.isPlainObject(y)){if(g.hasOwnProp(y,m))return y[m]}else return;const h=g.hasOwnProp(e,"transitional")?e.transitional:void 0;if(g.isPlainObject(h)&&g.hasOwnProp(h,m))return h[m]}function u(m,y,h){if(g.hasOwnProp(t,h))return r(m,y);if(g.hasOwnProp(e,h))return r(void 0,m)}const d={url:l,method:l,data:l,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutErrorMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,allowedSocketPaths:o,responseEncoding:o,validateStatus:u,headers:(m,y,h)=>s(Vu(m),Vu(y),h,!0)};return g.forEach(_y({...e,...t}),function(y){if(y==="__proto__"||y==="constructor"||y==="prototype")return;const h=g.hasOwnProp(d,y)?d[y]:s,v=g.hasOwnProp(e,y)?e[y]:void 0,S=g.hasOwnProp(t,y)?t[y]:void 0,w=h(v,S,y);g.isUndefined(w)&&h!==u||(n[y]=w)}),g.hasOwnProp(t,"validateStatus")&&g.isUndefined(t.validateStatus)&&a("validateStatusUndefinedResolves")===!1&&(g.hasOwnProp(e,"validateStatus")?n.validateStatus=r(void 0,e.validateStatus):delete n.validateStatus),n}const Ey=["content-type","content-length"];function Cy(e,t,n){if(n!=="content-only"){e.set(t);return}Object.entries(t||{}).forEach(([r,s])=>{Ey.includes(r.toLowerCase())&&e.set(r,s)})}const by=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16)));function Vf(e){const t=kn({},e),n=h=>g.hasOwnProp(t,h)?t[h]:void 0,r=n("data");let s=n("withXSRFToken");const l=n("xsrfHeaderName"),o=n("xsrfCookieName");let a=n("headers");const u=n("auth"),d=n("baseURL"),m=n("allowAbsoluteUrls"),y=n("url");if(t.headers=a=Le.from(a),t.url=Af(Hf(d,y,m,t),n("params"),n("paramsSerializer")),u){const h=g.getSafeProp(u,"username")||"",v=g.getSafeProp(u,"password")||"";try{a.set("Authorization","Basic "+btoa(h+":"+(v?by(v):"")))}catch(S){throw T.from(S,T.ERR_BAD_OPTION_VALUE,e)}}if(g.isFormData(r)){const h=g.getSafeProp(r,"getHeaders");ve.hasStandardBrowserEnv||ve.hasStandardBrowserWebWorkerEnv||g.isReactNative(r)?a.setContentType(void 0):g.isFunction(h)&&Cy(a,h.call(r),n("formDataHeaderPolicy"))}if(ve.hasStandardBrowserEnv&&(g.isFunction(s)&&(s=s(t)),s===!0||s==null&&xy(t.url))){const v=l&&o&&vy.read(o);v&&a.set(l,v)}return t}const Ry=typeof XMLHttpRequest<"u",Oy=Ry&&function(e){return new Promise(function(n,r){const s=Vf(e);let l=s.data;const o=Le.from(s.headers).normalize();let{responseType:a,onUploadProgress:u,onDownloadProgress:d}=s,m,y,h,v,S,w;function z(){v&&v(),S&&S(),s.cancelToken&&s.cancelToken.unsubscribe(m),s.signal&&s.signal.removeEventListener("abort",m)}let c=new XMLHttpRequest;c.open(s.method.toUpperCase(),s.url,!0),c.timeout=s.timeout;function f(x){if(!c)return;if(c.status===0&&(go(Bf(s.url))||go(ve.origin))!=="file"&&!(c.responseURL&&c.responseURL.startsWith("file:"))){r(new T("Request aborted",T.ECONNABORTED,e,c)),z(),c=null;return}try{x?w&&w(x):S&&S()}catch(E){setTimeout(()=>{throw E})}if(!c)return;const k=Le.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),j={data:!a||a==="text"||a==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:k,config:e,request:c};$f(function(F){n(F),z()},function(F){r(F),z()},j),c=null}"onloadend"in c?c.onloadend=f:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.startsWith("file:"))||setTimeout(f)},c.onabort=function(){c&&(r(new T("Request aborted",T.ECONNABORTED,e,c)),z(),c=null)},c.onerror=function(k){const N=k&&k.message?k.message:"Network Error",j=new T(N,T.ERR_NETWORK,e,c);j.event=k||null,r(j),z(),c=null},c.ontimeout=function(){let k=s.timeout?"timeout of "+s.timeout+"ms exceeded":"timeout exceeded";const N=s.transitional||ya;s.timeoutErrorMessage&&(k=s.timeoutErrorMessage),r(new T(k,N.clarifyTimeoutError?T.ETIMEDOUT:T.ECONNABORTED,e,c)),z(),c=null},l===void 0&&o.setContentType(null),"setRequestHeader"in c&&g.forEach(Of(o),function(k,N){c.setRequestHeader(N,k)}),g.isUndefined(s.withCredentials)||(c.withCredentials=!!s.withCredentials),a&&a!=="json"&&(c.responseType=s.responseType),d&&([h,S,w]=xl(d,!0),c.addEventListener("progress",h)),u&&c.upload&&([y,v]=xl(u),c.upload.addEventListener("progress",y),c.upload.addEventListener("loadend",v)),(s.cancelToken||s.signal)&&(m=x=>{c&&(r(!x||x.type?new as(null,e,c):x),c.abort(),z(),c=null)},s.cancelToken&&s.cancelToken.subscribe(m),s.signal&&(s.signal.aborted?m():s.signal.addEventListener("abort",m)));const p=go(s.url);if(p&&!ve.protocols.includes(p)){r(new T("Unsupported protocol "+p+":",T.ERR_BAD_REQUEST,e)),z();return}c.send(l||null)})},Py=(e,t)=>{if(e=e?e.filter(Boolean):[],!t&&!e.length)return;const n=new AbortController;let r=!1;const s=function(u){if(!r){r=!0,o();const d=u instanceof Error?u:this.reason;n.abort(d instanceof T?d:new as(d instanceof Error?d.message:d))}};let l=t&&setTimeout(()=>{l=null,s(new T(`timeout of ${t}ms exceeded`,T.ETIMEDOUT))},t);const o=()=>{e&&(l&&clearTimeout(l),l=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(s):u.removeEventListener("abort",s)}),e=null)};e.forEach(u=>{if(!r){if(u.aborted){s.call(u);return}u.addEventListener("abort",s,{once:!0})}});const{signal:a}=n;return a.unsubscribe=()=>g.asap(o),a},Ty=function*(e,t){let n=e.byteLength;if(n{const s=Ly(e,t);let l=0,o,a=u=>{o||(o=!0,r&&r(u))};return new ReadableStream({async pull(u){try{const{done:d,value:m}=await s.next();if(d){a(),u.close();return}let y=m.byteLength;if(n){let h=l+=y;n(h)}u.enqueue(new Uint8Array(m))}catch(d){throw a(d),d}},cancel(u){return a(u),s.return()}},{highWaterMark:2})},qu=e=>e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102,Wf=(e,t,n)=>t+2e<=57?e-48:(e&223)-55,Ay=e=>e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||e===43||e===47||e===45||e===95,Dy=e=>e===9||e===10||e===12||e===13||e===32,My=e=>{const t=Math.floor(e/4),n=e%4;return t*3+(n===2?1:n===3?2:0)},Iy=e=>{const t=e.length;let n=0;return t>0&&e.charCodeAt(t-1)===61&&(n++,t>1&&e.charCodeAt(t-2)===61&&n++),Math.floor((t-n)*3/4)},Fy=e=>{const t=e.length;let n=0,r=0,s=!1;for(let l=0;l0){s=!0;continue}n++}}return s||r>2||r>0&&(n+r)%4!==0||n%4===1?Iy(e):My(n)},Uy=(e,t)=>{if(!e||typeof e!="string"||!e.startsWith("data:"))return 0;const n=e.indexOf(",");if(n<0)return 0;const r=e.slice(5,n),s=e.slice(n+1);if(/;base64/i.test(r))return t(s);let o=0;for(let a=0,u=s.length;a=55296&&d<=56319&&a+1=56320&&m<=57343?(o+=4,a++):o+=3}else o+=3}return o};function $y(e){const t=typeof e=="string"?e.indexOf("#"):-1;return Uy(t===-1?e:e.slice(0,t),Fy)}const xa="1.20.0",Ku=64*1024,By={cache:"default",redirect:"follow",referrer:"about:client",referrerPolicy:"",mode:"cors",integrity:"",keepalive:!1,priority:"auto",window:null},{isFunction:Rs}=g,Hy=e=>encodeURIComponent(e).replace(/%([0-9A-F]{2})/gi,(t,n)=>String.fromCharCode(parseInt(n,16))),Gu=e=>{if(!g.isString(e))return e;try{return decodeURIComponent(e)}catch{return e}},Ju=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Vy=e=>{const t=e.indexOf("://");let n=e;return t!==-1&&(n=n.slice(t+3)),n.includes("@")||n.includes(":")},Wy=e=>{const t=g.global!==void 0&&g.global!==null?g.global:globalThis,{ReadableStream:n,TextEncoder:r}=t;e=g.merge.call({skipUndefined:!0},{Request:t.Request,Response:t.Response},e);const{fetch:s,Request:l,Response:o}=e,a=s?Rs(s):typeof fetch=="function",u=Rs(l),d=Rs(o);if(!a)return!1;const m=a&&Rs(n),y=a&&(typeof r=="function"?(c=>f=>c.encode(f))(new r):async c=>new Uint8Array(await new l(c).arrayBuffer())),h=u&&m&&Ju(()=>{let c=!1;const f=new l(ve.origin,{body:new n,method:"POST",get duplex(){return c=!0,"half"}}),p=f.headers.has("Content-Type");return f.body!=null&&f.body.cancel(),c&&!p}),v=d&&m&&Ju(()=>g.isReadableStream(new o("").body)),S={stream:v&&(c=>c.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(c=>{!S[c]&&(S[c]=(f,p)=>{let x=f&&f[c];if(x)return x.call(f);throw new T(`Response type '${c}' is not supported`,T.ERR_NOT_SUPPORT,p)})});const w=async c=>{if(c==null)return 0;if(g.isBlob(c))return c.size;if(g.isSpecCompliantForm(c))return(await new l(ve.origin,{method:"POST",body:c}).arrayBuffer()).byteLength;if(g.isArrayBufferView(c)||g.isArrayBuffer(c))return c.byteLength;if(g.isURLSearchParams(c)&&(c=c+""),g.isString(c))return(await y(c)).byteLength},z=async(c,f)=>{const p=g.toFiniteNumber(c.getContentLength());return p??w(f)};return async c=>{let{url:f,method:p,data:x,signal:k,cancelToken:N,timeout:j,onDownloadProgress:E,onUploadProgress:F,responseType:P,headers:Q,withCredentials:le="same-origin",fetchOptions:ke,maxContentLength:I,maxBodyLength:ut,maxRedirects:Y}=Vf(c);const Se=g.isNumber(I)&&I>-1,R=g.isNumber(ut)&&ut>-1,A=V=>g.hasOwnProp(c,V)?c[V]:void 0;let D=s||fetch;P=P?(P+"").toLowerCase():"text";let W=Py([k,N&&N.toAbortSignal()],j),H=null;const Ne=W&&W.unsubscribe&&(()=>{W.unsubscribe()});let b,ee=null;const X=()=>new T("Request body larger than maxBodyLength limit",T.ERR_BAD_REQUEST,c,H);try{let V;const je=A("auth");if(je){const U=g.getSafeProp(je,"username")||"",he=g.getSafeProp(je,"password")||"";V={username:U,password:he}}if(Vy(f)){const U=new URL(f,ve.origin);if(!V&&(U.username||U.password)){const he=Gu(U.username),ct=Gu(U.password);V={username:he,password:ct}}(U.username||U.password)&&(U.username="",U.password="",f=U.href)}if(V&&(Q.delete("authorization"),Q.set("Authorization","Basic "+btoa(Hy((V.username||"")+":"+(V.password||""))))),Se&&typeof f=="string"&&f.startsWith("data:")&&$y(f)>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H);if(R&&p!=="get"&&p!=="head"){const U=await w(x);if(typeof U=="number"&&isFinite(U)&&(b=U,U>ut))throw X()}const jn=R&&(g.isReadableStream(x)||g.isStream(x)),us=(U,he,ct)=>Wu(U,Ku,vt=>{if(R&&vt>ut)throw ee=X();he&&he(vt)},ct);if(h&&p!=="get"&&p!=="head"&&(F||jn)){if(b=b??await z(Q,x),b!==0||jn){let U=new l(f,{method:"POST",body:x,duplex:"half"}),he;if(g.isFormData(x)&&(he=U.headers.get("content-type"))&&Q.setContentType(he),U.body){const[ct,vt]=F&&$u(b,xl(Bu(F)))||[];x=us(U.body,ct,vt)}}}else if(jn&&!u&&m&&p!=="get"&&p!=="head")x=us(x);else if(jn&&u&&!h&&p!=="get"&&p!=="head")throw new T("Stream request bodies are not supported by the current fetch implementation",T.ERR_NOT_SUPPORT,c,H);g.isString(le)||(le=le?"include":"omit");const Fl=u&&"credentials"in l.prototype;if(g.isFormData(x)){const U=Q.getContentType();U&&/^multipart\/form-data/i.test(U)&&!/boundary=/i.test(U)&&Q.delete("content-type")}Q.set("User-Agent","axios/"+xa,!1);const Qe=ke==null?ke:Object.assign(Object.create(null),ke);Qe&&(delete Qe.body,delete Qe.headers,delete Qe.method,delete Qe.signal,delete Qe.duplex,delete Qe.credentials);const Ue=Object.assign(Object.create(null),Qe,{signal:W,method:p.toUpperCase(),headers:Of(Q.normalize()),body:x,duplex:"half",credentials:Fl?le:void 0});u&&(g.forEach(By,(U,he)=>{Ue[he]===void 0&&(Ue[he]=U)}),Ue.signal===void 0&&(Ue.signal=null),Ue.body===void 0&&(Ue.body=null)),Y===0&&(Ue.redirect="manual",Qe&&(Qe.redirect="manual")),H=u&&new l(f,Ue);let et=await(u?D(H,Qe):D(f,Ue));const cs=Le.from(et.headers);if(Se){const U=g.toFiniteNumber(cs.getContentLength());if(U!=null&&U>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H)}const or=v&&(P==="stream"||P==="response");if(v&&et.body&&(E||Se||or&&Ne)){const U={};["status","statusText","headers"].forEach(Dt=>{U[Dt]=et[Dt]});const he=g.toFiniteNumber(cs.getContentLength()),[ct,vt]=E&&$u(he,xl(Bu(E),!0))||[];let ir=0;const ds=Dt=>{if(Se&&(ir=Dt,ir>I))throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H);ct&&ct(Dt)};et=new o(Wu(et.body,Ku,ds,()=>{vt&&vt(),Ne&&Ne()}),U)}P=P||"text";let tt=await S[g.findKey(S,P)||"text"](et,c);if(Se&&!v&&!or){let U;if(tt!=null&&(typeof tt.byteLength=="number"?U=tt.byteLength:typeof tt.size=="number"?U=tt.size:typeof tt=="string"&&(U=typeof r=="function"?new r().encode(tt).byteLength:tt.length)),typeof U=="number"&&U>I)throw new T("maxContentLength size of "+I+" exceeded",T.ERR_BAD_RESPONSE,c,H)}return!or&&Ne&&Ne(),await new Promise((U,he)=>{$f(U,he,{data:tt,headers:Le.from(et.headers),status:et.status,statusText:et.statusText,config:c,request:H})})}catch(V){if(Ne&&Ne(),W&&W.aborted&&W.reason instanceof T){const je=W.reason;throw je.config=c,H&&(je.request=H),V!==je&&Object.defineProperty(je,"cause",{__proto__:null,value:V,writable:!0,enumerable:!1,configurable:!0}),je}if(ee)throw H&&!ee.request&&(ee.request=H),ee;if(V instanceof T)throw H&&!V.request&&(V.request=H),V;if(V&&V.name==="TypeError"&&/Load failed|fetch/i.test(V.message)){const je=new T("Network Error",T.ERR_NETWORK,c,H,V&&V.response);throw Object.defineProperty(je,"cause",{__proto__:null,value:V.cause||V,writable:!0,enumerable:!1,configurable:!0}),je}throw T.from(V,V&&V.code,c,H,V&&V.response)}}},qy=new Map,qf=e=>{let t=e&&e.env||{};const{fetch:n,Request:r,Response:s}=t,l=[r,s,n];let o=l.length,a=o,u,d,m=qy;for(;a--;)u=l[a],d=m.get(u),d===void 0&&m.set(u,d=a?new Map:Wy(t)),m=d;return d};qf();const va={http:Z0,xhr:Oy,fetch:{get:qf}};g.forEach(va,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{__proto__:null,value:t})}catch{}Object.defineProperty(e,"adapterName",{__proto__:null,value:t})}});const Xu=e=>`- ${e}`,Qy=e=>g.isFunction(e)||e===null||e===!1;function Ky(e,t){e=g.isArray(e)?e:[e];const{length:n}=e;let r,s;const l={};for(let o=0;o`adapter ${u} `+(d===!1?"is not supported by the environment":"is not available in the build"));let a=n?o.length>1?`since : +`+o.map(Xu).join(` +`):" "+Xu(o[0]):"as no adapter specified";throw new T("There is no suitable adapter to dispatch the request "+a,T.ERR_NOT_SUPPORT)}return s}const Qf={getAdapter:Ky,adapters:va};function xo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new as(null,e)}function vo(e){const t=g.toSafeFlatObject(e);return xo(t),t.headers=Le.from(g.getSafeProp(t,"headers")),t.data=yo.call(t,t.transformRequest),["post","put","patch"].indexOf(t.method)!==-1&&t.headers.setContentType("application/x-www-form-urlencoded",!1),Qf.getAdapter(t.adapter||is.adapter,t)(t).then(function(s){xo(t),t.response=s;try{s.data=yo.call(t,t.transformResponse,s)}finally{delete t.response}return s.headers=Le.from(s.headers),s},function(s){if(!Uf(s)&&(xo(t),s&&s.response)){t.response=s.response;try{s.response.data=yo.call(t,t.transformResponse,s.response)}finally{delete t.response}s.response.headers=Le.from(s.response.headers)}return Promise.reject(s)})}const Il={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Il[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const Yu={};Il.transitional=function(t,n,r){function s(l,o){return"[Axios v"+xa+"] Transitional option '"+l+"'"+o+(r?". "+r:"")}return(l,o,a)=>{if(t===!1)throw new T(s(o," has been removed"+(n?" in "+n:"")),T.ERR_DEPRECATED);return n&&!Yu[o]&&(Yu[o]=!0,console.warn(s(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(l,o,a):!0}};Il.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function Gy(e,t,n){if(typeof e!="object"||e===null)throw new T("options must be an object",T.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const l=r[s],o=Object.prototype.hasOwnProperty.call(t,l)?t[l]:void 0;if(o){const a=e[l],u=a===void 0||o(a,l,e);if(u!==!0)throw new T("option "+l+" must be "+u,T.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new T("Unknown option "+l,T.ERR_BAD_OPTION)}}const Vs={assertOptions:Gy,validators:Il},Pe=Vs.validators;let pn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Fu,response:new Fu}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error)try{let s={};Error.captureStackTrace?Error.captureStackTrace(s):s=new Error;const l=s.stack;let o="";if(typeof l=="string"){const a=l.indexOf(` `);o=a===-1?"":l.slice(a+1)}if(!r.stack)r.stack=o;else if(o){const a=o.indexOf(` `),u=a===-1?-1:o.indexOf(` `,a+1),d=u===-1?"":o.slice(u+1);String(r.stack).endsWith(d)||(r.stack+=` -`+o)}}catch{}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=kn(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:l}=n;r!==void 0&&Vs.assertOptions(r,{silentJSONParsing:Pe.transitional(Pe.boolean),forcedJSONParsing:Pe.transitional(Pe.boolean),clarifyTimeoutError:Pe.transitional(Pe.boolean),legacyInterceptorReqResOrdering:Pe.transitional(Pe.boolean),advertiseZstdAcceptEncoding:Pe.transitional(Pe.boolean),validateStatusUndefinedResolves:Pe.transitional(Pe.boolean)},!1),s!=null&&(g.isFunction(s)?n.paramsSerializer={serialize:s}:Vs.assertOptions(s,{encode:Pe.function,serialize:Pe.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Vs.assertOptions(n,{baseUrl:Pe.spelling("baseURL"),withXsrfToken:Pe.spelling("withXSRFToken")},!0),n.method=(g.getSafeProp(n,"method")||g.getSafeProp(this.defaults,"method")||"get").toLowerCase();let o=l&&g.merge(l.common,l[n.method]);l&&g.forEach(If.concat("common"),S=>{delete l[S]}),n.headers=Le.concat(o,l);const a=[];let u=!0;this.interceptors.request.forEach(function(w){if(typeof w.runWhen=="function"&&w.runWhen(n)===!1)return;u=u&&w.synchronous;const z=n.transitional||ha;z&&z.legacyInterceptorReqResOrdering?a.unshift(w.fulfilled,w.rejected):a.push(w.fulfilled,w.rejected)});const d=[];this.interceptors.response.forEach(function(w){d.push(w.fulfilled,w.rejected)});let m,y=0,h;if(!u){const S=[xo.bind(this),void 0];for(S.unshift(...a),S.push(...d),h=S.length,m=Promise.resolve(n);yxo.call(this,v)))}catch(c){m=Promise.reject(c)}break}}if(!m)try{m=xo.call(this,v)}catch(S){m=Promise.reject(S)}for(y=0,h=d.length;y{if(!r._listeners)return;let l=r._listeners.length;for(;l-- >0;)r._listeners[l](s);r._listeners=null}),this.promise.then=s=>{let l;const o=new Promise(a=>{r.subscribe(a),l=a}).then(s);return o.cancel=function(){r.unsubscribe(l)},o},t(function(l,o,a){r.reason||(r.reason=new as(l,o,a),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Qf(function(s){t=s}),cancel:t}}};function Jy(e){return function(n){return e.apply(null,n)}}function Xy(e){return g.isObject(e)&&e.isAxiosError===!0}const Ws={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,ContentTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,UnprocessableContent:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerReturnsAnUnknownError:520,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ws).forEach(([e,t])=>{Ws[t]===void 0&&(Ws[t]=e)});function Kf(e){const t=new pn(e),n=xf(pn.prototype.request,t);return g.extend(n,pn.prototype,t,{allOwnKeys:!0}),g.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return Kf(kn(e,s))},n}const pe=Kf(is);pe.Axios=pn;pe.CanceledError=as;pe.CancelToken=Gy;pe.isCancel=Ff;pe.VERSION=ga;pe.toFormData=Dl;pe.AxiosError=T;pe.Cancel=pe.CanceledError;pe.all=function(t){return Promise.all(t)};pe.spread=Jy;pe.isAxiosError=Xy;pe.mergeConfig=kn;pe.AxiosHeaders=Le;pe.formToJSON=e=>Mf(g.isHTMLForm(e)?new FormData(e):e);pe.getAdapter=qf.getAdapter;pe.HttpStatusCode=Ws;pe.default=pe;const{Axios:fg,AxiosError:pg,CanceledError:mg,isCancel:hg,CancelToken:yg,VERSION:gg,all:xg,Cancel:vg,isAxiosError:wg,spread:kg,toFormData:Sg,AxiosHeaders:Ng,HttpStatusCode:jg,formToJSON:_g,getAdapter:Eg,mergeConfig:Cg,create:bg}=pe,re=pe.create({baseURL:"",timeout:12e4});re.interceptors.request.use(e=>{const t=localStorage.getItem("panelToken");return t&&(e.headers.Authorization=`Bearer ${t}`),e});re.interceptors.response.use(e=>e,e=>{var t;return((t=e.response)==null?void 0:t.status)===401&&(localStorage.removeItem("panelToken"),window.location.href="/"),Promise.reject(e)});function Yy({onSuccess:e}){const[t,n]=O.useState(""),[r,s]=O.useState(!1),[l,o]=O.useState(""),[a,u]=O.useState(!1),d=async m=>{var y,h;m.preventDefault(),o(""),u(!0);try{const v=await re.post("/auth/login",{password:t});localStorage.setItem("panelToken",v.data.token),e()}catch(v){o(((h=(y=v.response)==null?void 0:y.data)==null?void 0:h.detail)||"登录失败")}finally{u(!1)}};return i.jsx("div",{className:"min-h-screen flex items-center justify-center p-4",children:i.jsxs("div",{className:"w-full max-w-md",children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-purple-600/20 mb-4",children:i.jsx(Jr,{className:"w-10 h-10 text-purple-400"})}),i.jsx("h1",{className:"text-3xl font-bold text-white",children:"AGY2API"}),i.jsx("p",{className:"text-gray-400 mt-2",children:"Antigravity API 代理服务控制面板"})]}),i.jsxs("div",{className:"card",children:[i.jsx("h2",{className:"text-xl font-semibold mb-6 text-center",children:"登录控制面板"}),l&&i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg mb-4",children:l}),i.jsxs("form",{onSubmit:d,className:"space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-2",children:"密码"}),i.jsxs("div",{className:"relative",children:[i.jsx("input",{type:r?"text":"password",value:t,onChange:m=>n(m.target.value),className:"w-full px-4 py-3 bg-dark-800 border border-dark-600 rounded-lg text-white placeholder-gray-500 pr-12",placeholder:"请输入控制面板密码",required:!0}),i.jsx("button",{type:"button",onClick:()=>s(!r),className:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-300",children:r?i.jsx(Rh,{size:20}):i.jsx(Oh,{size:20})})]})]}),i.jsx("button",{type:"submit",disabled:a,className:"w-full btn btn-primary py-3 flex items-center justify-center disabled:opacity-50",children:a?i.jsx("span",{className:"animate-spin rounded-full h-5 w-5 border-b-2 border-white"}):"登录"})]})]})]})})}function Zr({type:e="info",title:t,children:n,onClose:r}){O.useEffect(()=>{const l=o=>{o.key==="Escape"&&(r==null||r())};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[r]);const s={success:{icon:i.jsx(qn,{size:20,className:"text-green-400"}),border:"border-green-500/40",iconBg:"bg-green-500/15"},error:{icon:i.jsx(fi,{size:20,className:"text-red-400"}),border:"border-red-500/40",iconBg:"bg-red-500/15"},info:{icon:i.jsx(Tr,{size:20,className:"text-blue-400"}),border:"border-blue-500/40",iconBg:"bg-blue-500/15"}}[e]||{};return i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60",onClick:r,children:i.jsxs("div",{className:`card max-w-md w-full border ${s.border} p-0 overflow-hidden`,onClick:l=>l.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-dark-700",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:`p-1.5 rounded-lg ${s.iconBg}`,children:s.icon}),i.jsx("h3",{className:"text-sm font-semibold text-gray-200",children:t})]}),i.jsx("button",{onClick:r,className:"text-gray-400 hover:text-white",children:i.jsx(yf,{size:16})})]}),i.jsx("div",{className:"px-4 py-3 text-sm text-gray-300 max-h-[60vh] overflow-y-auto break-all",children:n}),i.jsx("div",{className:"px-4 py-3 border-t border-dark-700 text-right",children:i.jsx("button",{onClick:r,className:"btn btn-secondary text-xs px-4 py-1.5",children:"关闭"})})]})})}function Zy(){const[e,t]=O.useState(!1),[n,r]=O.useState(!1),[s,l]=O.useState(""),[o,a]=O.useState(""),[u,d]=O.useState(!1),[m,y]=O.useState(""),[h,v]=O.useState(null),[S,w]=O.useState(!1),z=async()=>{var k,N;t(!0),v(null),l(""),y("");try{const j=await re.post("/auth/start",{});l(j.data.auth_url),v({type:"info",text:"已生成认证链接,请在新窗口完成 Google 授权"})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"获取认证链接失败"})}finally{t(!1)}},c=async()=>{var k,N;r(!0);try{const j=await re.post("/auth/callback",{});y(JSON.stringify(j.data.credentials,null,2)),v({type:"success",text:`认证成功!凭证已保存:${j.data.email||"未知邮箱"}`})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"获取凭证失败,请确认已完成授权"})}finally{r(!1)}},f=async()=>{var k,N;if(!o.trim()){v({type:"error",text:"请粘贴完整的回调URL"});return}r(!0);try{const j=await re.post("/auth/callback-url",{callback_url:o.trim()});y(JSON.stringify(j.data.credentials,null,2)),v({type:"success",text:`认证成功!凭证已保存:${j.data.email||"未知邮箱"}`})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"从回调URL获取凭证失败"})}finally{r(!1)}},p=()=>{navigator.clipboard.writeText(s),w(!0),setTimeout(()=>w(!1),1500)},x=()=>{const k=new Blob([m],{type:"application/json"}),N=URL.createObjectURL(k),j=document.createElement("a");j.href=N,j.download="antigravity-credentials.json",j.click(),URL.revokeObjectURL(N)};return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-gradient-to-br from-orange-900/30 to-orange-800/10 border border-orange-700/30 rounded-xl p-5",children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(Jr,{className:"w-5 h-5 text-orange-400"}),i.jsx("h3",{className:"text-lg font-semibold text-orange-400",children:"Antigravity 认证模式"})]}),i.jsx("p",{className:"text-sm text-gray-400",children:"通过 Google OAuth 获取 Antigravity 凭证。授权成功后系统会自动获取 Project ID 和订阅等级,并保存凭证到数据库。"})]}),h&&i.jsx(Zr,{type:h.type,title:h.type==="success"?"操作成功":h.type==="error"?"操作失败":"提示",onClose:()=>v(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:h.text})}),i.jsxs("button",{onClick:z,disabled:e,className:"btn btn-primary flex items-center gap-2 disabled:opacity-50",children:[e?i.jsx(gt,{className:"animate-spin",size:18}):i.jsx(Jr,{size:18}),"获取 Antigravity 认证链接"]}),s&&i.jsxs("div",{className:"card space-y-4",children:[i.jsx("h3",{className:"font-semibold",children:"认证链接"}),i.jsxs("div",{className:"bg-dark-800 border border-purple-500/30 rounded-lg p-4 flex items-center justify-between gap-3",children:[i.jsxs("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"text-purple-400 hover:text-purple-300 break-all text-sm flex items-center gap-1",children:["点击此链接进行 Google 认证 ",i.jsx(hf,{size:14})]}),i.jsxs("button",{onClick:p,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1 flex-shrink-0",children:[S?i.jsx(pf,{size:14}):i.jsx(Eh,{size:14}),S?"已复制":"复制"]})]}),i.jsxs("div",{className:"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4 text-sm text-gray-400",children:[i.jsx("p",{className:"font-medium text-blue-400 mb-2",children:"使用说明"}),i.jsxs("ol",{className:"list-decimal list-inside space-y-1",children:[i.jsx("li",{children:"点击上方认证链接,在新窗口中完成 Google 账号授权"}),i.jsx("li",{children:"授权成功后会跳转到 localhost 显示成功页面"}),i.jsx("li",{children:"关闭 OAuth 窗口,返回本页面"}),i.jsx("li",{children:'点击下方"获取凭证"按钮完成流程'})]})]}),i.jsxs("div",{className:"border border-dark-600 rounded-lg",children:[i.jsxs("button",{onClick:()=>d(!u),className:"w-full flex items-center justify-between px-4 py-3 text-sm text-gray-400 hover:text-gray-200",children:[i.jsx("span",{children:"🚀 无法回源?试试快捷方式(粘贴回调URL)"}),i.jsx(mf,{size:16,className:`transition-transform ${u?"rotate-180":""}`})]}),u&&i.jsxs("div",{className:"px-4 pb-4 space-y-3",children:[i.jsx("p",{className:"text-xs text-gray-500",children:"适用场景:云服务器/VPS、Docker 容器、防火墙阻止回调端口等。 完成 Google 授权后,复制浏览器地址栏的完整 URL 粘贴到下方。"}),i.jsx("textarea",{value:o,onChange:k=>a(k.target.value),placeholder:"http://localhost:11451/?state=xxx&code=xxx&scope=xxx...",className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500",rows:3}),i.jsxs("button",{onClick:f,disabled:n,className:"btn btn-secondary text-sm flex items-center gap-2 disabled:opacity-50",children:[n&&i.jsx(gt,{className:"animate-spin",size:14}),"从回调URL获取凭证"]})]})]}),i.jsxs("button",{onClick:c,disabled:n,className:"btn btn-primary flex items-center gap-2 disabled:opacity-50",children:[n&&i.jsx(gt,{className:"animate-spin",size:18}),"获取 Antigravity 凭证"]})]}),m&&i.jsxs("div",{className:"card space-y-4",children:[i.jsx("h3",{className:"font-semibold",children:"凭证内容"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-4 text-xs text-gray-300 overflow-x-auto max-h-96 overflow-y-auto",children:m}),i.jsx("button",{onClick:x,className:"btn btn-secondary text-sm",children:"下载凭证文件"})]})]})}function Nt({value:e,onChange:t,options:n,className:r="",disabled:s=!1}){const[l,o]=O.useState(!1),[a,u]=O.useState({dropUp:!1,maxHeight:240}),d=O.useRef(null);O.useEffect(()=>{if(!l)return;const h=S=>{d.current&&!d.current.contains(S.target)&&o(!1)},v=S=>{S.key==="Escape"&&o(!1)};return document.addEventListener("mousedown",h),document.addEventListener("touchstart",h),document.addEventListener("keydown",v),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("touchstart",h),document.removeEventListener("keydown",v)}},[l]);const m=()=>{if(!s){if(!l&&d.current){const h=d.current.getBoundingClientRect(),v=window.innerHeight-h.bottom,S=h.top,w=Math.min(n.length*40+10,240);v>=w||v>=S?u({dropUp:!1,maxHeight:Math.min(v-8,w)}):u({dropUp:!0,maxHeight:Math.min(S-8,w)})}o(h=>!h)}},y=n.find(h=>h.value===e);return i.jsxs("div",{ref:d,className:`relative ${r}`,children:[i.jsxs("button",{type:"button",disabled:s,"aria-haspopup":"listbox","aria-expanded":l,onClick:m,className:`w-full flex items-center justify-between gap-1 text-left bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm focus:outline-none focus:ring-2 focus:ring-purple-500/50 ${l?"ring-2 ring-purple-500/50 border-purple-500/50":""} ${s?"opacity-40 cursor-not-allowed":"cursor-pointer"}`,children:[i.jsx("span",{className:"truncate",children:y?y.label:""}),i.jsx(mf,{size:14,className:`shrink-0 text-gray-400 transition-transform duration-200 ${l?"rotate-180":""}`})]}),l&&i.jsx("div",{role:"listbox",style:{maxHeight:Math.max(a.maxHeight,96)},className:`absolute left-0 right-0 z-20 overflow-y-auto rounded-lg border border-dark-600 bg-dark-800 py-1 shadow-xl ${a.dropUp?"bottom-full mb-1":"top-full mt-1"}`,children:n.map(h=>i.jsxs("button",{type:"button",role:"option","aria-selected":h.value===e,onClick:()=>{t(h.value),o(!1)},className:`flex w-full items-center justify-between gap-2 px-3 py-2.5 sm:py-2 text-left text-xs sm:text-sm ${h.value===e?"bg-purple-600/20 text-purple-300":"text-gray-200 hover:bg-dark-700"}`,children:[i.jsx("span",{className:"truncate",children:h.label}),h.value===e&&i.jsx(pf,{size:14,className:"shrink-0"})]},h.value))})]})}function eg(){var tt,U,he,ct,vt,ir,ds,Dt,va;const[e,t]=O.useState([]),[n,r]=O.useState({total:0,normal:0,disabled:0}),[s,l]=O.useState(0),[o,a]=O.useState(1),[u,d]=O.useState(20),[m,y]=O.useState("all"),[h,v]=O.useState("all"),[S,w]=O.useState("all"),[z,c]=O.useState("all"),[f,p]=O.useState(!0),[x,k]=O.useState(new Set),[N,j]=O.useState(null),[E,F]=O.useState(null),[P,Q]=O.useState(new Set),[le,ke]=O.useState(Date.now()/1e3),[I,ut]=O.useState(null),[Y,Se]=O.useState({});O.useEffect(()=>{const _=setInterval(()=>ke(Date.now()/1e3),1e3);return()=>clearInterval(_)},[]);const R=O.useCallback(async()=>{var _,M;p(!0);try{const $=(o-1)*u,B=await re.get("/creds/status",{params:{offset:$,limit:u,status_filter:m,error_code_filter:h,cooldown_filter:S,tier_filter:z}});t(B.data.items),l(B.data.total),r(B.data.stats||{total:0,normal:0,disabled:0}),k(new Set)}catch($){A("error",((M=(_=$.response)==null?void 0:_.data)==null?void 0:M.detail)||"加载凭证失败")}finally{p(!1)}},[o,u,m,h,S,z]);O.useEffect(()=>{R()},[R]);const A=O.useCallback((_,M,$)=>{j({type:_,text:M,title:$||(_==="success"?"操作成功":_==="error"?"操作失败":"提示")})},[]),D=(_,M)=>{Q($=>{const B=new Set($);return M?B.add(_):B.delete(_),B})},W=async(_,M)=>{var $,B;D(_,!0);try{const K=await re.post("/creds/action",{email:_,action:M});A("success",K.data.message),R()}catch(K){A("error",((B=($=K.response)==null?void 0:$.data)==null?void 0:B.detail)||"操作失败")}finally{D(_,!1)}},H=async _=>{var M,$,B;if(x.size!==0){D("__batch__",!0);try{const K=await re.post("/creds/batch-action",{action:_,emails:Array.from(x)});A((M=K.data.errors)!=null&&M.length?"error":"success",K.data.message),R()}catch(K){A("error",((B=($=K.response)==null?void 0:$.data)==null?void 0:B.detail)||"批量操作失败")}finally{D("__batch__",!1)}}},Ne=async _=>{var M,$,B,K,ce,Ae;D(_,!0);try{const be=await re.post(`/creds/verify-project/${encodeURIComponent(_)}`);be.data.success?A("success",`Project=${be.data.project_id}, Tier=${be.data.subscription_tier}`,`检验成功: ${_}`):A("error",be.data.message||be.data.error||"检验失败",`检验失败: ${_}`),R()}catch(be){A("error",(($=(M=be.response)==null?void 0:M.data)==null?void 0:$.detail)||((K=(B=be.response)==null?void 0:B.data)==null?void 0:K.error)||((Ae=(ce=be.response)==null?void 0:ce.data)==null?void 0:Ae.message)||"检验失败",`检验失败: ${_}`)}finally{D(_,!1)}},b=async _=>{var M,$;D(_,!0);try{const B=await re.post(`/creds/test/${encodeURIComponent(_)}`);A("success",B.data.message||(B.status===429?"凭证被限流(429)但有效":"凭证测试通过"),`测试成功: ${_}`),R()}catch(B){const K=((M=B.response)==null?void 0:M.data)||{},ce=($=B.response)==null?void 0:$.status,Ae=K.error||K.detail||K.message||"测试失败";A(ce===429?"info":"error",`HTTP ${ce} -${Ae}`,`测试失败: ${_}`),R()}finally{D(_,!1)}},ee=async _=>{ut({email:_}),D(_,!0);try{const M=await re.get(`/creds/quota/${encodeURIComponent(_)}`);if(M.data.success){const $=X(M.data.quotaGroups||[]);Se(B=>({...B,[_]:$}))}else Se($=>({...$,[_]:{error:M.data.error||"获取额度失败"}}))}catch(M){Se($=>{var B,K,ce,Ae;return{...$,[_]:{error:((K=(B=M.response)==null?void 0:B.data)==null?void 0:K.detail)||((Ae=(ce=M.response)==null?void 0:ce.data)==null?void 0:Ae.error)||"获取额度失败"}}})}finally{D(_,!1)}},X=_=>{const M={claude:{remaining:0,count:0,resetTime:""},gemini:{remaining:0,count:0,resetTime:""}};return _.forEach($=>{const K=($.displayName||"").toLowerCase().includes("claude")?M.claude:M.gemini;K.count+=1;let ce=null,Ae="";if(($.buckets||[]).forEach(be=>{const wa=(be.remainingFraction||0)*100;(ce===null||wa1&&(M.claude.remaining=Math.round(M.claude.remaining/M.claude.count)),M.gemini.count>1&&(M.gemini.remaining=Math.round(M.gemini.remaining/M.gemini.count)),M},V=_=>_>=80?{bar:"bg-green-500",text:"text-green-400"}:_>=40?{bar:"bg-yellow-500",text:"text-yellow-400"}:_>=20?{bar:"bg-orange-500",text:"text-orange-400"}:{bar:"bg-red-500",text:"text-red-400"},je=async _=>{var M,$;try{const B=await re.get(`/creds/export/${encodeURIComponent(_)}`,{responseType:"blob"}),K=URL.createObjectURL(B.data),ce=document.createElement("a");ce.href=K,ce.download=`${_}.json`,ce.click(),URL.revokeObjectURL(K),A("success",`已导出 ${_}.json`)}catch(B){A("error",(($=(M=B.response)==null?void 0:M.data)==null?void 0:$.detail)||"导出失败")}},jn=async()=>{var _,M;D("__batch__",!0);try{const $=await re.get("/creds/download-all",{responseType:"blob"}),B=URL.createObjectURL($.data),K=document.createElement("a");K.href=B,K.download="antigravity_credentials.zip",K.click(),URL.revokeObjectURL(B)}catch($){A("error",((M=(_=$.response)==null?void 0:_.data)==null?void 0:M.detail)||"下载失败")}finally{D("__batch__",!1)}},us=async _=>{var M,$;try{const B=await re.get(`/creds/errors/${encodeURIComponent(_)}`);F(B.data)}catch(B){A("error",(($=(M=B.response)==null?void 0:M.data)==null?void 0:$.detail)||"获取错误信息失败")}},Il=_=>{k(M=>{const $=new Set(M);return $.has(_)?$.delete(_):$.add(_),$})},Qe=()=>{x.size===e.length?k(new Set):k(new Set(e.map(_=>_.email)))},Ue=Math.max(1,Math.ceil(s/u)),et=_=>_?new Date(_*1e3).toLocaleString():"-",cs=_=>{const M=Object.entries(_||{}).filter(([,be])=>be>le);if(!M.length)return null;const B=Math.max(...M.map(([,be])=>be))-le,K=Math.floor(B/3600),ce=Math.floor(B%3600/60),Ae=Math.floor(B%60);return K>0?`${K}h${ce}m`:ce>0?`${ce}m${Ae}s`:`${Ae}s`},or=_=>_==="ultra"?"bg-red-500/10 text-red-400 border-red-500/30":_==="pro"?"bg-amber-500/10 text-amber-400 border-amber-500/30":"bg-blue-500/10 text-blue-400 border-blue-500/30";return i.jsxs("div",{className:"space-y-4 sm:space-y-6",children:[N&&i.jsx(Zr,{type:N.type,title:N.title,onClose:()=>j(null),children:i.jsx("span",{className:"whitespace-pre-wrap",children:N.text})}),i.jsxs("div",{className:"grid grid-cols-3 gap-2 sm:gap-4",children:[i.jsxs("div",{className:"bg-dark-800 border border-dark-600 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-white",children:n.total}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"总计"})]}),i.jsxs("div",{className:"bg-emerald-900/20 border border-emerald-700/30 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-emerald-400",children:n.normal}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"正常"})]}),i.jsxs("div",{className:"bg-red-900/20 border border-red-700/30 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-red-400",children:n.disabled}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"禁用"})]})]}),i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i.jsxs("button",{onClick:R,disabled:f,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:f?"animate-spin":""}),"刷新状态"]}),i.jsxs("button",{onClick:jn,disabled:P.has("__batch__"),className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Pu,{size:15}),"打包导出"]})]}),i.jsxs("div",{className:"grid grid-cols-2 sm:flex sm:flex-wrap gap-2 sm:gap-3 text-sm",children:[i.jsx(Nt,{value:m,onChange:_=>{y(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"全部凭证"},{value:"enabled",label:"仅启用"},{value:"disabled",label:"仅禁用"}]}),i.jsx(Nt,{value:h,onChange:_=>{v(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"错误码: 全部"},{value:"none",label:"无错误"},{value:"400",label:"400"},{value:"403",label:"403"},{value:"429",label:"429"},{value:"500",label:"500"}]}),i.jsx(Nt,{value:S,onChange:_=>{w(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"冷却: 全部"},{value:"in_cooldown",label:"CD中"},{value:"no_cooldown",label:"未CD"}]}),i.jsx(Nt,{value:z,onChange:_=>{c(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"Tier: 全部"},{value:"free",label:"Free"},{value:"pro",label:"Pro"},{value:"ultra",label:"Ultra"}]}),i.jsx(Nt,{value:u,onChange:_=>{d(Number(_)),a(1)},className:"w-full sm:w-32",options:[20,50,100,200,500,1e3].map(_=>({value:_,label:`每页 ${_}`}))})]}),i.jsx("div",{className:"card p-3 sm:p-4",children:i.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm",children:[i.jsxs("label",{className:"flex items-center gap-2 text-gray-400 cursor-pointer select-none",children:[i.jsx("input",{type:"checkbox",checked:x.size===e.length&&e.length>0,onChange:Qe,className:"accent-purple-600 w-4 h-4"}),"全选"]}),i.jsxs("span",{className:"text-gray-500 text-xs",children:["已选 ",x.size," 项"]}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.jsx("button",{onClick:()=>H("enable"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"批量启用"}),i.jsx("button",{onClick:()=>H("disable"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"批量禁用"}),i.jsx("button",{onClick:()=>H("delete"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-danger text-xs px-3 py-1.5 disabled:opacity-40",children:"批量删除"})]})]})}),f?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):e.length===0?i.jsx("div",{className:"card text-center py-12 text-gray-500 text-sm",children:"没有凭证。请先通过 OAuth 认证或批量导入添加凭证。"}):i.jsx("div",{className:"grid gap-3 sm:gap-4 grid-cols-1 md:grid-cols-2 xl:grid-cols-3",children:e.map(_=>{var B;const M=cs(_.model_cooldowns),$=P.has(_.email);return i.jsxs("div",{className:`card p-3 sm:p-4 space-y-3 transition-colors ${_.disabled?"border-red-500/30":""}`,children:[i.jsxs("div",{className:"flex items-start gap-2.5",children:[i.jsx("input",{type:"checkbox",checked:x.has(_.email),onChange:()=>Il(_.email),className:"accent-purple-600 w-4 h-4 flex-shrink-0 mt-0.5"}),i.jsxs("div",{className:"flex-1 min-w-0 space-y-1.5",children:[i.jsx("div",{className:"text-sm font-medium text-white break-all leading-snug",children:_.email}),i.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[i.jsx("span",{className:`text-xs px-2 py-0.5 rounded-full border ${or(_.tier)}`,children:_.tier||"pro"}),_.disabled?i.jsxs("span",{className:"text-red-400 text-xs flex items-center gap-1",children:[i.jsx(Ou,{size:12})," 禁用"]}):i.jsxs("span",{className:"text-emerald-400 text-xs flex items-center gap-1",children:[i.jsx(qn,{size:12})," 启用"]})]})]})]}),i.jsxs("div",{className:"space-y-1 text-xs",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[M?i.jsxs("span",{className:"text-cyan-400 flex items-center gap-1",children:[i.jsx(Uh,{size:12})," CD ",M]}):i.jsxs("span",{className:"text-gray-600 flex items-center gap-1",children:[i.jsx(pi,{size:12})," 无CD"]}),(B=_.error_codes)!=null&&B.length?i.jsxs("button",{onClick:()=>us(_.email),className:"text-red-400 hover:text-red-300 flex items-center gap-1",children:[i.jsx(fi,{size:12}),_.error_codes.join(",")]}):i.jsxs("span",{className:"text-gray-600 flex items-center gap-1",children:[i.jsx(qn,{size:12})," 无错误"]})]}),i.jsxs("div",{className:"flex items-center gap-1 text-gray-500",children:[i.jsx(pi,{size:12,className:"flex-shrink-0"}),i.jsx("span",{className:"truncate",title:et(_.last_success),children:et(_.last_success)})]})]}),i.jsx("div",{className:"grid grid-cols-3 gap-1.5 pt-1 border-t border-dark-700",children:$?i.jsx("div",{className:"col-span-3 flex items-center justify-center py-1.5",children:i.jsx(gt,{size:16,className:"animate-spin text-purple-400"})}):i.jsxs(i.Fragment,{children:[i.jsxs("button",{onClick:()=>Ne(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"检验 Project ID / Tier(可修复 403)",children:[i.jsx(Fh,{size:13})," 检验"]}),i.jsxs("button",{onClick:()=>b(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"测试凭证",children:[i.jsx(gf,{size:13})," 测试"]}),i.jsxs("button",{onClick:()=>ee(_.email),disabled:_.disabled,className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1 disabled:opacity-40",title:"查看额度",children:[i.jsx(ff,{size:13})," 额度"]}),i.jsxs("button",{onClick:()=>je(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"导出凭证(邮箱.json)",children:[i.jsx(Pu,{size:13})," 导出"]}),i.jsxs("button",{onClick:()=>W(_.email,_.disabled?"enable":"disable"),className:`text-xs px-2 py-1.5 rounded-lg flex items-center justify-center gap-1 ${_.disabled?"bg-emerald-600/20 hover:bg-emerald-600/30 text-emerald-400":"bg-amber-600/20 hover:bg-amber-600/30 text-amber-400"}`,children:[_.disabled?i.jsx(qn,{size:13}):i.jsx(Ou,{size:13}),_.disabled?"启用":"禁用"]}),i.jsxs("button",{onClick:()=>W(_.email,"delete"),className:"text-xs px-2 py-1.5 rounded-lg bg-red-600/10 hover:bg-red-600/20 text-red-400 flex items-center justify-center gap-1",title:"删除",children:[i.jsx(yl,{size:13})," 删除"]})]})})]},_.email)})}),s>u&&i.jsxs("div",{className:"flex items-center justify-between text-sm",children:[i.jsxs("span",{className:"text-gray-500 text-xs sm:text-sm",children:["共 ",s," 个凭证,第 ",o,"/",Ue," 页"]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>a(_=>Math.max(1,_-1)),disabled:o<=1,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"上一页"}),i.jsxs("span",{className:"text-gray-400 text-xs sm:text-sm",children:[o," / ",Ue]}),i.jsx("button",{onClick:()=>a(_=>Math.min(Ue,_+1)),disabled:o>=Ue,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"下一页"})]})]}),I&&i.jsx(Zr,{type:"info",title:`额度信息 - ${I.email}`,onClose:()=>ut(null),children:P.has(I.email)?i.jsxs("div",{className:"flex items-center justify-center py-6 text-gray-500",children:[i.jsx(Qn,{size:16,className:"animate-spin mr-2"}),"加载额度中..."]}):(tt=Y[I.email])!=null&&tt.error?i.jsx("div",{className:"text-center py-4 text-red-400",children:Y[I.email].error}):Y[I.email]?i.jsxs("div",{className:"space-y-3",children:[((U=Y[I.email].claude)==null?void 0:U.count)>0&&i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[i.jsx("span",{className:"text-purple-400 text-sm",children:"Claude"}),i.jsxs("span",{className:`text-sm font-medium ${V(Y[I.email].claude.remaining).text}`,children:[Y[I.email].claude.remaining.toFixed(1),"%"]})]}),i.jsx("div",{className:"bg-dark-600 rounded-full h-2",children:i.jsx("div",{className:`h-2 rounded-full ${V(Y[I.email].claude.remaining).bar}`,style:{width:`${Math.min(Y[I.email].claude.remaining,100)}%`}})})]}),((he=Y[I.email].gemini)==null?void 0:he.count)>0&&i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[i.jsx("span",{className:"text-cyan-400 text-sm",children:"Gemini"}),i.jsxs("span",{className:`text-sm font-medium ${V(Y[I.email].gemini.remaining).text}`,children:[Y[I.email].gemini.remaining.toFixed(1),"%"]})]}),i.jsx("div",{className:"bg-dark-600 rounded-full h-2",children:i.jsx("div",{className:`h-2 rounded-full ${V(Y[I.email].gemini.remaining).bar}`,style:{width:`${Math.min(Y[I.email].gemini.remaining,100)}%`}})})]}),!((ct=Y[I.email].claude)!=null&&ct.count)&&!((vt=Y[I.email].gemini)!=null&&vt.count)&&i.jsx("div",{className:"text-center py-3 text-gray-500",children:"暂无额度数据"}),(((ir=Y[I.email].claude)==null?void 0:ir.resetTime)||((ds=Y[I.email].gemini)==null?void 0:ds.resetTime))&&i.jsxs("div",{className:"text-xs text-gray-500 text-right pt-1",children:["重置:"," ",((Dt=Y[I.email].claude)==null?void 0:Dt.resetTime)||((va=Y[I.email].gemini)==null?void 0:va.resetTime)]}),i.jsxs("button",{onClick:()=>ee(I.email),disabled:P.has(I.email),className:"w-full text-xs text-gray-400 hover:text-white py-2 rounded-lg bg-dark-700 hover:bg-dark-600 flex items-center justify-center gap-1.5 disabled:opacity-50",children:[i.jsx(Qn,{size:12,className:P.has(I.email)?"animate-spin":""}),"刷新额度"]})]}):i.jsx("div",{className:"text-center py-4 text-gray-500",children:"加载中..."})}),E&&i.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center p-4 z-50",onClick:()=>F(null),children:i.jsxs("div",{className:"bg-dark-900 border border-dark-600 rounded-xl max-w-2xl w-full max-h-[80vh] overflow-hidden flex flex-col",onClick:_=>_.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 sm:px-5 py-4 border-b border-dark-700",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2 text-sm sm:text-base break-all",children:[i.jsx(fi,{size:16,className:"text-red-400 flex-shrink-0"}),"错误详情 - ",E.email]}),i.jsx("button",{onClick:()=>F(null),className:"text-gray-400 hover:text-white flex-shrink-0",children:"✕"})]}),i.jsxs("div",{className:"p-4 sm:p-5 overflow-y-auto space-y-4",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-sm text-gray-400 mb-1",children:"错误码"}),i.jsx("div",{className:"text-red-400 text-sm",children:(E.error_codes||[]).join(", ")||"无"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-sm text-gray-400 mb-1",children:"错误信息"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-3 sm:p-4 text-xs text-gray-300 overflow-auto max-h-56 whitespace-pre-wrap",children:JSON.stringify(E.error_messages,null,2)})]}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.jsx("button",{onClick:()=>{Ne(E.email),F(null)},className:"btn btn-primary text-sm",children:"检验修复(重新获取Project ID)"}),i.jsx("button",{onClick:()=>{b(E.email),F(null)},className:"btn btn-secondary text-sm",children:"测试凭证"})]})]})]})})]})}function tg(){var S;const[e,t]=O.useState([]),[n,r]=O.useState(!1),[s,l]=O.useState(null),[o,a]=O.useState(!1),u=O.useRef(null),d=w=>{const z=Array.from(w).filter(c=>c.name.endsWith(".json")||c.name.endsWith(".zip"));t(c=>{const f=new Set(c.map(p=>p.name));return[...c,...z.filter(p=>!f.has(p.name))]}),l(null)},m=w=>{t(z=>z.filter(c=>c.name!==w))},y=async()=>{var w,z;if(e.length!==0){r(!0),l(null);try{const c=new FormData;e.forEach(p=>c.append("files",p));const f=await re.post("/creds/upload",c,{headers:{"Content-Type":"multipart/form-data"}});l(f.data)}catch(c){l({error:((z=(w=c.response)==null?void 0:w.data)==null?void 0:z.detail)||"上传失败"})}finally{r(!1)}}},h=(s==null?void 0:s.uploaded_count)||0,v=(s==null?void 0:s.total_count)||0;return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-gradient-to-br from-emerald-900/30 to-emerald-800/10 border border-emerald-700/30 rounded-xl p-5",children:[i.jsx("h3",{className:"text-lg font-semibold text-emerald-400 mb-2",children:"批量导入凭证"}),i.jsx("p",{className:"text-sm text-gray-400",children:"支持批量导入 Antigravity 凭证(.json 或包含 JSON 文件的 .zip)。"}),i.jsxs("div",{className:"mt-3 text-xs text-gray-500 bg-dark-800/60 rounded-lg p-3",children:[i.jsx("p",{className:"mb-1 font-medium text-gray-400",children:"规范 JSON 格式:"}),i.jsx("pre",{className:"text-emerald-300/80 whitespace-pre-wrap font-mono",children:`{ +`+o)}}catch{}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=kn(this.defaults,n);const{transitional:r,paramsSerializer:s,headers:l}=n;r!==void 0&&Vs.assertOptions(r,{silentJSONParsing:Pe.transitional(Pe.boolean),forcedJSONParsing:Pe.transitional(Pe.boolean),clarifyTimeoutError:Pe.transitional(Pe.boolean),legacyInterceptorReqResOrdering:Pe.transitional(Pe.boolean),advertiseZstdAcceptEncoding:Pe.transitional(Pe.boolean),validateStatusUndefinedResolves:Pe.transitional(Pe.boolean)},!1),s!=null&&(g.isFunction(s)?n.paramsSerializer={serialize:s}:Vs.assertOptions(s,{encode:Pe.function,serialize:Pe.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Vs.assertOptions(n,{baseUrl:Pe.spelling("baseURL"),withXsrfToken:Pe.spelling("withXSRFToken")},!0),n.method=(g.getSafeProp(n,"method")||g.getSafeProp(this.defaults,"method")||"get").toLowerCase();let o=l&&g.merge(l.common,l[n.method]);l&&g.forEach(Ff.concat("common"),S=>{delete l[S]}),n.headers=Le.concat(o,l);const a=[];let u=!0;this.interceptors.request.forEach(function(w){if(typeof w.runWhen=="function"&&w.runWhen(n)===!1)return;u=u&&w.synchronous;const z=n.transitional||ya;z&&z.legacyInterceptorReqResOrdering?a.unshift(w.fulfilled,w.rejected):a.push(w.fulfilled,w.rejected)});const d=[];this.interceptors.response.forEach(function(w){d.push(w.fulfilled,w.rejected)});let m,y=0,h;if(!u){const S=[vo.bind(this),void 0];for(S.unshift(...a),S.push(...d),h=S.length,m=Promise.resolve(n);yvo.call(this,v)))}catch(c){m=Promise.reject(c)}break}}if(!m)try{m=vo.call(this,v)}catch(S){m=Promise.reject(S)}for(y=0,h=d.length;y{if(!r._listeners)return;let l=r._listeners.length;for(;l-- >0;)r._listeners[l](s);r._listeners=null}),this.promise.then=s=>{let l;const o=new Promise(a=>{r.subscribe(a),l=a}).then(s);return o.cancel=function(){r.unsubscribe(l)},o},t(function(l,o,a){r.reason||(r.reason=new as(l,o,a),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Kf(function(s){t=s}),cancel:t}}};function Xy(e){return function(n){return e.apply(null,n)}}function Yy(e){return g.isObject(e)&&e.isAxiosError===!0}const Ws={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,ContentTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,UnprocessableContent:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerReturnsAnUnknownError:520,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(Ws).forEach(([e,t])=>{Ws[t]===void 0&&(Ws[t]=e)});function Gf(e){const t=new pn(e),n=vf(pn.prototype.request,t);return g.extend(n,pn.prototype,t,{allOwnKeys:!0}),g.extend(n,t,null,{allOwnKeys:!0}),n.create=function(s){return Gf(kn(e,s))},n}const pe=Gf(is);pe.Axios=pn;pe.CanceledError=as;pe.CancelToken=Jy;pe.isCancel=Uf;pe.VERSION=xa;pe.toFormData=Ml;pe.AxiosError=T;pe.Cancel=pe.CanceledError;pe.all=function(t){return Promise.all(t)};pe.spread=Xy;pe.isAxiosError=Yy;pe.mergeConfig=kn;pe.AxiosHeaders=Le;pe.formToJSON=e=>If(g.isHTMLForm(e)?new FormData(e):e);pe.getAdapter=Qf.getAdapter;pe.HttpStatusCode=Ws;pe.default=pe;const{Axios:pg,AxiosError:mg,CanceledError:hg,isCancel:yg,CancelToken:gg,VERSION:xg,all:vg,Cancel:wg,isAxiosError:kg,spread:Sg,toFormData:Ng,AxiosHeaders:jg,HttpStatusCode:_g,formToJSON:Eg,getAdapter:Cg,mergeConfig:bg,create:Rg}=pe;function vl(){const{pathname:e}=window.location;return e.endsWith("/")?e:e+"/"}const re=pe.create({baseURL:vl(),timeout:12e4});re.interceptors.request.use(e=>{const t=localStorage.getItem("panelToken");return t&&(e.headers.Authorization=`Bearer ${t}`),e});re.interceptors.response.use(e=>e,e=>{var t;return((t=e.response)==null?void 0:t.status)===401&&(localStorage.removeItem("panelToken"),window.location.href=vl()),Promise.reject(e)});function Zy({onSuccess:e}){const[t,n]=O.useState(""),[r,s]=O.useState(!1),[l,o]=O.useState(""),[a,u]=O.useState(!1),d=async m=>{var y,h;m.preventDefault(),o(""),u(!0);try{const v=await re.post("/auth/login",{password:t});localStorage.setItem("panelToken",v.data.token),e()}catch(v){o(((h=(y=v.response)==null?void 0:y.data)==null?void 0:h.detail)||"登录失败")}finally{u(!1)}};return i.jsx("div",{className:"min-h-screen flex items-center justify-center p-4",children:i.jsxs("div",{className:"w-full max-w-md",children:[i.jsxs("div",{className:"text-center mb-8",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-purple-600/20 mb-4",children:i.jsx(Jr,{className:"w-10 h-10 text-purple-400"})}),i.jsx("h1",{className:"text-3xl font-bold text-white",children:"AGY2API"}),i.jsx("p",{className:"text-gray-400 mt-2",children:"Antigravity API 代理服务控制面板"})]}),i.jsxs("div",{className:"card",children:[i.jsx("h2",{className:"text-xl font-semibold mb-6 text-center",children:"登录控制面板"}),l&&i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg mb-4",children:l}),i.jsxs("form",{onSubmit:d,className:"space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-2",children:"密码"}),i.jsxs("div",{className:"relative",children:[i.jsx("input",{type:r?"text":"password",value:t,onChange:m=>n(m.target.value),className:"w-full px-4 py-3 bg-dark-800 border border-dark-600 rounded-lg text-white placeholder-gray-500 pr-12",placeholder:"请输入控制面板密码",required:!0}),i.jsx("button",{type:"button",onClick:()=>s(!r),className:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-300",children:r?i.jsx(Oh,{size:20}):i.jsx(Ph,{size:20})})]})]}),i.jsx("button",{type:"submit",disabled:a,className:"w-full btn btn-primary py-3 flex items-center justify-center disabled:opacity-50",children:a?i.jsx("span",{className:"animate-spin rounded-full h-5 w-5 border-b-2 border-white"}):"登录"})]})]})]})})}function Zr({type:e="info",title:t,children:n,onClose:r}){O.useEffect(()=>{const l=o=>{o.key==="Escape"&&(r==null||r())};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[r]);const s={success:{icon:i.jsx(qn,{size:20,className:"text-green-400"}),border:"border-green-500/40",iconBg:"bg-green-500/15"},error:{icon:i.jsx(pi,{size:20,className:"text-red-400"}),border:"border-red-500/40",iconBg:"bg-red-500/15"},info:{icon:i.jsx(Tr,{size:20,className:"text-blue-400"}),border:"border-blue-500/40",iconBg:"bg-blue-500/15"}}[e]||{};return i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60",onClick:r,children:i.jsxs("div",{className:`card max-w-md w-full border ${s.border} p-0 overflow-hidden`,onClick:l=>l.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-b border-dark-700",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:`p-1.5 rounded-lg ${s.iconBg}`,children:s.icon}),i.jsx("h3",{className:"text-sm font-semibold text-gray-200",children:t})]}),i.jsx("button",{onClick:r,className:"text-gray-400 hover:text-white",children:i.jsx(gf,{size:16})})]}),i.jsx("div",{className:"px-4 py-3 text-sm text-gray-300 max-h-[60vh] overflow-y-auto break-all",children:n}),i.jsx("div",{className:"px-4 py-3 border-t border-dark-700 text-right",children:i.jsx("button",{onClick:r,className:"btn btn-secondary text-xs px-4 py-1.5",children:"关闭"})})]})})}function eg(){const[e,t]=O.useState(!1),[n,r]=O.useState(!1),[s,l]=O.useState(""),[o,a]=O.useState(""),[u,d]=O.useState(!1),[m,y]=O.useState(""),[h,v]=O.useState(null),[S,w]=O.useState(!1),z=async()=>{var k,N;t(!0),v(null),l(""),y("");try{const j=await re.post("/auth/start",{});l(j.data.auth_url),v({type:"info",text:"已生成认证链接,请在新窗口完成 Google 授权"})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"获取认证链接失败"})}finally{t(!1)}},c=async()=>{var k,N;r(!0);try{const j=await re.post("/auth/callback",{});y(JSON.stringify(j.data.credentials,null,2)),v({type:"success",text:`认证成功!凭证已保存:${j.data.email||"未知邮箱"}`})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"获取凭证失败,请确认已完成授权"})}finally{r(!1)}},f=async()=>{var k,N;if(!o.trim()){v({type:"error",text:"请粘贴完整的回调URL"});return}r(!0);try{const j=await re.post("/auth/callback-url",{callback_url:o.trim()});y(JSON.stringify(j.data.credentials,null,2)),v({type:"success",text:`认证成功!凭证已保存:${j.data.email||"未知邮箱"}`})}catch(j){v({type:"error",text:((N=(k=j.response)==null?void 0:k.data)==null?void 0:N.detail)||"从回调URL获取凭证失败"})}finally{r(!1)}},p=()=>{navigator.clipboard.writeText(s),w(!0),setTimeout(()=>w(!1),1500)},x=()=>{const k=new Blob([m],{type:"application/json"}),N=URL.createObjectURL(k),j=document.createElement("a");j.href=N,j.download="antigravity-credentials.json",j.click(),URL.revokeObjectURL(N)};return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-gradient-to-br from-orange-900/30 to-orange-800/10 border border-orange-700/30 rounded-xl p-5",children:[i.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[i.jsx(Jr,{className:"w-5 h-5 text-orange-400"}),i.jsx("h3",{className:"text-lg font-semibold text-orange-400",children:"Antigravity 认证模式"})]}),i.jsx("p",{className:"text-sm text-gray-400",children:"通过 Google OAuth 获取 Antigravity 凭证。授权成功后系统会自动获取 Project ID 和订阅等级,并保存凭证到数据库。"})]}),h&&i.jsx(Zr,{type:h.type,title:h.type==="success"?"操作成功":h.type==="error"?"操作失败":"提示",onClose:()=>v(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:h.text})}),i.jsxs("button",{onClick:z,disabled:e,className:"btn btn-primary flex items-center gap-2 disabled:opacity-50",children:[e?i.jsx(gt,{className:"animate-spin",size:18}):i.jsx(Jr,{size:18}),"获取 Antigravity 认证链接"]}),s&&i.jsxs("div",{className:"card space-y-4",children:[i.jsx("h3",{className:"font-semibold",children:"认证链接"}),i.jsxs("div",{className:"bg-dark-800 border border-purple-500/30 rounded-lg p-4 flex items-center justify-between gap-3",children:[i.jsxs("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"text-purple-400 hover:text-purple-300 break-all text-sm flex items-center gap-1",children:["点击此链接进行 Google 认证 ",i.jsx(yf,{size:14})]}),i.jsxs("button",{onClick:p,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1 flex-shrink-0",children:[S?i.jsx(mf,{size:14}):i.jsx(Ch,{size:14}),S?"已复制":"复制"]})]}),i.jsxs("div",{className:"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4 text-sm text-gray-400",children:[i.jsx("p",{className:"font-medium text-blue-400 mb-2",children:"使用说明"}),i.jsxs("ol",{className:"list-decimal list-inside space-y-1",children:[i.jsx("li",{children:"点击上方认证链接,在新窗口中完成 Google 账号授权"}),i.jsx("li",{children:"授权成功后会跳转到 localhost 显示成功页面"}),i.jsx("li",{children:"关闭 OAuth 窗口,返回本页面"}),i.jsx("li",{children:'点击下方"获取凭证"按钮完成流程'})]})]}),i.jsxs("div",{className:"border border-dark-600 rounded-lg",children:[i.jsxs("button",{onClick:()=>d(!u),className:"w-full flex items-center justify-between px-4 py-3 text-sm text-gray-400 hover:text-gray-200",children:[i.jsx("span",{children:"🚀 无法回源?试试快捷方式(粘贴回调URL)"}),i.jsx(hf,{size:16,className:`transition-transform ${u?"rotate-180":""}`})]}),u&&i.jsxs("div",{className:"px-4 pb-4 space-y-3",children:[i.jsx("p",{className:"text-xs text-gray-500",children:"适用场景:云服务器/VPS、Docker 容器、防火墙阻止回调端口等。 完成 Google 授权后,复制浏览器地址栏的完整 URL 粘贴到下方。"}),i.jsx("textarea",{value:o,onChange:k=>a(k.target.value),placeholder:"http://localhost:11451/?state=xxx&code=xxx&scope=xxx...",className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500",rows:3}),i.jsxs("button",{onClick:f,disabled:n,className:"btn btn-secondary text-sm flex items-center gap-2 disabled:opacity-50",children:[n&&i.jsx(gt,{className:"animate-spin",size:14}),"从回调URL获取凭证"]})]})]}),i.jsxs("button",{onClick:c,disabled:n,className:"btn btn-primary flex items-center gap-2 disabled:opacity-50",children:[n&&i.jsx(gt,{className:"animate-spin",size:18}),"获取 Antigravity 凭证"]})]}),m&&i.jsxs("div",{className:"card space-y-4",children:[i.jsx("h3",{className:"font-semibold",children:"凭证内容"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-4 text-xs text-gray-300 overflow-x-auto max-h-96 overflow-y-auto",children:m}),i.jsx("button",{onClick:x,className:"btn btn-secondary text-sm",children:"下载凭证文件"})]})]})}function Nt({value:e,onChange:t,options:n,className:r="",disabled:s=!1}){const[l,o]=O.useState(!1),[a,u]=O.useState({dropUp:!1,maxHeight:240}),d=O.useRef(null);O.useEffect(()=>{if(!l)return;const h=S=>{d.current&&!d.current.contains(S.target)&&o(!1)},v=S=>{S.key==="Escape"&&o(!1)};return document.addEventListener("mousedown",h),document.addEventListener("touchstart",h),document.addEventListener("keydown",v),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("touchstart",h),document.removeEventListener("keydown",v)}},[l]);const m=()=>{if(!s){if(!l&&d.current){const h=d.current.getBoundingClientRect(),v=window.innerHeight-h.bottom,S=h.top,w=Math.min(n.length*40+10,240);v>=w||v>=S?u({dropUp:!1,maxHeight:Math.min(v-8,w)}):u({dropUp:!0,maxHeight:Math.min(S-8,w)})}o(h=>!h)}},y=n.find(h=>h.value===e);return i.jsxs("div",{ref:d,className:`relative ${r}`,children:[i.jsxs("button",{type:"button",disabled:s,"aria-haspopup":"listbox","aria-expanded":l,onClick:m,className:`w-full flex items-center justify-between gap-1 text-left bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm focus:outline-none focus:ring-2 focus:ring-purple-500/50 ${l?"ring-2 ring-purple-500/50 border-purple-500/50":""} ${s?"opacity-40 cursor-not-allowed":"cursor-pointer"}`,children:[i.jsx("span",{className:"truncate",children:y?y.label:""}),i.jsx(hf,{size:14,className:`shrink-0 text-gray-400 transition-transform duration-200 ${l?"rotate-180":""}`})]}),l&&i.jsx("div",{role:"listbox",style:{maxHeight:Math.max(a.maxHeight,96)},className:`absolute left-0 right-0 z-20 overflow-y-auto rounded-lg border border-dark-600 bg-dark-800 py-1 shadow-xl ${a.dropUp?"bottom-full mb-1":"top-full mt-1"}`,children:n.map(h=>i.jsxs("button",{type:"button",role:"option","aria-selected":h.value===e,onClick:()=>{t(h.value),o(!1)},className:`flex w-full items-center justify-between gap-2 px-3 py-2.5 sm:py-2 text-left text-xs sm:text-sm ${h.value===e?"bg-purple-600/20 text-purple-300":"text-gray-200 hover:bg-dark-700"}`,children:[i.jsx("span",{className:"truncate",children:h.label}),h.value===e&&i.jsx(mf,{size:14,className:"shrink-0"})]},h.value))})]})}function tg(){var tt,U,he,ct,vt,ir,ds,Dt,wa;const[e,t]=O.useState([]),[n,r]=O.useState({total:0,normal:0,disabled:0}),[s,l]=O.useState(0),[o,a]=O.useState(1),[u,d]=O.useState(20),[m,y]=O.useState("all"),[h,v]=O.useState("all"),[S,w]=O.useState("all"),[z,c]=O.useState("all"),[f,p]=O.useState(!0),[x,k]=O.useState(new Set),[N,j]=O.useState(null),[E,F]=O.useState(null),[P,Q]=O.useState(new Set),[le,ke]=O.useState(Date.now()/1e3),[I,ut]=O.useState(null),[Y,Se]=O.useState({});O.useEffect(()=>{const _=setInterval(()=>ke(Date.now()/1e3),1e3);return()=>clearInterval(_)},[]);const R=O.useCallback(async()=>{var _,M;p(!0);try{const $=(o-1)*u,B=await re.get("/creds/status",{params:{offset:$,limit:u,status_filter:m,error_code_filter:h,cooldown_filter:S,tier_filter:z}});t(B.data.items),l(B.data.total),r(B.data.stats||{total:0,normal:0,disabled:0}),k(new Set)}catch($){A("error",((M=(_=$.response)==null?void 0:_.data)==null?void 0:M.detail)||"加载凭证失败")}finally{p(!1)}},[o,u,m,h,S,z]);O.useEffect(()=>{R()},[R]);const A=O.useCallback((_,M,$)=>{j({type:_,text:M,title:$||(_==="success"?"操作成功":_==="error"?"操作失败":"提示")})},[]),D=(_,M)=>{Q($=>{const B=new Set($);return M?B.add(_):B.delete(_),B})},W=async(_,M)=>{var $,B;D(_,!0);try{const K=await re.post("/creds/action",{email:_,action:M});A("success",K.data.message),R()}catch(K){A("error",((B=($=K.response)==null?void 0:$.data)==null?void 0:B.detail)||"操作失败")}finally{D(_,!1)}},H=async _=>{var M,$,B;if(x.size!==0){D("__batch__",!0);try{const K=await re.post("/creds/batch-action",{action:_,emails:Array.from(x)});A((M=K.data.errors)!=null&&M.length?"error":"success",K.data.message),R()}catch(K){A("error",((B=($=K.response)==null?void 0:$.data)==null?void 0:B.detail)||"批量操作失败")}finally{D("__batch__",!1)}}},Ne=async _=>{var M,$,B,K,ce,Ae;D(_,!0);try{const be=await re.post(`/creds/verify-project/${encodeURIComponent(_)}`);be.data.success?A("success",`Project=${be.data.project_id}, Tier=${be.data.subscription_tier}`,`检验成功: ${_}`):A("error",be.data.message||be.data.error||"检验失败",`检验失败: ${_}`),R()}catch(be){A("error",(($=(M=be.response)==null?void 0:M.data)==null?void 0:$.detail)||((K=(B=be.response)==null?void 0:B.data)==null?void 0:K.error)||((Ae=(ce=be.response)==null?void 0:ce.data)==null?void 0:Ae.message)||"检验失败",`检验失败: ${_}`)}finally{D(_,!1)}},b=async _=>{var M,$;D(_,!0);try{const B=await re.post(`/creds/test/${encodeURIComponent(_)}`);A("success",B.data.message||(B.status===429?"凭证被限流(429)但有效":"凭证测试通过"),`测试成功: ${_}`),R()}catch(B){const K=((M=B.response)==null?void 0:M.data)||{},ce=($=B.response)==null?void 0:$.status,Ae=K.error||K.detail||K.message||"测试失败";A(ce===429?"info":"error",`HTTP ${ce} +${Ae}`,`测试失败: ${_}`),R()}finally{D(_,!1)}},ee=async _=>{ut({email:_}),D(_,!0);try{const M=await re.get(`/creds/quota/${encodeURIComponent(_)}`);if(M.data.success){const $=X(M.data.quotaGroups||[]);Se(B=>({...B,[_]:$}))}else Se($=>({...$,[_]:{error:M.data.error||"获取额度失败"}}))}catch(M){Se($=>{var B,K,ce,Ae;return{...$,[_]:{error:((K=(B=M.response)==null?void 0:B.data)==null?void 0:K.detail)||((Ae=(ce=M.response)==null?void 0:ce.data)==null?void 0:Ae.error)||"获取额度失败"}}})}finally{D(_,!1)}},X=_=>{const M={claude:{remaining:0,count:0,resetTime:""},gemini:{remaining:0,count:0,resetTime:""}};return _.forEach($=>{const K=($.displayName||"").toLowerCase().includes("claude")?M.claude:M.gemini;K.count+=1;let ce=null,Ae="";if(($.buckets||[]).forEach(be=>{const ka=(be.remainingFraction||0)*100;(ce===null||ka1&&(M.claude.remaining=Math.round(M.claude.remaining/M.claude.count)),M.gemini.count>1&&(M.gemini.remaining=Math.round(M.gemini.remaining/M.gemini.count)),M},V=_=>_>=80?{bar:"bg-green-500",text:"text-green-400"}:_>=40?{bar:"bg-yellow-500",text:"text-yellow-400"}:_>=20?{bar:"bg-orange-500",text:"text-orange-400"}:{bar:"bg-red-500",text:"text-red-400"},je=async _=>{var M,$;try{const B=await re.get(`/creds/export/${encodeURIComponent(_)}`,{responseType:"blob"}),K=URL.createObjectURL(B.data),ce=document.createElement("a");ce.href=K,ce.download=`${_}.json`,ce.click(),URL.revokeObjectURL(K),A("success",`已导出 ${_}.json`)}catch(B){A("error",(($=(M=B.response)==null?void 0:M.data)==null?void 0:$.detail)||"导出失败")}},jn=async()=>{var _,M;D("__batch__",!0);try{const $=await re.get("/creds/download-all",{responseType:"blob"}),B=URL.createObjectURL($.data),K=document.createElement("a");K.href=B,K.download="antigravity_credentials.zip",K.click(),URL.revokeObjectURL(B)}catch($){A("error",((M=(_=$.response)==null?void 0:_.data)==null?void 0:M.detail)||"下载失败")}finally{D("__batch__",!1)}},us=async _=>{var M,$;try{const B=await re.get(`/creds/errors/${encodeURIComponent(_)}`);F(B.data)}catch(B){A("error",(($=(M=B.response)==null?void 0:M.data)==null?void 0:$.detail)||"获取错误信息失败")}},Fl=_=>{k(M=>{const $=new Set(M);return $.has(_)?$.delete(_):$.add(_),$})},Qe=()=>{x.size===e.length?k(new Set):k(new Set(e.map(_=>_.email)))},Ue=Math.max(1,Math.ceil(s/u)),et=_=>_?new Date(_*1e3).toLocaleString():"-",cs=_=>{const M=Object.entries(_||{}).filter(([,be])=>be>le);if(!M.length)return null;const B=Math.max(...M.map(([,be])=>be))-le,K=Math.floor(B/3600),ce=Math.floor(B%3600/60),Ae=Math.floor(B%60);return K>0?`${K}h${ce}m`:ce>0?`${ce}m${Ae}s`:`${Ae}s`},or=_=>_==="ultra"?"bg-red-500/10 text-red-400 border-red-500/30":_==="pro"?"bg-amber-500/10 text-amber-400 border-amber-500/30":"bg-blue-500/10 text-blue-400 border-blue-500/30";return i.jsxs("div",{className:"space-y-4 sm:space-y-6",children:[N&&i.jsx(Zr,{type:N.type,title:N.title,onClose:()=>j(null),children:i.jsx("span",{className:"whitespace-pre-wrap",children:N.text})}),i.jsxs("div",{className:"grid grid-cols-3 gap-2 sm:gap-4",children:[i.jsxs("div",{className:"bg-dark-800 border border-dark-600 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-white",children:n.total}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"总计"})]}),i.jsxs("div",{className:"bg-emerald-900/20 border border-emerald-700/30 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-emerald-400",children:n.normal}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"正常"})]}),i.jsxs("div",{className:"bg-red-900/20 border border-red-700/30 rounded-xl p-3 sm:p-4 text-center",children:[i.jsx("div",{className:"text-xl sm:text-2xl font-bold text-red-400",children:n.disabled}),i.jsx("div",{className:"text-xs text-gray-500 mt-0.5",children:"禁用"})]})]}),i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i.jsxs("button",{onClick:R,disabled:f,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:f?"animate-spin":""}),"刷新状态"]}),i.jsxs("button",{onClick:jn,disabled:P.has("__batch__"),className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Tu,{size:15}),"打包导出"]})]}),i.jsxs("div",{className:"grid grid-cols-2 sm:flex sm:flex-wrap gap-2 sm:gap-3 text-sm",children:[i.jsx(Nt,{value:m,onChange:_=>{y(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"全部凭证"},{value:"enabled",label:"仅启用"},{value:"disabled",label:"仅禁用"}]}),i.jsx(Nt,{value:h,onChange:_=>{v(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"错误码: 全部"},{value:"none",label:"无错误"},{value:"400",label:"400"},{value:"403",label:"403"},{value:"429",label:"429"},{value:"500",label:"500"}]}),i.jsx(Nt,{value:S,onChange:_=>{w(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"冷却: 全部"},{value:"in_cooldown",label:"CD中"},{value:"no_cooldown",label:"未CD"}]}),i.jsx(Nt,{value:z,onChange:_=>{c(_),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"Tier: 全部"},{value:"free",label:"Free"},{value:"pro",label:"Pro"},{value:"ultra",label:"Ultra"}]}),i.jsx(Nt,{value:u,onChange:_=>{d(Number(_)),a(1)},className:"w-full sm:w-32",options:[20,50,100,200,500,1e3].map(_=>({value:_,label:`每页 ${_}`}))})]}),i.jsx("div",{className:"card p-3 sm:p-4",children:i.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2 text-sm",children:[i.jsxs("label",{className:"flex items-center gap-2 text-gray-400 cursor-pointer select-none",children:[i.jsx("input",{type:"checkbox",checked:x.size===e.length&&e.length>0,onChange:Qe,className:"accent-purple-600 w-4 h-4"}),"全选"]}),i.jsxs("span",{className:"text-gray-500 text-xs",children:["已选 ",x.size," 项"]}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.jsx("button",{onClick:()=>H("enable"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"批量启用"}),i.jsx("button",{onClick:()=>H("disable"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"批量禁用"}),i.jsx("button",{onClick:()=>H("delete"),disabled:x.size===0||P.has("__batch__"),className:"btn btn-danger text-xs px-3 py-1.5 disabled:opacity-40",children:"批量删除"})]})]})}),f?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):e.length===0?i.jsx("div",{className:"card text-center py-12 text-gray-500 text-sm",children:"没有凭证。请先通过 OAuth 认证或批量导入添加凭证。"}):i.jsx("div",{className:"grid gap-3 sm:gap-4 grid-cols-1 md:grid-cols-2 xl:grid-cols-3",children:e.map(_=>{var B;const M=cs(_.model_cooldowns),$=P.has(_.email);return i.jsxs("div",{className:`card p-3 sm:p-4 space-y-3 transition-colors ${_.disabled?"border-red-500/30":""}`,children:[i.jsxs("div",{className:"flex items-start gap-2.5",children:[i.jsx("input",{type:"checkbox",checked:x.has(_.email),onChange:()=>Fl(_.email),className:"accent-purple-600 w-4 h-4 flex-shrink-0 mt-0.5"}),i.jsxs("div",{className:"flex-1 min-w-0 space-y-1.5",children:[i.jsx("div",{className:"text-sm font-medium text-white break-all leading-snug",children:_.email}),i.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[i.jsx("span",{className:`text-xs px-2 py-0.5 rounded-full border ${or(_.tier)}`,children:_.tier||"pro"}),_.disabled?i.jsxs("span",{className:"text-red-400 text-xs flex items-center gap-1",children:[i.jsx(Pu,{size:12})," 禁用"]}):i.jsxs("span",{className:"text-emerald-400 text-xs flex items-center gap-1",children:[i.jsx(qn,{size:12})," 启用"]})]})]})]}),i.jsxs("div",{className:"space-y-1 text-xs",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[M?i.jsxs("span",{className:"text-cyan-400 flex items-center gap-1",children:[i.jsx($h,{size:12})," CD ",M]}):i.jsxs("span",{className:"text-gray-600 flex items-center gap-1",children:[i.jsx(mi,{size:12})," 无CD"]}),(B=_.error_codes)!=null&&B.length?i.jsxs("button",{onClick:()=>us(_.email),className:"text-red-400 hover:text-red-300 flex items-center gap-1",children:[i.jsx(pi,{size:12}),_.error_codes.join(",")]}):i.jsxs("span",{className:"text-gray-600 flex items-center gap-1",children:[i.jsx(qn,{size:12})," 无错误"]})]}),i.jsxs("div",{className:"flex items-center gap-1 text-gray-500",children:[i.jsx(mi,{size:12,className:"flex-shrink-0"}),i.jsx("span",{className:"truncate",title:et(_.last_success),children:et(_.last_success)})]})]}),i.jsx("div",{className:"grid grid-cols-3 gap-1.5 pt-1 border-t border-dark-700",children:$?i.jsx("div",{className:"col-span-3 flex items-center justify-center py-1.5",children:i.jsx(gt,{size:16,className:"animate-spin text-purple-400"})}):i.jsxs(i.Fragment,{children:[i.jsxs("button",{onClick:()=>Ne(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"检验 Project ID / Tier(可修复 403)",children:[i.jsx(Uh,{size:13})," 检验"]}),i.jsxs("button",{onClick:()=>b(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"测试凭证",children:[i.jsx(xf,{size:13})," 测试"]}),i.jsxs("button",{onClick:()=>ee(_.email),disabled:_.disabled,className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1 disabled:opacity-40",title:"查看额度",children:[i.jsx(pf,{size:13})," 额度"]}),i.jsxs("button",{onClick:()=>je(_.email),className:"text-xs px-2 py-1.5 rounded-lg bg-dark-700 hover:bg-dark-600 text-gray-300 flex items-center justify-center gap-1",title:"导出凭证(邮箱.json)",children:[i.jsx(Tu,{size:13})," 导出"]}),i.jsxs("button",{onClick:()=>W(_.email,_.disabled?"enable":"disable"),className:`text-xs px-2 py-1.5 rounded-lg flex items-center justify-center gap-1 ${_.disabled?"bg-emerald-600/20 hover:bg-emerald-600/30 text-emerald-400":"bg-amber-600/20 hover:bg-amber-600/30 text-amber-400"}`,children:[_.disabled?i.jsx(qn,{size:13}):i.jsx(Pu,{size:13}),_.disabled?"启用":"禁用"]}),i.jsxs("button",{onClick:()=>W(_.email,"delete"),className:"text-xs px-2 py-1.5 rounded-lg bg-red-600/10 hover:bg-red-600/20 text-red-400 flex items-center justify-center gap-1",title:"删除",children:[i.jsx(yl,{size:13})," 删除"]})]})})]},_.email)})}),s>u&&i.jsxs("div",{className:"flex items-center justify-between text-sm",children:[i.jsxs("span",{className:"text-gray-500 text-xs sm:text-sm",children:["共 ",s," 个凭证,第 ",o,"/",Ue," 页"]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>a(_=>Math.max(1,_-1)),disabled:o<=1,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"上一页"}),i.jsxs("span",{className:"text-gray-400 text-xs sm:text-sm",children:[o," / ",Ue]}),i.jsx("button",{onClick:()=>a(_=>Math.min(Ue,_+1)),disabled:o>=Ue,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"下一页"})]})]}),I&&i.jsx(Zr,{type:"info",title:`额度信息 - ${I.email}`,onClose:()=>ut(null),children:P.has(I.email)?i.jsxs("div",{className:"flex items-center justify-center py-6 text-gray-500",children:[i.jsx(Qn,{size:16,className:"animate-spin mr-2"}),"加载额度中..."]}):(tt=Y[I.email])!=null&&tt.error?i.jsx("div",{className:"text-center py-4 text-red-400",children:Y[I.email].error}):Y[I.email]?i.jsxs("div",{className:"space-y-3",children:[((U=Y[I.email].claude)==null?void 0:U.count)>0&&i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[i.jsx("span",{className:"text-purple-400 text-sm",children:"Claude"}),i.jsxs("span",{className:`text-sm font-medium ${V(Y[I.email].claude.remaining).text}`,children:[Y[I.email].claude.remaining.toFixed(1),"%"]})]}),i.jsx("div",{className:"bg-dark-600 rounded-full h-2",children:i.jsx("div",{className:`h-2 rounded-full ${V(Y[I.email].claude.remaining).bar}`,style:{width:`${Math.min(Y[I.email].claude.remaining,100)}%`}})})]}),((he=Y[I.email].gemini)==null?void 0:he.count)>0&&i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[i.jsx("span",{className:"text-cyan-400 text-sm",children:"Gemini"}),i.jsxs("span",{className:`text-sm font-medium ${V(Y[I.email].gemini.remaining).text}`,children:[Y[I.email].gemini.remaining.toFixed(1),"%"]})]}),i.jsx("div",{className:"bg-dark-600 rounded-full h-2",children:i.jsx("div",{className:`h-2 rounded-full ${V(Y[I.email].gemini.remaining).bar}`,style:{width:`${Math.min(Y[I.email].gemini.remaining,100)}%`}})})]}),!((ct=Y[I.email].claude)!=null&&ct.count)&&!((vt=Y[I.email].gemini)!=null&&vt.count)&&i.jsx("div",{className:"text-center py-3 text-gray-500",children:"暂无额度数据"}),(((ir=Y[I.email].claude)==null?void 0:ir.resetTime)||((ds=Y[I.email].gemini)==null?void 0:ds.resetTime))&&i.jsxs("div",{className:"text-xs text-gray-500 text-right pt-1",children:["重置:"," ",((Dt=Y[I.email].claude)==null?void 0:Dt.resetTime)||((wa=Y[I.email].gemini)==null?void 0:wa.resetTime)]}),i.jsxs("button",{onClick:()=>ee(I.email),disabled:P.has(I.email),className:"w-full text-xs text-gray-400 hover:text-white py-2 rounded-lg bg-dark-700 hover:bg-dark-600 flex items-center justify-center gap-1.5 disabled:opacity-50",children:[i.jsx(Qn,{size:12,className:P.has(I.email)?"animate-spin":""}),"刷新额度"]})]}):i.jsx("div",{className:"text-center py-4 text-gray-500",children:"加载中..."})}),E&&i.jsx("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center p-4 z-50",onClick:()=>F(null),children:i.jsxs("div",{className:"bg-dark-900 border border-dark-600 rounded-xl max-w-2xl w-full max-h-[80vh] overflow-hidden flex flex-col",onClick:_=>_.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between px-4 sm:px-5 py-4 border-b border-dark-700",children:[i.jsxs("h3",{className:"font-semibold flex items-center gap-2 text-sm sm:text-base break-all",children:[i.jsx(pi,{size:16,className:"text-red-400 flex-shrink-0"}),"错误详情 - ",E.email]}),i.jsx("button",{onClick:()=>F(null),className:"text-gray-400 hover:text-white flex-shrink-0",children:"✕"})]}),i.jsxs("div",{className:"p-4 sm:p-5 overflow-y-auto space-y-4",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-sm text-gray-400 mb-1",children:"错误码"}),i.jsx("div",{className:"text-red-400 text-sm",children:(E.error_codes||[]).join(", ")||"无"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-sm text-gray-400 mb-1",children:"错误信息"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-3 sm:p-4 text-xs text-gray-300 overflow-auto max-h-56 whitespace-pre-wrap",children:JSON.stringify(E.error_messages,null,2)})]}),i.jsxs("div",{className:"flex flex-wrap gap-2",children:[i.jsx("button",{onClick:()=>{Ne(E.email),F(null)},className:"btn btn-primary text-sm",children:"检验修复(重新获取Project ID)"}),i.jsx("button",{onClick:()=>{b(E.email),F(null)},className:"btn btn-secondary text-sm",children:"测试凭证"})]})]})]})})]})}function ng(){var S;const[e,t]=O.useState([]),[n,r]=O.useState(!1),[s,l]=O.useState(null),[o,a]=O.useState(!1),u=O.useRef(null),d=w=>{const z=Array.from(w).filter(c=>c.name.endsWith(".json")||c.name.endsWith(".zip"));t(c=>{const f=new Set(c.map(p=>p.name));return[...c,...z.filter(p=>!f.has(p.name))]}),l(null)},m=w=>{t(z=>z.filter(c=>c.name!==w))},y=async()=>{var w,z;if(e.length!==0){r(!0),l(null);try{const c=new FormData;e.forEach(p=>c.append("files",p));const f=await re.post("/creds/upload",c,{headers:{"Content-Type":"multipart/form-data"}});l(f.data)}catch(c){l({error:((z=(w=c.response)==null?void 0:w.data)==null?void 0:z.detail)||"上传失败"})}finally{r(!1)}}},h=(s==null?void 0:s.uploaded_count)||0,v=(s==null?void 0:s.total_count)||0;return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"bg-gradient-to-br from-emerald-900/30 to-emerald-800/10 border border-emerald-700/30 rounded-xl p-5",children:[i.jsx("h3",{className:"text-lg font-semibold text-emerald-400 mb-2",children:"批量导入凭证"}),i.jsx("p",{className:"text-sm text-gray-400",children:"支持批量导入 Antigravity 凭证(.json 或包含 JSON 文件的 .zip)。"}),i.jsxs("div",{className:"mt-3 text-xs text-gray-500 bg-dark-800/60 rounded-lg p-3",children:[i.jsx("p",{className:"mb-1 font-medium text-gray-400",children:"规范 JSON 格式:"}),i.jsx("pre",{className:"text-emerald-300/80 whitespace-pre-wrap font-mono",children:`{ "refresh_token": "必填", "email": "可选,缺失自动获取", "tier": "可选,缺失自动获取", "project_id": "可选,缺失自动获取" -}`}),i.jsx("p",{className:"mt-2",children:"refresh_token 无效的凭证将导入失败;同邮箱凭证自动去重(覆盖更新)。"})]})]}),i.jsxs("div",{className:`border-2 border-dashed rounded-xl p-10 text-center cursor-pointer transition-colors ${o?"border-purple-500 bg-purple-500/10":"border-dark-600 hover:border-dark-500"}`,onClick:()=>{var w;return(w=u.current)==null?void 0:w.click()},onDragOver:w=>{w.preventDefault(),a(!0)},onDragLeave:()=>a(!1),onDrop:w=>{w.preventDefault(),a(!1),d(w.dataTransfer.files)},children:[i.jsx(mi,{className:"mx-auto text-purple-400 mb-3",size:32}),i.jsx("p",{className:"text-gray-300",children:"点击选择文件或拖拽文件到此区域"}),i.jsx("p",{className:"text-gray-500 text-sm mt-1",children:"支持 .json 和 .zip 格式,ZIP 会自动提取其中的 JSON 凭证"}),i.jsx("input",{ref:u,type:"file",multiple:!0,accept:".json,.zip",className:"hidden",onChange:w=>{d(w.target.files),w.target.value=""}})]}),e.length>0&&i.jsxs("div",{className:"card space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("h4",{className:"text-sm font-medium text-gray-300",children:["已选择 ",e.length," 个文件"]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsxs("button",{onClick:y,disabled:n,className:"btn btn-primary text-sm flex items-center gap-1.5 disabled:opacity-50",children:[n?i.jsx(gt,{size:14,className:"animate-spin"}):i.jsx(mi,{size:14}),n?"上传中...":"上传文件"]}),i.jsx("button",{onClick:()=>t([]),disabled:n,className:"btn btn-secondary text-sm",children:"清空列表"})]})]}),i.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto",children:e.map(w=>i.jsxs("div",{className:"flex items-center justify-between bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-sm",children:[i.jsxs("div",{className:"flex items-center gap-2 text-gray-300 min-w-0",children:[i.jsx(Ph,{size:15,className:"text-purple-400 flex-shrink-0"}),i.jsx("span",{className:"truncate",children:w.name})]}),i.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[i.jsxs("span",{className:"text-gray-500 text-xs",children:[(w.size/1024).toFixed(1)," KB"]}),i.jsx("button",{onClick:()=>m(w.name),className:"text-gray-500 hover:text-red-400",children:i.jsx(yf,{size:14})})]})]},w.name))})]}),s&&i.jsx("div",{className:"card space-y-3",children:s.error?i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg",children:s.error}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"bg-green-500/10 border border-green-500/30 text-green-400 px-4 py-3 rounded-lg flex items-center gap-2",children:[i.jsx(qn,{size:16}),s.message||`上传完成: 成功 ${h}/${v} 个文件`]}),((S=s.results)==null?void 0:S.some(w=>w.status==="error"))&&i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("div",{className:"text-sm text-gray-400",children:"失败详情:"}),s.results.filter(w=>w.status==="error").map((w,z)=>i.jsxs("div",{className:"bg-red-500/10 border border-red-500/20 text-red-400 text-xs px-3 py-2 rounded-lg",children:[i.jsx("span",{className:"font-medium",children:w.filename}),": ",w.message]},z))]})]})})]})}const ng=[{title:"服务器配置",fields:[{key:"host",label:"服务器主机地址",type:"text",note:"服务器监听的主机地址,0.0.0.0表示监听所有接口(重启生效)"},{key:"port",label:"服务器端口",type:"number",note:"服务器监听的端口号(重启生效)"},{key:"api_password",label:"API 访问密码",type:"text",note:"聊天API访问密码,用于 OpenAI / Gemini / Claude 端点认证"},{key:"panel_password",label:"控制面板密码",type:"text",note:"控制面板访问密码"}]},{title:"IP 白名单",fields:[{key:"ip_whitelist_enabled",label:"启用 IP 白名单",type:"bool",note:"开启后仅白名单内的 IP 可访问面板和 API,其余 IP 直接 403。留空列表或关闭开关则不限制。保存后立即生效(热更新)"},{key:"ip_whitelist",label:"IP 白名单列表",type:"textarea",showIf:e=>!!e.ip_whitelist_enabled,note:"每行一条,支持单个 IP、CIDR 网段、起止范围(- 或 ~ 分隔),IPv4 / IPv6 均可",placeholder:`例如: +}`}),i.jsx("p",{className:"mt-2",children:"refresh_token 无效的凭证将导入失败;同邮箱凭证自动去重(覆盖更新)。"})]})]}),i.jsxs("div",{className:`border-2 border-dashed rounded-xl p-10 text-center cursor-pointer transition-colors ${o?"border-purple-500 bg-purple-500/10":"border-dark-600 hover:border-dark-500"}`,onClick:()=>{var w;return(w=u.current)==null?void 0:w.click()},onDragOver:w=>{w.preventDefault(),a(!0)},onDragLeave:()=>a(!1),onDrop:w=>{w.preventDefault(),a(!1),d(w.dataTransfer.files)},children:[i.jsx(hi,{className:"mx-auto text-purple-400 mb-3",size:32}),i.jsx("p",{className:"text-gray-300",children:"点击选择文件或拖拽文件到此区域"}),i.jsx("p",{className:"text-gray-500 text-sm mt-1",children:"支持 .json 和 .zip 格式,ZIP 会自动提取其中的 JSON 凭证"}),i.jsx("input",{ref:u,type:"file",multiple:!0,accept:".json,.zip",className:"hidden",onChange:w=>{d(w.target.files),w.target.value=""}})]}),e.length>0&&i.jsxs("div",{className:"card space-y-3",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("h4",{className:"text-sm font-medium text-gray-300",children:["已选择 ",e.length," 个文件"]}),i.jsxs("div",{className:"flex gap-2",children:[i.jsxs("button",{onClick:y,disabled:n,className:"btn btn-primary text-sm flex items-center gap-1.5 disabled:opacity-50",children:[n?i.jsx(gt,{size:14,className:"animate-spin"}):i.jsx(hi,{size:14}),n?"上传中...":"上传文件"]}),i.jsx("button",{onClick:()=>t([]),disabled:n,className:"btn btn-secondary text-sm",children:"清空列表"})]})]}),i.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto",children:e.map(w=>i.jsxs("div",{className:"flex items-center justify-between bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-sm",children:[i.jsxs("div",{className:"flex items-center gap-2 text-gray-300 min-w-0",children:[i.jsx(Th,{size:15,className:"text-purple-400 flex-shrink-0"}),i.jsx("span",{className:"truncate",children:w.name})]}),i.jsxs("div",{className:"flex items-center gap-3 flex-shrink-0",children:[i.jsxs("span",{className:"text-gray-500 text-xs",children:[(w.size/1024).toFixed(1)," KB"]}),i.jsx("button",{onClick:()=>m(w.name),className:"text-gray-500 hover:text-red-400",children:i.jsx(gf,{size:14})})]})]},w.name))})]}),s&&i.jsx("div",{className:"card space-y-3",children:s.error?i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg",children:s.error}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"bg-green-500/10 border border-green-500/30 text-green-400 px-4 py-3 rounded-lg flex items-center gap-2",children:[i.jsx(qn,{size:16}),s.message||`上传完成: 成功 ${h}/${v} 个文件`]}),((S=s.results)==null?void 0:S.some(w=>w.status==="error"))&&i.jsxs("div",{className:"space-y-1.5",children:[i.jsx("div",{className:"text-sm text-gray-400",children:"失败详情:"}),s.results.filter(w=>w.status==="error").map((w,z)=>i.jsxs("div",{className:"bg-red-500/10 border border-red-500/20 text-red-400 text-xs px-3 py-2 rounded-lg",children:[i.jsx("span",{className:"font-medium",children:w.filename}),": ",w.message]},z))]})]})})]})}const rg=[{title:"服务器配置",fields:[{key:"host",label:"服务器主机地址",type:"text",note:"服务器监听的主机地址,0.0.0.0表示监听所有接口(重启生效)"},{key:"port",label:"服务器端口",type:"number",note:"服务器监听的端口号(重启生效)"},{key:"api_password",label:"API 访问密码",type:"text",note:"聊天API访问密码,用于 OpenAI / Gemini / Claude 端点认证"},{key:"panel_password",label:"控制面板密码",type:"text",note:"控制面板访问密码"}]},{title:"IP 白名单",fields:[{key:"ip_whitelist_enabled",label:"启用 IP 白名单",type:"bool",note:"开启后仅白名单内的 IP 可访问面板和 API,其余 IP 直接 403。留空列表或关闭开关则不限制。保存后立即生效(热更新)"},{key:"ip_whitelist",label:"IP 白名单列表",type:"textarea",showIf:e=>!!e.ip_whitelist_enabled,note:"每行一条,支持单个 IP、CIDR 网段、起止范围(- 或 ~ 分隔),IPv4 / IPv6 均可",placeholder:`例如: 127.0.0.1 192.168.1.0/24 10.0.0.1-10.0.0.100 @@ -239,7 +239,7 @@ ${Ae}`,`测试失败: ${_}`),R()}finally{D(_,!1)}},ee=async _=>{ut({email:_}),D( 2001:db8::/32`}]},{title:"基础配置",fields:[{key:"credentials_dir",label:"凭证目录路径",type:"text",note:"存储认证文件的目录路径"},{key:"proxy",label:"代理设置",type:"text",note:"支持 http/https/socks5/socks5h,可带账号密码(user:pass@host:port),留空不使用(重启生效)",placeholder:"http://user:pass@proxy:port 或 socks5h://proxy:port"}]},{title:"端点配置",fields:[{key:"oauth_proxy_url",label:"OAuth Endpoint",type:"text",note:"Google OAuth2 端点,用于 token 获取和刷新"},{key:"googleapis_proxy_url",label:"Google APIs Endpoint",type:"text",note:"Google APIs 端点"},{key:"antigravity_api_url",label:"Antigravity API Endpoint",type:"text",note:"Antigravity API 端点"}]},{title:"自动封禁配置",fields:[{key:"auto_ban_enabled",label:"启用自动封禁",type:"bool",note:"遇到指定错误码时自动禁用凭证"},{key:"auto_ban_error_codes",label:"自动封禁错误码",type:"text",note:"JSON 数组格式,如 [403, 400]"}]},{title:"重试配置",fields:[{key:"retry_429_enabled",label:"启用错误重试",type:"bool",note:"遇到错误时自动重试"},{key:"retry_429_max_retries",label:"最大重试次数",type:"number",note:"遇到错误时的最大重试次数"},{key:"retry_429_interval",label:"重试间隔(秒)",type:"number",note:"两次重试间的等待秒数,允许 0(立即重试),范围 0-3600"}]},{title:"凭证选择模式",fields:[{key:"credential_select_mode",label:"选择模式",type:"select",note:"决定每次 API 请求如何挑选凭证",options:[{value:"random",label:"完全随机"},{value:"cache",label:"缓存匹配(推荐)"},{value:"sticky",label:"凭证不变直到 CD"}],descriptions:{random:"完全随机负载均衡:每次请求从可用凭证中随机挑选一个,最均匀地分摊负载,但相同会话可能命中不同凭证,无法利用上游 prompt cache。",cache:'缓存匹配(默认推荐):以"模型 + system 指令(或首条 user 消息)"哈希出会话 key,相同会话始终复用同一凭证——命中 Google 上游的 prompt cache,长对话更快、更省 token。凭证进入 CD 后自动切换并重新绑定。建议搭配 Redis(REDIS_URL)实现多实例共享。',sticky:"凭证粘性:所有请求锁定同一个凭证,直到该凭证进入冷却(CD)或被禁用才切换到下一个。适合最大化单凭证的缓存命中,但负载不均——单凭证扛满全量请求,其余凭证闲置。"}}]},{title:"响应配置",fields:[{key:"return_thoughts_to_frontend",label:"返回思维链到前端",type:"bool",note:"启用后思维链会在响应中返回;禁用后过滤掉"}]},{title:"抗截断配置",fields:[{key:"anti_truncation_max_attempts",label:"抗截断最大重试次数",type:"number",note:"检测到输出截断时的最大续传尝试次数(1-10)。使用'抗截断-'前缀的模型生效"}]},{title:"敏感词过滤",fields:[{key:"sensitive_words_enabled",label:"启用敏感词过滤",type:"bool",note:"请求中命中敏感词的内容会被替换为空,避免触发 Google API 端点的敏感词拦截"},{key:"sensitive_words",label:"敏感词列表",type:"textarea",showIf:e=>!!e.sensitive_words_enabled,note:"每行一个词或短语,不区分大小写,支持中文。命中后整词替换为空。保存后立即生效(热更新)",placeholder:`例如: sensitive word 敏感词 -另一个词`}]},{title:"模型名复写",fields:[{key:"model_rewrite_enabled",label:"启用模型名复写",type:"bool",note:"开启后按规则匹配请求中的模型名(支持正则),命中则替换为规则指定的模型名。常用于把客户端固定模型名映射到实际可用的上游模型。保存后立即生效(热更新)"},{key:"model_rewrite_rules",label:"复写规则",type:"rules",showIf:e=>!!e.model_rewrite_enabled,note:"每行一条规则:匹配正则 + 替换模型名。自上而下首条命中即生效,替换支持正则反向引用(如 \\1)"}]},{title:"请求日志",fields:[{key:"usage_log_enabled",label:"启用请求日志",type:"bool",note:'记录每次 API 请求(模型、凭证、token 用量、耗时、状态)到数据库,在"请求日志"页面查看。日志不自动清理,可在该页面手动清理或清空'},{key:"request_log_enabled",label:"启用请求体详细日志",type:"bool",note:"开启后,当请求命中下方错误码时,把发往上游的完整请求头(已脱敏)与请求体保存为 JSON 文件(data/request_logs/)。主要用于请求体错误时排查 debug;清理/清空日志时会同步删除这些文件"},{key:"request_log_error_codes",label:"详细日志错误码",type:"csv_numbers",showIf:e=>!!e.request_log_enabled,note:"仅当最终响应状态码命中此列表时记录详细日志,逗号分隔,如 400, 429。留空默认只记录 400",placeholder:"400, 429"}]}];function rg(){const[e,t]=O.useState({}),[n,r]=O.useState([]),[s,l]=O.useState(!0),[o,a]=O.useState(!1),[u,d]=O.useState(null);O.useEffect(()=>{m()},[]);const m=async({silent:p=!1}={})=>{var x,k;l(!0);try{const N=await re.get("/config/get");t(N.data.config||{}),r(N.data.env_locked||[]),p||d(null)}catch(N){d({type:"error",text:((k=(x=N.response)==null?void 0:x.data)==null?void 0:k.detail)||"加载配置失败"})}finally{l(!1)}},y=async()=>{var p,x;a(!0);try{const k=await re.post("/config/save",{config:e});d({type:"success",text:k.data.message||"配置保存成功"}),await m({silent:!0})}catch(k){d({type:"error",text:((x=(p=k.response)==null?void 0:p.data)==null?void 0:x.detail)||"保存配置失败"})}finally{a(!1)}},h=(p,x)=>{t(k=>({...k,[p]:x}))},v="https://gcli-api.sukaka.top",S={oauth_proxy_url:"https://oauth2.googleapis.com",googleapis_proxy_url:"https://www.googleapis.com",antigravity_api_url:"https://daily-cloudcode-pa.googleapis.com"},w={oauth_proxy_url:"/oauth2",googleapis_proxy_url:"/googleapis",antigravity_api_url:"/daily-cloudcode-pa"},z=()=>{t(p=>{const x={...p};for(const[k,N]of Object.entries(w))n.includes(k)||(x[k]=v+N);return x})},c=()=>{t(p=>{const x={...p};for(const[k,N]of Object.entries(S))n.includes(k)||(x[k]=N);return x})},f=p=>{const x=n.includes(p.key),k=e[p.key]??"";if(x)return i.jsx("div",{className:"text-xs text-amber-400/80 bg-amber-500/10 border border-amber-500/20 rounded-lg px-3 py-2",children:"该配置已被环境变量锁定,修改环境变量后重启生效"});if(p.type==="bool")return i.jsxs("label",{className:"flex items-center gap-3 cursor-pointer select-none",children:[i.jsx("button",{type:"button",onClick:()=>h(p.key,!k),className:`relative w-11 h-6 rounded-full transition-colors ${k?"bg-purple-600":"bg-dark-600"}`,children:i.jsx("span",{className:`absolute top-0.5 left-0.5 w-5 h-5 bg-white rounded-full transition-transform ${k?"translate-x-5":""}`})}),i.jsx("span",{className:"text-sm text-gray-300",children:k?"已启用":"已禁用"})]});if(p.type==="select"){const N=p.options.find(j=>j.value===k)||p.options[0];return i.jsxs("div",{className:"space-y-2",children:[i.jsx(Nt,{value:(N==null?void 0:N.value)??"",onChange:j=>h(p.key,j),options:p.options,className:"w-full sm:w-64"}),p.descriptions&&N&&i.jsx("div",{className:"bg-dark-800/60 border border-dark-600 rounded-lg p-3 text-xs sm:text-sm text-gray-300 leading-relaxed",children:p.descriptions[N.value]})]})}if(p.type==="csv_numbers"){const N=Array.isArray(k)?k.join(", "):k||"";return i.jsx("input",{type:"text",value:N,onChange:j=>{const E=j.target.value.split(/[,\s]+/).map(F=>parseInt(F,10)).filter(F=>Number.isInteger(F)&&F>=100&&F<=599);h(p.key,[...new Set(E)])},placeholder:p.placeholder,className:"w-full sm:w-64 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"})}if(p.type==="rules"){const N=Array.isArray(k)?k.map(P=>Array.isArray(P)?[String(P[0]??""),String(P[1]??"")]:["",""]):[],j=(P,Q,le)=>{const ke=N.map(I=>[...I]);ke[P][Q]=le,h(p.key,ke)},E=P=>{h(p.key,N.filter((Q,le)=>le!==P))},F=()=>{h(p.key,[...N,["",""]])};return i.jsxs("div",{className:"space-y-2",children:[N.length===0&&i.jsx("div",{className:"text-xs text-gray-500 bg-dark-800/60 border border-dark-700 rounded-lg px-3 py-2",children:"暂无规则,点击下方按钮新增"}),N.map((P,Q)=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("input",{type:"text",value:P[0],onChange:le=>j(Q,0,le.target.value),placeholder:"匹配正则,如 ^gpt-4$",className:"flex-1 min-w-0 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}),i.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"→"}),i.jsx("input",{type:"text",value:P[1],onChange:le=>j(Q,1,le.target.value),placeholder:"替换模型名,如 gemini-2.5-pro",className:"flex-1 min-w-0 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}),i.jsx("button",{type:"button",onClick:()=>E(Q),className:"shrink-0 p-2 text-gray-500 hover:text-red-400 transition-colors",title:"删除该规则",children:i.jsx(yl,{size:16})})]},Q)),i.jsxs("button",{type:"button",onClick:F,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1.5",children:[i.jsx(Dh,{size:14}),"新增规则"]})]})}return p.type==="textarea"?i.jsx("textarea",{value:Array.isArray(k)?k.join(` +另一个词`}]},{title:"模型名复写",fields:[{key:"model_rewrite_enabled",label:"启用模型名复写",type:"bool",note:"开启后按规则匹配请求中的模型名(支持正则),命中则替换为规则指定的模型名。常用于把客户端固定模型名映射到实际可用的上游模型。保存后立即生效(热更新)"},{key:"model_rewrite_rules",label:"复写规则",type:"rules",showIf:e=>!!e.model_rewrite_enabled,note:"每行一条规则:匹配正则 + 替换模型名。自上而下首条命中即生效,替换支持正则反向引用(如 \\1)"}]},{title:"请求日志",fields:[{key:"usage_log_enabled",label:"启用请求日志",type:"bool",note:'记录每次 API 请求(模型、凭证、token 用量、耗时、状态)到数据库,在"请求日志"页面查看。日志不自动清理,可在该页面手动清理或清空'},{key:"request_log_enabled",label:"启用请求体详细日志",type:"bool",note:"开启后,当请求命中下方错误码时,把发往上游的完整请求头(已脱敏)与请求体保存为 JSON 文件(data/request_logs/)。主要用于请求体错误时排查 debug;清理/清空日志时会同步删除这些文件"},{key:"request_log_error_codes",label:"详细日志错误码",type:"csv_numbers",showIf:e=>!!e.request_log_enabled,note:"仅当最终响应状态码命中此列表时记录详细日志,逗号分隔,如 400, 429。留空默认只记录 400",placeholder:"400, 429"}]}];function sg(){const[e,t]=O.useState({}),[n,r]=O.useState([]),[s,l]=O.useState(!0),[o,a]=O.useState(!1),[u,d]=O.useState(null);O.useEffect(()=>{m()},[]);const m=async({silent:p=!1}={})=>{var x,k;l(!0);try{const N=await re.get("/config/get");t(N.data.config||{}),r(N.data.env_locked||[]),p||d(null)}catch(N){d({type:"error",text:((k=(x=N.response)==null?void 0:x.data)==null?void 0:k.detail)||"加载配置失败"})}finally{l(!1)}},y=async()=>{var p,x;a(!0);try{const k=await re.post("/config/save",{config:e});d({type:"success",text:k.data.message||"配置保存成功"}),await m({silent:!0})}catch(k){d({type:"error",text:((x=(p=k.response)==null?void 0:p.data)==null?void 0:x.detail)||"保存配置失败"})}finally{a(!1)}},h=(p,x)=>{t(k=>({...k,[p]:x}))},v="https://gcli-api.sukaka.top",S={oauth_proxy_url:"https://oauth2.googleapis.com",googleapis_proxy_url:"https://www.googleapis.com",antigravity_api_url:"https://daily-cloudcode-pa.googleapis.com"},w={oauth_proxy_url:"/oauth2",googleapis_proxy_url:"/googleapis",antigravity_api_url:"/daily-cloudcode-pa"},z=()=>{t(p=>{const x={...p};for(const[k,N]of Object.entries(w))n.includes(k)||(x[k]=v+N);return x})},c=()=>{t(p=>{const x={...p};for(const[k,N]of Object.entries(S))n.includes(k)||(x[k]=N);return x})},f=p=>{const x=n.includes(p.key),k=e[p.key]??"";if(x)return i.jsx("div",{className:"text-xs text-amber-400/80 bg-amber-500/10 border border-amber-500/20 rounded-lg px-3 py-2",children:"该配置已被环境变量锁定,修改环境变量后重启生效"});if(p.type==="bool")return i.jsxs("label",{className:"flex items-center gap-3 cursor-pointer select-none",children:[i.jsx("button",{type:"button",onClick:()=>h(p.key,!k),className:`relative w-11 h-6 rounded-full transition-colors ${k?"bg-purple-600":"bg-dark-600"}`,children:i.jsx("span",{className:`absolute top-0.5 left-0.5 w-5 h-5 bg-white rounded-full transition-transform ${k?"translate-x-5":""}`})}),i.jsx("span",{className:"text-sm text-gray-300",children:k?"已启用":"已禁用"})]});if(p.type==="select"){const N=p.options.find(j=>j.value===k)||p.options[0];return i.jsxs("div",{className:"space-y-2",children:[i.jsx(Nt,{value:(N==null?void 0:N.value)??"",onChange:j=>h(p.key,j),options:p.options,className:"w-full sm:w-64"}),p.descriptions&&N&&i.jsx("div",{className:"bg-dark-800/60 border border-dark-600 rounded-lg p-3 text-xs sm:text-sm text-gray-300 leading-relaxed",children:p.descriptions[N.value]})]})}if(p.type==="csv_numbers"){const N=Array.isArray(k)?k.join(", "):k||"";return i.jsx("input",{type:"text",value:N,onChange:j=>{const E=j.target.value.split(/[,\s]+/).map(F=>parseInt(F,10)).filter(F=>Number.isInteger(F)&&F>=100&&F<=599);h(p.key,[...new Set(E)])},placeholder:p.placeholder,className:"w-full sm:w-64 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"})}if(p.type==="rules"){const N=Array.isArray(k)?k.map(P=>Array.isArray(P)?[String(P[0]??""),String(P[1]??"")]:["",""]):[],j=(P,Q,le)=>{const ke=N.map(I=>[...I]);ke[P][Q]=le,h(p.key,ke)},E=P=>{h(p.key,N.filter((Q,le)=>le!==P))},F=()=>{h(p.key,[...N,["",""]])};return i.jsxs("div",{className:"space-y-2",children:[N.length===0&&i.jsx("div",{className:"text-xs text-gray-500 bg-dark-800/60 border border-dark-700 rounded-lg px-3 py-2",children:"暂无规则,点击下方按钮新增"}),N.map((P,Q)=>i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("input",{type:"text",value:P[0],onChange:le=>j(Q,0,le.target.value),placeholder:"匹配正则,如 ^gpt-4$",className:"flex-1 min-w-0 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}),i.jsx("span",{className:"text-gray-500 text-sm shrink-0",children:"→"}),i.jsx("input",{type:"text",value:P[1],onChange:le=>j(Q,1,le.target.value),placeholder:"替换模型名,如 gemini-2.5-pro",className:"flex-1 min-w-0 px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}),i.jsx("button",{type:"button",onClick:()=>E(Q),className:"shrink-0 p-2 text-gray-500 hover:text-red-400 transition-colors",title:"删除该规则",children:i.jsx(yl,{size:16})})]},Q)),i.jsxs("button",{type:"button",onClick:F,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1.5",children:[i.jsx(Mh,{size:14}),"新增规则"]})]})}return p.type==="textarea"?i.jsx("textarea",{value:Array.isArray(k)?k.join(` `):k||"",onChange:N=>{const j=N.target.value===""?[]:N.target.value.split(` -`);h(p.key,j.map(E=>E.replace(/\s+$/,"")).filter(E=>E.trim()!==""))},placeholder:p.placeholder,rows:6,className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}):i.jsx("input",{type:p.type,value:k,onChange:N=>h(p.key,p.type==="number"?Number(N.target.value):N.target.value),placeholder:p.placeholder,className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500"})};return i.jsxs("div",{className:"space-y-6",children:[i.jsx("div",{className:"sticky top-0 z-30 -mx-1 px-1 py-2 bg-dark-950/95 backdrop-blur border-b border-dark-700 rounded-lg",children:i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsxs("button",{onClick:m,disabled:s,className:"btn btn-secondary text-sm flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:s?"animate-spin":""}),"刷新配置"]}),i.jsxs("button",{onClick:y,disabled:o||s,className:"btn btn-primary text-sm flex items-center gap-1.5 disabled:opacity-50",children:[o?i.jsx(gt,{size:15,className:"animate-spin"}):i.jsx(Mh,{size:15}),o?"保存中...":"保存配置"]})]})}),u&&i.jsx(Zr,{type:u.type,title:u.type==="success"?"操作成功":"操作失败",onClose:()=>d(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:u.text})}),s?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):i.jsx("div",{className:"space-y-6",children:ng.map(p=>i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400 mb-4 border-b border-dark-700 pb-3",children:p.title}),p.title==="端点配置"&&i.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[i.jsx("button",{type:"button",onClick:z,className:"btn btn-secondary text-xs px-3 py-1.5",children:"🚀 一键使用镜像网址"}),i.jsx("button",{type:"button",onClick:c,className:"btn btn-secondary text-xs px-3 py-1.5",children:"🔄 还原官方端点"})]}),i.jsx("div",{className:"space-y-5",children:p.fields.filter(x=>!x.showIf||x.showIf(e)).map(x=>i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:x.label}),f(x),x.note&&i.jsx("p",{className:"text-xs text-gray-500 mt-1.5",children:x.note})]},x.key))})]},p.title))})]})}function sg({version:e,onCheckUpdate:t,checkingUpdate:n}){const r=[{label:"OpenAI 格式",value:`${window.location.origin}/v1/chat/completions`},{label:"Gemini 格式",value:`${window.location.origin}/v1beta/models`},{label:"Claude 格式",value:`${window.location.origin}/v1/messages`}],s=l=>{navigator.clipboard.writeText(l)};return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"card p-4 sm:p-6",children:[i.jsxs("h3",{className:"text-sm font-medium text-gray-400 mb-3 flex items-center gap-2",children:[i.jsx(gf,{size:16,className:"text-amber-400"}),"API 端点(点击复制)"]}),i.jsx("div",{className:"space-y-2",children:r.map(l=>i.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3 text-sm",children:[i.jsx("span",{className:"text-gray-500 sm:w-24 flex-shrink-0",children:l.label}),i.jsx("code",{className:"bg-dark-800 border border-dark-600 rounded px-2 py-1 text-xs text-gray-300 cursor-pointer hover:text-white break-all",onClick:()=>s(l.value),children:l.value})]},l.label))})]}),i.jsxs("div",{className:"card",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-2xl bg-purple-600/20",children:i.jsx(Jr,{className:"w-7 h-7 text-purple-400"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"text-2xl font-bold text-white",children:"AGY2API"}),i.jsx("p",{className:"text-gray-400 text-sm",children:e!=null&&e.version?`版本: ${e.version}`:"Antigravity API 代理服务"})]})]}),i.jsx("p",{className:"text-gray-400 text-sm leading-relaxed",children:"将 Google Antigravity API 转换为 OpenAI、Gemini 和 Anthropic 兼容格式的代理工具。支持多账户管理(邮箱去重)、自动轮换、模型级冷却、凭证导入导出等功能。"}),i.jsxs("div",{className:"flex flex-wrap items-center gap-4 mt-4",children:[i.jsxs("a",{href:"https://github.com/su-kaka/agy2api",target:"_blank",rel:"noopener noreferrer",className:"text-purple-400 hover:text-purple-300 text-sm flex items-center gap-1.5",children:[i.jsx(Lh,{size:15}),"GitHub 仓库",i.jsx(hf,{size:12})]}),i.jsxs("button",{onClick:t,disabled:n,className:"text-blue-400 hover:text-blue-300 text-sm flex items-center gap-1.5 disabled:opacity-50",children:[n?i.jsx(Tr,{size:14,className:"animate-pulse"}):i.jsx(Qn,{size:14}),n?"检查中...":"检查更新"]}),(e==null?void 0:e.check_update)&&(e==null?void 0:e.has_update)&&i.jsxs("span",{className:"text-emerald-400 text-sm flex items-center gap-1.5",children:[i.jsx(Tr,{size:14}),"有新版本可用: ",e.latest_version]}),(e==null?void 0:e.check_update)&&(e==null?void 0:e.has_update)===!1&&i.jsxs("span",{className:"text-gray-400 text-sm flex items-center gap-1.5",children:[i.jsx(Tr,{size:14}),"已是最新版本"]})]})]}),i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-lg font-semibold text-blue-400 mb-4",children:"✨ 主要功能"}),i.jsxs("div",{className:"grid md:grid-cols-2 gap-4 text-sm",children:[i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-amber-400",children:"⚡"})," ",i.jsx("strong",{children:"多格式兼容:"}),"OpenAI / Gemini / Anthropic 三种 API 格式"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-cyan-400",children:"🔄"})," ",i.jsx("strong",{children:"自动轮换:"}),"随机负载均衡,自动跳过冷却和禁用的凭证"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-emerald-400",children:"🛡️"})," ",i.jsx("strong",{children:"自动封禁:"}),"遇到指定错误码自动禁用异常凭证"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-purple-400",children:"❄️"})," ",i.jsx("strong",{children:"模型级冷却:"}),"429 错误自动设置模型级 CD"]})]}),i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-red-400",children:"✂️"})," ",i.jsx("strong",{children:"抗截断:"}),'"抗截断-" 前缀模型自动续传截断的响应']}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-emerald-400",children:"📊"})," ",i.jsx("strong",{children:"实时监控:"}),"凭证状态、错误码、额度查询"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-gray-400",children:"📱"})," ",i.jsx("strong",{children:"响应式界面:"}),"桌面/移动端自适应"]})]})]})]}),i.jsxs("div",{className:"card text-center",children:[i.jsx("h3",{className:"text-lg font-semibold text-blue-400 mb-4",children:"💬 交流群"}),i.jsx("p",{className:"text-gray-400 text-sm mb-3",children:"欢迎加入 QQ 群交流讨论!"}),i.jsx("div",{className:"inline-block bg-white rounded-xl p-3",children:i.jsx("img",{src:"/docs/qq-group.jpg",alt:"QQ 群二维码",className:"w-40 h-40 rounded-lg"})}),i.jsx("p",{className:"text-blue-400 font-semibold mt-3",children:"QQ 群号:1083250744"})]}),i.jsxs("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-xl p-5",children:[i.jsx("div",{className:"text-amber-400 font-medium mb-2",children:"⚠️ 使用声明"}),i.jsx("p",{className:"text-sm text-amber-400/80",children:"本项目仅供学习研究使用,禁止商业用途和倒卖。"})]}),e&&i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-base font-semibold text-gray-300 mb-3",children:"版本信息"}),i.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[i.jsxs("div",{className:"text-gray-500",children:["当前版本: ",i.jsx("span",{className:"text-gray-300",children:e.version||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["构建哈希: ",i.jsx("span",{className:"text-gray-300",children:e.full_hash||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["更新说明: ",i.jsx("span",{className:"text-gray-300",children:e.message||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["构建日期: ",i.jsx("span",{className:"text-gray-300",children:e.date||"-"})]})]})]})]})}const lg=[20,50,100,200].map(e=>({value:e,label:`每页 ${e}`}));function Yu(e){const t=new Date(e*1e3),n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function Cn(e){return e?e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e):"0"}function og(e){if(typeof e!="string")return JSON.stringify(e??null,null,2);try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function ig(){const[e,t]=O.useState([]),[n,r]=O.useState(0),[s,l]=O.useState(null),[o,a]=O.useState(1),[u,d]=O.useState(20),[m,y]=O.useState("all"),[h,v]=O.useState(""),[S,w]=O.useState(""),[z,c]=O.useState(""),[f,p]=O.useState(!0),[x,k]=O.useState(!1),[N,j]=O.useState(null),[E,F]=O.useState(null),[P,Q]=O.useState(null),[le,ke]=O.useState(!1),[I,ut]=O.useState(24),Y=O.useCallback(async()=>{var b,ee;p(!0);try{const X={offset:(o-1)*u,limit:u,status:m};h&&(X.api_format=h),S.trim()&&(X.model_name=S.trim());const V=parseInt(z,10);z.trim()!==""&&Number.isInteger(V)&&(X.status_code=V),I>0&&(X.start_timestamp=Math.floor(Date.now()/1e3)-I*3600);const je=await re.get("/usage-logs/list",{params:X});t(je.data.items),r(je.data.total)}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"加载日志失败"})}finally{p(!1)}},[o,u,m,h,S,z,I]),Se=O.useCallback(async()=>{try{const b={};I>0&&(b.start_timestamp=Math.floor(Date.now()/1e3)-I*3600),h&&(b.api_format=h),S.trim()&&(b.model_name=S.trim());const ee=await re.get("/usage-logs/stats",{params:b});l(ee.data)}catch{}},[I,h,S]);O.useEffect(()=>{Y()},[Y]),O.useEffect(()=>{Se()},[Se]);const R=()=>{Y(),Se()},A=async()=>{var b,ee;if(window.confirm("确定要清理 3 天前的日志吗?此操作不可恢复。")){k(!0);try{const X=await re.post("/usage-logs/clear",null,{params:{days:3}});j({type:"success",text:X.data.message||"清理成功"}),R()}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"清理失败"})}finally{k(!1)}}},D=async()=>{var b,ee;if(window.confirm(`确定要清空全部请求日志吗? -整张日志表将被删除重建,不留任何残留,此操作不可恢复。`)){k(!0);try{const X=await re.post("/usage-logs/truncate");j({type:"success",text:X.data.message||"已清空全部日志"}),R()}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"清空失败"})}finally{k(!1)}}},W=Math.max(1,Math.ceil(n/u)),H=async()=>{var b,ee;if(E!=null&&E.request_log_file){ke(!0);try{const X=await re.get("/usage-logs/request-body",{params:{path:E.request_log_file}});Q(X.data)}catch(X){Q({__missing:!0,__message:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"详细日志文件不存在或已清理"})}finally{ke(!1)}}},Ne=async()=>{if(!(!P||P.__missing))try{await navigator.clipboard.writeText(JSON.stringify(P,null,2)),j({type:"success",text:"已复制详细日志 JSON"})}catch{j({type:"error",text:"复制失败"})}};return i.jsxs("div",{className:"space-y-4",children:[s&&i.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3",children:[i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-purple-600/20 rounded-lg",children:i.jsx(bh,{size:20,className:"text-purple-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold",children:s.total_requests}),i.jsx("div",{className:"text-xs text-gray-500",children:"总请求"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-green-600/20 rounded-lg",children:i.jsx(qn,{size:20,className:"text-green-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold text-green-400",children:s.success_count}),i.jsx("div",{className:"text-xs text-gray-500",children:"成功"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-red-600/20 rounded-lg",children:i.jsx($h,{size:20,className:"text-red-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold text-red-400",children:s.error_count}),i.jsx("div",{className:"text-xs text-gray-500",children:"失败"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-blue-600/20 rounded-lg",children:i.jsx(Ch,{size:20,className:"text-blue-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold",children:Cn(s.total_tokens)}),i.jsxs("div",{className:"text-xs text-gray-500",children:["总 Tokens",s.cached_tokens>0?`(缓存 ${Cn(s.cached_tokens)})`:""]})]})]})]}),i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i.jsxs("button",{onClick:R,disabled:f,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:f?"animate-spin":""}),"刷新"]}),i.jsxs("button",{onClick:A,disabled:x,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[x?i.jsx(gt,{size:15,className:"animate-spin"}):i.jsx(yl,{size:15}),"清理3天前日志"]}),i.jsxs("button",{onClick:D,disabled:x,className:"btn btn-danger text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(yl,{size:15}),"清空全部日志"]})]}),N&&i.jsx(Zr,{type:N.type,title:N.type==="success"?"操作成功":"操作失败",onClose:()=>j(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:N.text})}),i.jsxs("div",{className:"grid grid-cols-2 sm:flex sm:flex-wrap gap-2 sm:gap-3 text-sm",children:[i.jsx(Nt,{value:I,onChange:b=>{ut(Number(b)),a(1)},className:"w-full sm:w-32",options:[{value:1,label:"最近 1 小时"},{value:6,label:"最近 6 小时"},{value:24,label:"最近 24 小时"},{value:24*7,label:"最近 7 天"},{value:24*30,label:"最近 30 天"},{value:0,label:"全部时间"}]}),i.jsx(Nt,{value:m,onChange:b=>{y(b),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"状态: 全部"},{value:"success",label:"仅成功"},{value:"error",label:"仅失败"}]}),i.jsx(Nt,{value:h,onChange:b=>{v(b),a(1)},className:"w-full sm:w-32",options:[{value:"",label:"格式: 全部"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"anthropic",label:"Claude"}]}),i.jsx("input",{value:S,onChange:b=>{w(b.target.value),a(1)},placeholder:"模型名筛选",className:"w-full sm:w-40 bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm placeholder-gray-500"}),i.jsx("input",{value:z,onChange:b=>{c(b.target.value),a(1)},placeholder:"错误码筛选",inputMode:"numeric",className:"w-full sm:w-28 bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm placeholder-gray-500"}),i.jsx(Nt,{value:u,onChange:b=>{d(Number(b)),a(1)},className:"w-full sm:w-32",options:lg})]}),f?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):e.length===0?i.jsx("div",{className:"card p-8 text-center text-gray-500",children:"暂无请求日志"}):i.jsx("div",{className:"space-y-2",children:e.map(b=>i.jsx("button",{onClick:()=>{F(b),Q(null)},className:"card p-3 sm:p-4 w-full text-left hover:border-purple-500/40 transition-colors cursor-pointer",children:i.jsxs("div",{className:"flex items-start justify-between gap-2",children:[i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[i.jsx("span",{className:`text-xs px-1.5 py-0.5 rounded ${b.success?"bg-green-500/15 text-green-400":"bg-red-500/15 text-red-400"}`,children:b.success?"✓ 成功":`✗ ${b.status_code||"失败"}`}),i.jsx("span",{className:"text-sm font-medium text-gray-200 truncate",children:b.model_name||"(unknown)"}),b.upstream_model_name&&b.upstream_model_name!==b.model_name&&i.jsxs("span",{className:"text-xs text-gray-500 truncate",title:"后端真实模型名",children:["→ ",b.upstream_model_name]}),i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-dark-700 text-gray-400",children:b.api_format==="openai"?"OpenAI":b.api_format==="gemini"?"Gemini":b.api_format==="anthropic"?"Claude":b.api_format||"?"}),b.is_stream&&i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-blue-500/15 text-blue-400",children:"流式"}),b.request_log_file&&i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-amber-500/15 text-amber-400",children:"详细"})]}),i.jsxs("div",{className:"text-xs text-gray-500 mt-1 flex flex-wrap gap-x-3 gap-y-0.5",children:[i.jsxs("span",{className:"flex items-center gap-1",children:[i.jsx(pi,{size:11}),Yu(b.created_at)]}),i.jsxs("span",{children:[(b.use_time||0).toFixed(1),"s"]}),i.jsx("span",{children:b.credential_email||"-"})]})]}),i.jsxs("div",{className:"text-right shrink-0 text-xs text-gray-400",children:[i.jsxs("div",{children:[Cn(b.total_tokens)," tokens"]}),i.jsxs("div",{className:"text-gray-600",children:["↑",Cn(b.prompt_tokens)," ↓",Cn(b.completion_tokens)]}),b.cached_tokens>0&&i.jsxs("div",{className:"text-emerald-500/80",title:"Prompt 中命中缓存的 token",children:["⚡缓存 ",Cn(b.cached_tokens)]})]})]})},b.id))}),n>0&&i.jsxs("div",{className:"flex items-center justify-between text-sm text-gray-400",children:[i.jsxs("span",{children:["共 ",n," 条"]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>a(b=>Math.max(1,b-1)),disabled:o<=1,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"上一页"}),i.jsxs("span",{children:[o," / ",W]}),i.jsx("button",{onClick:()=>a(b=>Math.min(W,b+1)),disabled:o>=W,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"下一页"})]})]}),E&&i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60",onClick:()=>F(null),children:i.jsxs("div",{className:"card max-w-lg w-full max-h-[80vh] overflow-y-auto",onClick:b=>b.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between mb-4",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400",children:"请求详情"}),i.jsx("button",{onClick:()=>F(null),className:"text-gray-400 hover:text-white",children:"✕"})]}),i.jsxs("div",{className:"space-y-2 text-sm",children:[[["时间",Yu(E.created_at)],["请求 ID",E.request_id||"-"],["状态",E.success?"成功":`失败 (${E.status_code})`],["API 格式",E.api_format||"-"],["客户端 IP",E.client_ip||"-"],["请求模型",E.model_name||"-"],["真实模型",E.upstream_model_name||E.model_name||"-"],["凭证",E.credential_email||"-"],["流式",E.is_stream?"是":"否"],["耗时",`${(E.use_time||0).toFixed(2)}s`],["Prompt Tokens",String(E.prompt_tokens)],["Completion Tokens",String(E.completion_tokens)],["Total Tokens",String(E.total_tokens)],...E.cached_tokens>0?[["缓存 Tokens",String(E.cached_tokens)]]:[]].map(([b,ee])=>i.jsxs("div",{className:"flex justify-between gap-4 border-b border-dark-700 pb-1.5",children:[i.jsx("span",{className:"text-gray-500 shrink-0",children:b}),i.jsx("span",{className:"text-gray-200 text-right break-all",children:ee})]},b)),E.error_message&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-500 mb-1",children:"错误信息"}),i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 rounded-lg p-2.5 text-xs text-red-300 break-all",children:E.error_message})]}),E.request_log_file&&i.jsxs("div",{className:"pt-2",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx("div",{className:"text-gray-500",children:"请求体详细日志"}),i.jsxs("button",{onClick:H,disabled:le,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1.5",children:[le?i.jsx(gt,{size:13,className:"animate-spin"}):i.jsx(Th,{size:13}),"查看详细内容"]})]}),i.jsx("p",{className:"text-xs text-gray-500 mt-1.5",children:"命中指定错误码时保存了发往上游的完整请求头与请求体,用于排查请求体错误(如 400)"})]})]})]})}),P&&i.jsx("div",{className:"fixed inset-0 z-[60] flex items-center justify-center p-4 bg-black/70",onClick:()=>Q(null),children:i.jsx("div",{className:"card max-w-4xl w-full max-h-[85vh] overflow-y-auto",onClick:b=>b.stopPropagation(),children:P.__missing?i.jsxs("div",{className:"py-8 text-center text-sm text-gray-400",children:[i.jsx(_h,{size:28,className:"mx-auto mb-3 text-amber-400"}),i.jsx("div",{children:P.__message}),i.jsx("div",{className:"text-xs text-gray-500 mt-2",children:"磁盘上的详细日志文件可能已被清理或手动删除"})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400",children:"请求体详细日志"}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:Ne,className:"btn btn-secondary text-xs px-3 py-1.5",children:"复制 JSON"}),i.jsx("button",{onClick:()=>Q(null),className:"text-gray-400 hover:text-white",children:"✕"})]})]}),i.jsx("p",{className:"text-xs text-gray-500 mb-3",children:"命中指定错误码时保存,用于排查请求体错误:完整记录发往上游的请求头(已脱敏)与请求体。响应体为上游返回的原始错误。"}),i.jsxs("div",{className:"space-y-3 text-xs",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求 URL"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200 whitespace-pre-wrap break-all",children:P.url||"-"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求头(已脱敏)"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200",children:JSON.stringify(P.request_headers||{},null,2)})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求体"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200",children:JSON.stringify(P.request_body??{},null,2)})]}),P.response_body&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"上游响应"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200 whitespace-pre-wrap break-all",children:og(P.response_body)})]}),P.error_message&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"错误摘要"}),i.jsx("pre",{className:"bg-red-500/10 border border-red-500/30 rounded-lg p-2.5 overflow-x-auto text-red-300 whitespace-pre-wrap break-all",children:P.error_message})]})]})]})})})]})}function ag(){const[e,t]=O.useState(()=>!!localStorage.getItem("panelToken")),[n,r]=O.useState("oauth"),[s,l]=O.useState(null),[o,a]=O.useState(!1),u=()=>{a(!0),re.get("/version/info",{params:{check_update:"true"}}).then(y=>l(y.data)).catch(()=>{}).finally(()=>a(!1))};O.useEffect(()=>{re.get("/version/info").then(y=>l(y.data)).catch(()=>{})},[]);const d=()=>{localStorage.removeItem("panelToken"),t(!1)};if(!e)return i.jsx(Yy,{onSuccess:()=>t(!0)});const m=[{id:"oauth",label:"OAuth 认证",icon:Jr},{id:"credentials",label:"凭证管理",icon:zh},{id:"upload",label:"批量导入",icon:mi},{id:"usage-logs",label:"请求日志",icon:ff},{id:"config",label:"配置管理",icon:Ih},{id:"about",label:"项目信息",icon:Tr}];return i.jsxs("div",{className:"min-h-screen",children:[i.jsx("nav",{className:"bg-dark-900 border-b border-dark-700 sticky top-0 z-10",children:i.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-4",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("div",{className:"flex items-center gap-3",children:i.jsxs("div",{children:[i.jsx("span",{className:"text-xl font-bold",children:"AGY2API"}),(s==null?void 0:s.version)&&i.jsxs("span",{className:"ml-2 text-xs text-gray-500",children:["v",s.version]})]})}),i.jsxs("button",{onClick:d,className:"px-3 py-1.5 sm:px-4 sm:py-2 bg-red-600 hover:bg-red-700 text-white rounded-lg flex items-center gap-1 sm:gap-2 text-sm",children:[i.jsx(Ah,{size:16}),i.jsx("span",{className:"hidden sm:inline",children:"退出登录"})]})]}),i.jsx("div",{className:"flex items-center gap-1 sm:gap-2 mt-4 overflow-x-auto pb-1",children:m.map(y=>{const h=y.icon;return i.jsxs("button",{onClick:()=>r(y.id),className:`px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-lg whitespace-nowrap flex items-center gap-1.5 transition-colors ${n===y.id?"bg-purple-600 text-white":"text-gray-400 hover:text-white hover:bg-dark-700"}`,children:[i.jsx(h,{size:15}),y.label]},y.id)})})]})}),i.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-6",children:[n==="oauth"&&i.jsx(Zy,{}),n==="credentials"&&i.jsx(eg,{}),n==="upload"&&i.jsx(tg,{}),n==="usage-logs"&&i.jsx(ig,{}),n==="config"&&i.jsx(rg,{}),n==="about"&&i.jsx(sg,{version:s,onCheckUpdate:u,checkingUpdate:o})]})]})}vo.createRoot(document.getElementById("root")).render(i.jsx(dp.StrictMode,{children:i.jsx(ag,{})})); +`);h(p.key,j.map(E=>E.replace(/\s+$/,"")).filter(E=>E.trim()!==""))},placeholder:p.placeholder,rows:6,className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500 font-mono"}):i.jsx("input",{type:p.type,value:k,onChange:N=>h(p.key,p.type==="number"?Number(N.target.value):N.target.value),placeholder:p.placeholder,className:"w-full px-3 py-2 bg-dark-800 border border-dark-600 rounded-lg text-sm text-white placeholder-gray-500"})};return i.jsxs("div",{className:"space-y-6",children:[i.jsx("div",{className:"sticky top-0 z-30 -mx-1 px-1 py-2 bg-dark-950/95 backdrop-blur border-b border-dark-700 rounded-lg",children:i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsxs("button",{onClick:m,disabled:s,className:"btn btn-secondary text-sm flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:s?"animate-spin":""}),"刷新配置"]}),i.jsxs("button",{onClick:y,disabled:o||s,className:"btn btn-primary text-sm flex items-center gap-1.5 disabled:opacity-50",children:[o?i.jsx(gt,{size:15,className:"animate-spin"}):i.jsx(Ih,{size:15}),o?"保存中...":"保存配置"]})]})}),u&&i.jsx(Zr,{type:u.type,title:u.type==="success"?"操作成功":"操作失败",onClose:()=>d(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:u.text})}),s?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):i.jsx("div",{className:"space-y-6",children:rg.map(p=>i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400 mb-4 border-b border-dark-700 pb-3",children:p.title}),p.title==="端点配置"&&i.jsxs("div",{className:"flex flex-wrap gap-2 mb-4",children:[i.jsx("button",{type:"button",onClick:z,className:"btn btn-secondary text-xs px-3 py-1.5",children:"🚀 一键使用镜像网址"}),i.jsx("button",{type:"button",onClick:c,className:"btn btn-secondary text-xs px-3 py-1.5",children:"🔄 还原官方端点"})]}),i.jsx("div",{className:"space-y-5",children:p.fields.filter(x=>!x.showIf||x.showIf(e)).map(x=>i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-gray-300 mb-1.5",children:x.label}),f(x),x.note&&i.jsx("p",{className:"text-xs text-gray-500 mt-1.5",children:x.note})]},x.key))})]},p.title))})]})}function lg({version:e,onCheckUpdate:t,checkingUpdate:n}){const r=`${window.location.origin}${vl()}`,s=[{label:"OpenAI 格式",value:`${r}v1/chat/completions`},{label:"Gemini 格式",value:`${r}v1beta/models`},{label:"Claude 格式",value:`${r}v1/messages`}],l=o=>{navigator.clipboard.writeText(o)};return i.jsxs("div",{className:"space-y-6",children:[i.jsxs("div",{className:"card p-4 sm:p-6",children:[i.jsxs("h3",{className:"text-sm font-medium text-gray-400 mb-3 flex items-center gap-2",children:[i.jsx(xf,{size:16,className:"text-amber-400"}),"API 端点(点击复制)"]}),i.jsx("div",{className:"space-y-2",children:s.map(o=>i.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-3 text-sm",children:[i.jsx("span",{className:"text-gray-500 sm:w-24 flex-shrink-0",children:o.label}),i.jsx("code",{className:"bg-dark-800 border border-dark-600 rounded px-2 py-1 text-xs text-gray-300 cursor-pointer hover:text-white break-all",onClick:()=>l(o.value),children:o.value})]},o.label))})]}),i.jsxs("div",{className:"card",children:[i.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[i.jsx("div",{className:"inline-flex items-center justify-center w-12 h-12 rounded-2xl bg-purple-600/20",children:i.jsx(Jr,{className:"w-7 h-7 text-purple-400"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"text-2xl font-bold text-white",children:"AGY2API"}),i.jsx("p",{className:"text-gray-400 text-sm",children:e!=null&&e.version?`版本: ${e.version}`:"Antigravity API 代理服务"})]})]}),i.jsx("p",{className:"text-gray-400 text-sm leading-relaxed",children:"将 Google Antigravity API 转换为 OpenAI、Gemini 和 Anthropic 兼容格式的代理工具。支持多账户管理(邮箱去重)、自动轮换、模型级冷却、凭证导入导出等功能。"}),i.jsxs("div",{className:"flex flex-wrap items-center gap-4 mt-4",children:[i.jsxs("a",{href:"https://github.com/su-kaka/agy2api",target:"_blank",rel:"noopener noreferrer",className:"text-purple-400 hover:text-purple-300 text-sm flex items-center gap-1.5",children:[i.jsx(zh,{size:15}),"GitHub 仓库",i.jsx(yf,{size:12})]}),i.jsxs("button",{onClick:t,disabled:n,className:"text-blue-400 hover:text-blue-300 text-sm flex items-center gap-1.5 disabled:opacity-50",children:[n?i.jsx(Tr,{size:14,className:"animate-pulse"}):i.jsx(Qn,{size:14}),n?"检查中...":"检查更新"]}),(e==null?void 0:e.check_update)&&(e==null?void 0:e.has_update)&&i.jsxs("span",{className:"text-emerald-400 text-sm flex items-center gap-1.5",children:[i.jsx(Tr,{size:14}),"有新版本可用: ",e.latest_version]}),(e==null?void 0:e.check_update)&&(e==null?void 0:e.has_update)===!1&&i.jsxs("span",{className:"text-gray-400 text-sm flex items-center gap-1.5",children:[i.jsx(Tr,{size:14}),"已是最新版本"]})]})]}),i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-lg font-semibold text-blue-400 mb-4",children:"✨ 主要功能"}),i.jsxs("div",{className:"grid md:grid-cols-2 gap-4 text-sm",children:[i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-amber-400",children:"⚡"})," ",i.jsx("strong",{children:"多格式兼容:"}),"OpenAI / Gemini / Anthropic 三种 API 格式"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-cyan-400",children:"🔄"})," ",i.jsx("strong",{children:"自动轮换:"}),"随机负载均衡,自动跳过冷却和禁用的凭证"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-emerald-400",children:"🛡️"})," ",i.jsx("strong",{children:"自动封禁:"}),"遇到指定错误码自动禁用异常凭证"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-purple-400",children:"❄️"})," ",i.jsx("strong",{children:"模型级冷却:"}),"429 错误自动设置模型级 CD"]})]}),i.jsxs("div",{className:"space-y-3",children:[i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-red-400",children:"✂️"})," ",i.jsx("strong",{children:"抗截断:"}),'"抗截断-" 前缀模型自动续传截断的响应']}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-emerald-400",children:"📊"})," ",i.jsx("strong",{children:"实时监控:"}),"凭证状态、错误码、额度查询"]}),i.jsxs("div",{className:"text-gray-300",children:[i.jsx("span",{className:"text-gray-400",children:"📱"})," ",i.jsx("strong",{children:"响应式界面:"}),"桌面/移动端自适应"]})]})]})]}),i.jsxs("div",{className:"card text-center",children:[i.jsx("h3",{className:"text-lg font-semibold text-blue-400 mb-4",children:"💬 交流群"}),i.jsx("p",{className:"text-gray-400 text-sm mb-3",children:"欢迎加入 QQ 群交流讨论!"}),i.jsx("div",{className:"inline-block bg-white rounded-xl p-3",children:i.jsx("img",{src:`${vl()}docs/qq-group.jpg`,alt:"QQ 群二维码",className:"w-40 h-40 rounded-lg"})}),i.jsx("p",{className:"text-blue-400 font-semibold mt-3",children:"QQ 群号:1083250744"})]}),i.jsxs("div",{className:"bg-amber-500/10 border border-amber-500/30 rounded-xl p-5",children:[i.jsx("div",{className:"text-amber-400 font-medium mb-2",children:"⚠️ 使用声明"}),i.jsx("p",{className:"text-sm text-amber-400/80",children:"本项目仅供学习研究使用,禁止商业用途和倒卖。"})]}),e&&i.jsxs("div",{className:"card",children:[i.jsx("h3",{className:"text-base font-semibold text-gray-300 mb-3",children:"版本信息"}),i.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[i.jsxs("div",{className:"text-gray-500",children:["当前版本: ",i.jsx("span",{className:"text-gray-300",children:e.version||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["构建哈希: ",i.jsx("span",{className:"text-gray-300",children:e.full_hash||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["更新说明: ",i.jsx("span",{className:"text-gray-300",children:e.message||"-"})]}),i.jsxs("div",{className:"text-gray-500",children:["构建日期: ",i.jsx("span",{className:"text-gray-300",children:e.date||"-"})]})]})]})]})}const og=[20,50,100,200].map(e=>({value:e,label:`每页 ${e}`}));function Zu(e){const t=new Date(e*1e3),n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function Cn(e){return e?e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e):"0"}function ig(e){if(typeof e!="string")return JSON.stringify(e??null,null,2);try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function ag(){const[e,t]=O.useState([]),[n,r]=O.useState(0),[s,l]=O.useState(null),[o,a]=O.useState(1),[u,d]=O.useState(20),[m,y]=O.useState("all"),[h,v]=O.useState(""),[S,w]=O.useState(""),[z,c]=O.useState(""),[f,p]=O.useState(!0),[x,k]=O.useState(!1),[N,j]=O.useState(null),[E,F]=O.useState(null),[P,Q]=O.useState(null),[le,ke]=O.useState(!1),[I,ut]=O.useState(24),Y=O.useCallback(async()=>{var b,ee;p(!0);try{const X={offset:(o-1)*u,limit:u,status:m};h&&(X.api_format=h),S.trim()&&(X.model_name=S.trim());const V=parseInt(z,10);z.trim()!==""&&Number.isInteger(V)&&(X.status_code=V),I>0&&(X.start_timestamp=Math.floor(Date.now()/1e3)-I*3600);const je=await re.get("/usage-logs/list",{params:X});t(je.data.items),r(je.data.total)}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"加载日志失败"})}finally{p(!1)}},[o,u,m,h,S,z,I]),Se=O.useCallback(async()=>{try{const b={};I>0&&(b.start_timestamp=Math.floor(Date.now()/1e3)-I*3600),h&&(b.api_format=h),S.trim()&&(b.model_name=S.trim());const ee=await re.get("/usage-logs/stats",{params:b});l(ee.data)}catch{}},[I,h,S]);O.useEffect(()=>{Y()},[Y]),O.useEffect(()=>{Se()},[Se]);const R=()=>{Y(),Se()},A=async()=>{var b,ee;if(window.confirm("确定要清理 3 天前的日志吗?此操作不可恢复。")){k(!0);try{const X=await re.post("/usage-logs/clear",null,{params:{days:3}});j({type:"success",text:X.data.message||"清理成功"}),R()}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"清理失败"})}finally{k(!1)}}},D=async()=>{var b,ee;if(window.confirm(`确定要清空全部请求日志吗? +整张日志表将被删除重建,不留任何残留,此操作不可恢复。`)){k(!0);try{const X=await re.post("/usage-logs/truncate");j({type:"success",text:X.data.message||"已清空全部日志"}),R()}catch(X){j({type:"error",text:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"清空失败"})}finally{k(!1)}}},W=Math.max(1,Math.ceil(n/u)),H=async()=>{var b,ee;if(E!=null&&E.request_log_file){ke(!0);try{const X=await re.get("/usage-logs/request-body",{params:{path:E.request_log_file}});Q(X.data)}catch(X){Q({__missing:!0,__message:((ee=(b=X.response)==null?void 0:b.data)==null?void 0:ee.detail)||"详细日志文件不存在或已清理"})}finally{ke(!1)}}},Ne=async()=>{if(!(!P||P.__missing))try{await navigator.clipboard.writeText(JSON.stringify(P,null,2)),j({type:"success",text:"已复制详细日志 JSON"})}catch{j({type:"error",text:"复制失败"})}};return i.jsxs("div",{className:"space-y-4",children:[s&&i.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3",children:[i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-purple-600/20 rounded-lg",children:i.jsx(Rh,{size:20,className:"text-purple-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold",children:s.total_requests}),i.jsx("div",{className:"text-xs text-gray-500",children:"总请求"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-green-600/20 rounded-lg",children:i.jsx(qn,{size:20,className:"text-green-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold text-green-400",children:s.success_count}),i.jsx("div",{className:"text-xs text-gray-500",children:"成功"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-red-600/20 rounded-lg",children:i.jsx(Bh,{size:20,className:"text-red-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold text-red-400",children:s.error_count}),i.jsx("div",{className:"text-xs text-gray-500",children:"失败"})]})]}),i.jsxs("div",{className:"card p-4 flex items-center gap-3",children:[i.jsx("div",{className:"p-2.5 bg-blue-600/20 rounded-lg",children:i.jsx(bh,{size:20,className:"text-blue-400"})}),i.jsxs("div",{className:"min-w-0",children:[i.jsx("div",{className:"text-xl font-bold",children:Cn(s.total_tokens)}),i.jsxs("div",{className:"text-xs text-gray-500",children:["总 Tokens",s.cached_tokens>0?`(缓存 ${Cn(s.cached_tokens)})`:""]})]})]})]}),i.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i.jsxs("button",{onClick:R,disabled:f,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(Qn,{size:15,className:f?"animate-spin":""}),"刷新"]}),i.jsxs("button",{onClick:A,disabled:x,className:"btn btn-secondary text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[x?i.jsx(gt,{size:15,className:"animate-spin"}):i.jsx(yl,{size:15}),"清理3天前日志"]}),i.jsxs("button",{onClick:D,disabled:x,className:"btn btn-danger text-xs sm:text-sm px-3 py-1.5 sm:px-4 sm:py-2 flex items-center gap-1.5",children:[i.jsx(yl,{size:15}),"清空全部日志"]})]}),N&&i.jsx(Zr,{type:N.type,title:N.type==="success"?"操作成功":"操作失败",onClose:()=>j(null),children:i.jsx("span",{className:"whitespace-pre-wrap break-all",children:N.text})}),i.jsxs("div",{className:"grid grid-cols-2 sm:flex sm:flex-wrap gap-2 sm:gap-3 text-sm",children:[i.jsx(Nt,{value:I,onChange:b=>{ut(Number(b)),a(1)},className:"w-full sm:w-32",options:[{value:1,label:"最近 1 小时"},{value:6,label:"最近 6 小时"},{value:24,label:"最近 24 小时"},{value:24*7,label:"最近 7 天"},{value:24*30,label:"最近 30 天"},{value:0,label:"全部时间"}]}),i.jsx(Nt,{value:m,onChange:b=>{y(b),a(1)},className:"w-full sm:w-32",options:[{value:"all",label:"状态: 全部"},{value:"success",label:"仅成功"},{value:"error",label:"仅失败"}]}),i.jsx(Nt,{value:h,onChange:b=>{v(b),a(1)},className:"w-full sm:w-32",options:[{value:"",label:"格式: 全部"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"anthropic",label:"Claude"}]}),i.jsx("input",{value:S,onChange:b=>{w(b.target.value),a(1)},placeholder:"模型名筛选",className:"w-full sm:w-40 bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm placeholder-gray-500"}),i.jsx("input",{value:z,onChange:b=>{c(b.target.value),a(1)},placeholder:"错误码筛选",inputMode:"numeric",className:"w-full sm:w-28 bg-dark-800 border border-dark-600 rounded-lg px-3 py-2 text-gray-200 text-xs sm:text-sm placeholder-gray-500"}),i.jsx(Nt,{value:u,onChange:b=>{d(Number(b)),a(1)},className:"w-full sm:w-32",options:og})]}),f?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(gt,{className:"animate-spin text-purple-500",size:28})}):e.length===0?i.jsx("div",{className:"card p-8 text-center text-gray-500",children:"暂无请求日志"}):i.jsx("div",{className:"space-y-2",children:e.map(b=>i.jsx("button",{onClick:()=>{F(b),Q(null)},className:"card p-3 sm:p-4 w-full text-left hover:border-purple-500/40 transition-colors cursor-pointer",children:i.jsxs("div",{className:"flex items-start justify-between gap-2",children:[i.jsxs("div",{className:"min-w-0 flex-1",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[i.jsx("span",{className:`text-xs px-1.5 py-0.5 rounded ${b.success?"bg-green-500/15 text-green-400":"bg-red-500/15 text-red-400"}`,children:b.success?"✓ 成功":`✗ ${b.status_code||"失败"}`}),i.jsx("span",{className:"text-sm font-medium text-gray-200 truncate",children:b.model_name||"(unknown)"}),b.upstream_model_name&&b.upstream_model_name!==b.model_name&&i.jsxs("span",{className:"text-xs text-gray-500 truncate",title:"后端真实模型名",children:["→ ",b.upstream_model_name]}),i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-dark-700 text-gray-400",children:b.api_format==="openai"?"OpenAI":b.api_format==="gemini"?"Gemini":b.api_format==="anthropic"?"Claude":b.api_format||"?"}),b.is_stream&&i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-blue-500/15 text-blue-400",children:"流式"}),b.request_log_file&&i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-amber-500/15 text-amber-400",children:"详细"})]}),i.jsxs("div",{className:"text-xs text-gray-500 mt-1 flex flex-wrap gap-x-3 gap-y-0.5",children:[i.jsxs("span",{className:"flex items-center gap-1",children:[i.jsx(mi,{size:11}),Zu(b.created_at)]}),i.jsxs("span",{children:[(b.use_time||0).toFixed(1),"s"]}),i.jsx("span",{children:b.credential_email||"-"})]})]}),i.jsxs("div",{className:"text-right shrink-0 text-xs text-gray-400",children:[i.jsxs("div",{children:[Cn(b.total_tokens)," tokens"]}),i.jsxs("div",{className:"text-gray-600",children:["↑",Cn(b.prompt_tokens)," ↓",Cn(b.completion_tokens)]}),b.cached_tokens>0&&i.jsxs("div",{className:"text-emerald-500/80",title:"Prompt 中命中缓存的 token",children:["⚡缓存 ",Cn(b.cached_tokens)]})]})]})},b.id))}),n>0&&i.jsxs("div",{className:"flex items-center justify-between text-sm text-gray-400",children:[i.jsxs("span",{children:["共 ",n," 条"]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>a(b=>Math.max(1,b-1)),disabled:o<=1,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"上一页"}),i.jsxs("span",{children:[o," / ",W]}),i.jsx("button",{onClick:()=>a(b=>Math.min(W,b+1)),disabled:o>=W,className:"btn btn-secondary text-xs px-3 py-1.5 disabled:opacity-40",children:"下一页"})]})]}),E&&i.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60",onClick:()=>F(null),children:i.jsxs("div",{className:"card max-w-lg w-full max-h-[80vh] overflow-y-auto",onClick:b=>b.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between mb-4",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400",children:"请求详情"}),i.jsx("button",{onClick:()=>F(null),className:"text-gray-400 hover:text-white",children:"✕"})]}),i.jsxs("div",{className:"space-y-2 text-sm",children:[[["时间",Zu(E.created_at)],["请求 ID",E.request_id||"-"],["状态",E.success?"成功":`失败 (${E.status_code})`],["API 格式",E.api_format||"-"],["客户端 IP",E.client_ip||"-"],["请求模型",E.model_name||"-"],["真实模型",E.upstream_model_name||E.model_name||"-"],["凭证",E.credential_email||"-"],["流式",E.is_stream?"是":"否"],["耗时",`${(E.use_time||0).toFixed(2)}s`],["Prompt Tokens",String(E.prompt_tokens)],["Completion Tokens",String(E.completion_tokens)],["Total Tokens",String(E.total_tokens)],...E.cached_tokens>0?[["缓存 Tokens",String(E.cached_tokens)]]:[]].map(([b,ee])=>i.jsxs("div",{className:"flex justify-between gap-4 border-b border-dark-700 pb-1.5",children:[i.jsx("span",{className:"text-gray-500 shrink-0",children:b}),i.jsx("span",{className:"text-gray-200 text-right break-all",children:ee})]},b)),E.error_message&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-500 mb-1",children:"错误信息"}),i.jsx("div",{className:"bg-red-500/10 border border-red-500/30 rounded-lg p-2.5 text-xs text-red-300 break-all",children:E.error_message})]}),E.request_log_file&&i.jsxs("div",{className:"pt-2",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2",children:[i.jsx("div",{className:"text-gray-500",children:"请求体详细日志"}),i.jsxs("button",{onClick:H,disabled:le,className:"btn btn-secondary text-xs px-3 py-1.5 flex items-center gap-1.5",children:[le?i.jsx(gt,{size:13,className:"animate-spin"}):i.jsx(Lh,{size:13}),"查看详细内容"]})]}),i.jsx("p",{className:"text-xs text-gray-500 mt-1.5",children:"命中指定错误码时保存了发往上游的完整请求头与请求体,用于排查请求体错误(如 400)"})]})]})]})}),P&&i.jsx("div",{className:"fixed inset-0 z-[60] flex items-center justify-center p-4 bg-black/70",onClick:()=>Q(null),children:i.jsx("div",{className:"card max-w-4xl w-full max-h-[85vh] overflow-y-auto",onClick:b=>b.stopPropagation(),children:P.__missing?i.jsxs("div",{className:"py-8 text-center text-sm text-gray-400",children:[i.jsx(Eh,{size:28,className:"mx-auto mb-3 text-amber-400"}),i.jsx("div",{children:P.__message}),i.jsx("div",{className:"text-xs text-gray-500 mt-2",children:"磁盘上的详细日志文件可能已被清理或手动删除"})]}):i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"flex items-center justify-between mb-3",children:[i.jsx("h3",{className:"text-base font-semibold text-purple-400",children:"请求体详细日志"}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:Ne,className:"btn btn-secondary text-xs px-3 py-1.5",children:"复制 JSON"}),i.jsx("button",{onClick:()=>Q(null),className:"text-gray-400 hover:text-white",children:"✕"})]})]}),i.jsx("p",{className:"text-xs text-gray-500 mb-3",children:"命中指定错误码时保存,用于排查请求体错误:完整记录发往上游的请求头(已脱敏)与请求体。响应体为上游返回的原始错误。"}),i.jsxs("div",{className:"space-y-3 text-xs",children:[i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求 URL"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200 whitespace-pre-wrap break-all",children:P.url||"-"})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求头(已脱敏)"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200",children:JSON.stringify(P.request_headers||{},null,2)})]}),i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"请求体"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200",children:JSON.stringify(P.request_body??{},null,2)})]}),P.response_body&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"上游响应"}),i.jsx("pre",{className:"bg-dark-800 border border-dark-600 rounded-lg p-2.5 overflow-x-auto text-gray-200 whitespace-pre-wrap break-all",children:ig(P.response_body)})]}),P.error_message&&i.jsxs("div",{children:[i.jsx("div",{className:"text-gray-400 mb-1",children:"错误摘要"}),i.jsx("pre",{className:"bg-red-500/10 border border-red-500/30 rounded-lg p-2.5 overflow-x-auto text-red-300 whitespace-pre-wrap break-all",children:P.error_message})]})]})]})})})]})}function ug(){const[e,t]=O.useState(()=>!!localStorage.getItem("panelToken")),[n,r]=O.useState("oauth"),[s,l]=O.useState(null),[o,a]=O.useState(!1),u=()=>{a(!0),re.get("/version/info",{params:{check_update:"true"}}).then(y=>l(y.data)).catch(()=>{}).finally(()=>a(!1))};O.useEffect(()=>{re.get("/version/info").then(y=>l(y.data)).catch(()=>{})},[]);const d=()=>{localStorage.removeItem("panelToken"),t(!1)};if(!e)return i.jsx(Zy,{onSuccess:()=>t(!0)});const m=[{id:"oauth",label:"OAuth 认证",icon:Jr},{id:"credentials",label:"凭证管理",icon:Ah},{id:"upload",label:"批量导入",icon:hi},{id:"usage-logs",label:"请求日志",icon:pf},{id:"config",label:"配置管理",icon:Fh},{id:"about",label:"项目信息",icon:Tr}];return i.jsxs("div",{className:"min-h-screen",children:[i.jsx("nav",{className:"bg-dark-900 border-b border-dark-700 sticky top-0 z-10",children:i.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-4",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsx("div",{className:"flex items-center gap-3",children:i.jsxs("div",{children:[i.jsx("span",{className:"text-xl font-bold",children:"AGY2API"}),(s==null?void 0:s.version)&&i.jsxs("span",{className:"ml-2 text-xs text-gray-500",children:["v",s.version]})]})}),i.jsxs("button",{onClick:d,className:"px-3 py-1.5 sm:px-4 sm:py-2 bg-red-600 hover:bg-red-700 text-white rounded-lg flex items-center gap-1 sm:gap-2 text-sm",children:[i.jsx(Dh,{size:16}),i.jsx("span",{className:"hidden sm:inline",children:"退出登录"})]})]}),i.jsx("div",{className:"flex items-center gap-1 sm:gap-2 mt-4 overflow-x-auto pb-1",children:m.map(y=>{const h=y.icon;return i.jsxs("button",{onClick:()=>r(y.id),className:`px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-lg whitespace-nowrap flex items-center gap-1.5 transition-colors ${n===y.id?"bg-purple-600 text-white":"text-gray-400 hover:text-white hover:bg-dark-700"}`,children:[i.jsx(h,{size:15}),y.label]},y.id)})})]})}),i.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-6",children:[n==="oauth"&&i.jsx(eg,{}),n==="credentials"&&i.jsx(tg,{}),n==="upload"&&i.jsx(ng,{}),n==="usage-logs"&&i.jsx(ag,{}),n==="config"&&i.jsx(sg,{}),n==="about"&&i.jsx(lg,{version:s,onCheckUpdate:u,checkingUpdate:o})]})]})}wo.createRoot(document.getElementById("root")).render(i.jsx(fp.StrictMode,{children:i.jsx(ug,{})})); diff --git a/dist/index.html b/dist/index.html index 90db7cf30..f98c4962f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2,11 +2,21 @@ - + AGY2API - Antigravity 控制面板 - - + + +
diff --git a/docs/README_EN.md b/docs/README_EN.md index 6d0bb3148..510357b42 100644 --- a/docs/README_EN.md +++ b/docs/README_EN.md @@ -328,6 +328,7 @@ Import/export uses a standardized JSON format: `{"refresh_token": "...", "email" - `PROXY`: Proxy address (supports `http://`, `https://`, `socks5://`, `socks5h://`, optionally with credentials `user:pass@host:port`) - `OAUTH_PROXY_URL`: OAuth authentication proxy endpoint - `GOOGLEAPIS_PROXY_URL`: Google APIs proxy endpoint +- `PATH_PREFIX`: When the reverse proxy preserves the path prefix (e.g. `/AGY2API`), set this so the backend strips it before routing; default: empty (no stripping) **Automation Configuration** - `AUTO_BAN`: Enable automatic credential banning (default: false) diff --git a/docs/README_JA.md b/docs/README_JA.md index 211aced8a..22d57cd9c 100644 --- a/docs/README_JA.md +++ b/docs/README_JA.md @@ -324,6 +324,7 @@ agy2apiは2つのストレージバックエンドに対応: **ローカルSQLit - `PROXY`: プロキシアドレス(`http://`、`https://`、`socks5://`、`socks5h://` 対応、`user:pass@host:port` 形式の認証情報付きも可) - `OAUTH_PROXY_URL`: OAuth認証プロキシエンドポイント - `GOOGLEAPIS_PROXY_URL`: Google APIsプロキシエンドポイント +- `PATH_PREFIX`: リバースプロキシがパスプレフィックスを保持する場合(例: `/AGY2API`)、バックエンドがルーティング前にプレフィックスを剥がすよう設定。デフォルト: 空(剥がさない) **自動化設定** - `AUTO_BAN`: クレデンシャル自動BANの有効化(デフォルト: false) diff --git a/frontend/index.html b/frontend/index.html index 5bcff2e00..b713c45d3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,9 +2,19 @@ - + AGY2API - Antigravity 控制面板 +
diff --git a/frontend/src/api.js b/frontend/src/api.js index 55ddd5186..4f11bbce4 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -1,7 +1,9 @@ import axios from "axios"; +import { getBasePath } from "./basePath.js"; const api = axios.create({ - baseURL: "", + // 基径取面板页面所在路径(末尾补斜杠),反代到子路径下时请求仍落在同一子路径内 + baseURL: getBasePath(), timeout: 120000, }); @@ -20,7 +22,7 @@ api.interceptors.response.use( (error) => { if (error.response?.status === 401) { localStorage.removeItem("panelToken"); - window.location.href = "/"; + window.location.href = getBasePath(); } return Promise.reject(error); } diff --git a/frontend/src/basePath.js b/frontend/src/basePath.js new file mode 100644 index 000000000..6811a29d9 --- /dev/null +++ b/frontend/src/basePath.js @@ -0,0 +1,8 @@ +// 计算控制面板的基径(以 "/" 开头并以 "/" 结尾) +// 面板是单入口应用,文档地址即挂载点:根路径部署为 "/",反代子路径部署为 +// "/AGY2API/" 等形式。部分反代不补齐末尾斜杠,访问地址可能为 "/AGY2API", +// 此处统一补齐,保证 API 请求与页面跳转落在同一子路径下 +export function getBasePath() { + const { pathname } = window.location; + return pathname.endsWith("/") ? pathname : pathname + "/"; +} diff --git a/frontend/src/pages/About.jsx b/frontend/src/pages/About.jsx index bb9629cc2..6198d4abc 100644 --- a/frontend/src/pages/About.jsx +++ b/frontend/src/pages/About.jsx @@ -1,10 +1,12 @@ import { ExternalLink, Github, Info, RefreshCw, Rocket, Zap } from "lucide-react"; +import { getBasePath } from "../basePath.js"; export default function About({ version, onCheckUpdate, checkingUpdate }) { + const apiBase = `${window.location.origin}${getBasePath()}`; const apiEndpoints = [ - { label: "OpenAI 格式", value: `${window.location.origin}/v1/chat/completions` }, - { label: "Gemini 格式", value: `${window.location.origin}/v1beta/models` }, - { label: "Claude 格式", value: `${window.location.origin}/v1/messages` }, + { label: "OpenAI 格式", value: `${apiBase}v1/chat/completions` }, + { label: "Gemini 格式", value: `${apiBase}v1beta/models` }, + { label: "Claude 格式", value: `${apiBase}v1/messages` }, ]; const copyText = (text) => { @@ -134,7 +136,7 @@ export default function About({ version, onCheckUpdate, checkingUpdate }) {

欢迎加入 QQ 群交流讨论!

QQ 群二维码 diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 90e78b34b..948c25834 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -2,6 +2,9 @@ import react from "@vitejs/plugin-react"; import { defineConfig } from "vite"; export default defineConfig({ + // 相对基径:构建产物中的 JS/CSS 等资源引用相对于页面地址解析, + // 支持把面板反向代理到任意子路径(如 /AGY2API/)下访问 + base: "./", plugins: [react()], server: { port: 3000, diff --git a/tests/frontend/base_path.test.mjs b/tests/frontend/base_path.test.mjs new file mode 100644 index 000000000..8caad184c --- /dev/null +++ b/tests/frontend/base_path.test.mjs @@ -0,0 +1,127 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { getBasePath } from "../../frontend/src/basePath.js"; + +function withLocation(pathname, fn) { + const previous = globalThis.window; + globalThis.window = { + location: { + pathname, + href: `http://panel.example${pathname}`, + }, + }; + try { + fn(); + } finally { + globalThis.window = previous; + } +} + +test("getBasePath 面板挂在根路径", () => { + withLocation("/", () => { + assert.equal(getBasePath(), "/"); + }); +}); + +test("getBasePath 面板挂在子路径且带末尾斜杠", () => { + withLocation("/AGY2API/", () => { + assert.equal(getBasePath(), "/AGY2API/"); + }); +}); + +test("getBasePath 面板挂在子路径但不带末尾斜杠", () => { + withLocation("/AGY2API", () => { + assert.equal(getBasePath(), "/AGY2API/"); + }); +}); + +test("getBasePath 多级嵌套路径", () => { + withLocation("/api/v1/panel/", () => { + assert.equal(getBasePath(), "/api/v1/panel/"); + }); + withLocation("/api/v1/panel", () => { + assert.equal(getBasePath(), "/api/v1/panel/"); + }); +}); + +// api.js 在模块加载时读取 window.location 计算 baseURL, +// 每个用例通过查询串导入独立模块实例,避免实例间串扰 +async function importApi(pathname) { + globalThis.window = { + location: { + pathname, + href: `http://panel.example${pathname}`, + }, + }; + return import(`../../frontend/src/api.js?case=${encodeURIComponent(pathname)}`); +} + +const URL_COMPOSITION_CASES = [ + { pathname: "/", url: "/auth/login", expected: "/auth/login" }, + { pathname: "/AGY2API/", url: "/auth/login", expected: "/AGY2API/auth/login" }, + { pathname: "/AGY2API", url: "/auth/login", expected: "/AGY2API/auth/login" }, + { pathname: "/api/v1/panel/", url: "/version/info", expected: "/api/v1/panel/version/info" }, + { pathname: "/AGY2API/", url: "/usage-logs/list", expected: "/AGY2API/usage-logs/list" }, +]; + +for (const testCase of URL_COMPOSITION_CASES) { + test(`api URL 组合 页面 ${testCase.pathname} 请求 ${testCase.url}`, async () => { + const api = (await importApi(testCase.pathname)).default; + assert.equal( + api.getUri({ url: testCase.url }), + testCase.expected, + "请求 URL 应与页面所在基径拼合", + ); + }); +} + +test("api 401 响应后跳转到面板基径而非站点根", async () => { + const api = (await importApi("/AGY2API/")).default; + globalThis.localStorage = { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + }; + api.defaults.adapter = async () => { + const error = new Error("Request failed with status code 401"); + error.response = { status: 401, data: { detail: "密码错误" } }; + throw error; + }; + + await assert.rejects(api.post("/auth/login", { password: "wrong" })); + assert.equal(globalThis.window.location.href, "/AGY2API/"); +}); + +test("api 401 响应后根路径部署跳转到根", async () => { + const api = (await importApi("/")).default; + globalThis.localStorage = { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + }; + api.defaults.adapter = async () => { + const error = new Error("Request failed with status code 401"); + error.response = { status: 401, data: { detail: "密码错误" } }; + throw error; + }; + + await assert.rejects(api.get("/config/get")); + assert.equal(globalThis.window.location.href, "/"); +}); + +test("api 请求拦截器附加登录 token", async () => { + const api = (await importApi("/AGY2API/")).default; + globalThis.localStorage = { + getItem: (key) => (key === "panelToken" ? "test-token" : null), + setItem: () => {}, + removeItem: () => {}, + }; + let capturedConfig = null; + api.defaults.adapter = async (config) => { + capturedConfig = config; + return { data: {}, status: 200, statusText: "OK", headers: {}, config }; + }; + + await api.get("/version/info"); + assert.equal(capturedConfig.headers.Authorization, "Bearer test-token"); +}); diff --git a/tests/frontend/browser_subpath_check.mjs b/tests/frontend/browser_subpath_check.mjs new file mode 100644 index 000000000..1265d21bf --- /dev/null +++ b/tests/frontend/browser_subpath_check.mjs @@ -0,0 +1,222 @@ +/** + * 浏览器级反代子路径验证脚本 + * + * 用真实 Chromium 复现并验证控制台报错与白屏问题: + * 1. 上游构建产物(绝对路径引用)+ 子路径反代: + * 控制台出现模块脚本 MIME 类型报错,页面白屏(上游子路径故障现象) + * 2. 分支构建产物(相对路径引用)+ 子路径反代: + * 无控制台报错,面板正常渲染,登录流程可用 + * 3. 分支构建产物 + 不带末尾斜杠的子路径: + * 自动补齐斜杠后正常渲染 + * + * 依赖可选的 playwright-core,未安装或缺少浏览器时打印 SKIP 并以退出码 0 结束: + * cd frontend && npm i -D playwright-core && npx playwright-core install chromium + * + * 用法: + * node tests/frontend/browser_subpath_check.mjs \ + * --branch-subpath http://127.0.0.1:23111/AGY2API/ \ + * --upstream-subpath http://127.0.0.1:23112/AGY2API/ \ + * --branch-no-slash http://127.0.0.1:23111/AGY2API \ + * --password e2e-test-password + */ + +import { createRequire } from "node:module"; + +const require = createRequire(import.meta.url); + +function parseArgs(argv) { + const args = {}; + for (let i = 2; i < argv.length; i += 2) { + args[argv[i].replace(/^--/, "")] = argv[i + 1]; + } + return args; +} + +const args = parseArgs(process.argv); +const PANEL_PASSWORD = args.password || "e2e-test-password"; + +let chromium; +try { + ({ chromium } = require("playwright-core")); +} catch { + console.log("SKIP: 未安装 playwright-core,跳过浏览器级验证"); + process.exit(0); +} + +// 每个场景独立启动浏览器:故障页面可能导致浏览器进程崩溃,场景之间互相隔离 +async function withBrowser(fn) { + const browser = await chromium.launch({ + headless: true, + args: ["--no-sandbox"], + }); + try { + return await fn(browser); + } finally { + try { + await browser.close(); + } catch { + // 浏览器可能已崩溃,忽略关闭错误 + } + } +} + +function collectPageDiagnostics(page) { + const consoleErrors = []; + const requestFailures = []; + page.on("console", (message) => { + if (message.type() === "error") { + consoleErrors.push(message.text()); + } + }); + page.on("pageerror", (error) => { + consoleErrors.push(`pageerror: ${error.message}`); + }); + page.on("requestfailed", (request) => { + requestFailures.push( + `${request.url()} ${request.failure()?.errorText || ""}`.trim(), + ); + }); + return { consoleErrors, requestFailures }; +} + +async function waitForLoginUi(page, timeout = 20000) { + await page.waitForSelector("text=登录控制面板", { timeout }); +} + +async function assertBranchPageHealthy(url, label) { + return withBrowser(async (activeBrowser) => { + const context = await activeBrowser.newContext(); + const page = await context.newPage(); + const { consoleErrors, requestFailures } = collectPageDiagnostics(page); + await page.goto(url, { waitUntil: "load", timeout: 30000 }); + await waitForLoginUi(page); + + const problems = []; + if (consoleErrors.length > 0) { + problems.push(`控制台存在报错: ${consoleErrors.join(" | ")}`); + } + if (requestFailures.length > 0) { + problems.push(`存在失败请求: ${requestFailures.join(" | ")}`); + } + + if (problems.length === 0) { + // 登录流程:验证子路径下的 API 请求与鉴权 + await page.fill('input[type="password"]', PANEL_PASSWORD); + await page.click('button:has-text("登录")'); + await page.waitForSelector("text=OAuth 认证", { timeout: 20000 }); + + // 项目信息页:API 端点展示与静态图片应基于同一子路径 + await page.click('button:has-text("项目信息")'); + await page.waitForSelector("text=API 端点(点击复制)", { timeout: 20000 }); + const endpointText = await page.locator("code").first().innerText(); + if (!endpointText.includes("/AGY2API/v1/chat/completions")) { + problems.push(`API 端点展示未包含子路径: ${endpointText}`); + } + const imageLoaded = await page + .waitForFunction( + () => { + const img = document.querySelector('img[alt="QQ 群二维码"]'); + return !!img && img.complete && img.naturalWidth > 0; + }, + { timeout: 10000 }, + ) + .then(() => true) + .catch(() => false); + if (!imageLoaded) { + problems.push("QQ 群二维码图片未加载"); + } + } + await context.close(); + if (problems.length > 0) { + throw new Error(`${label} ${problems.join(";")}`); + } + }); +} + +async function checkUpstreamReproducesFailure() { + return withBrowser(async (browser) => { + const context = await browser.newContext(); + const page = await context.newPage(); + const { consoleErrors } = collectPageDiagnostics(page); + await page.goto(args["upstream-subpath"], { + waitUntil: "load", + timeout: 30000, + }); + await page.waitForTimeout(3000); + + const problems = []; + const mimeError = consoleErrors.find((text) => + /module script|MIME type/i.test(text), + ); + if (!mimeError) { + problems.push( + `未复现模块脚本 MIME 报错,控制台输出: ${consoleErrors.join(" | ") || "(空)"}`, + ); + } + const loginVisible = await page + .locator("text=登录控制面板") + .count() + .then((count) => count > 0); + if (loginVisible) { + problems.push("页面不应正常渲染登录界面"); + } + await context.close(); + if (problems.length > 0) { + throw new Error(`上游子路径场景 ${problems.join(";")}`); + } + }); +} + +async function checkNoTrailingSlash() { + return withBrowser(async (browser) => { + const context = await browser.newContext(); + const page = await context.newPage(); + await page.goto(args["branch-no-slash"], { + waitUntil: "load", + timeout: 30000, + }); + const problems = []; + if (!page.url().endsWith("/AGY2API/")) { + problems.push(`不带末尾斜杠的访问未补齐斜杠,最终地址: ${page.url()}`); + } + const { consoleErrors, requestFailures } = collectPageDiagnostics(page); + await waitForLoginUi(page); + if (consoleErrors.length > 0) { + problems.push(`控制台存在报错: ${consoleErrors.join(" | ")}`); + } + if (requestFailures.length > 0) { + problems.push(`存在失败请求: ${requestFailures.join(" | ")}`); + } + await context.close(); + if (problems.length > 0) { + throw new Error(`分支无尾斜杠场景 ${problems.join(";")}`); + } + }); +} + +async function run() { + const scenarios = [ + ["上游子路径场景(复现故障)", () => checkUpstreamReproducesFailure()], + ["分支子路径场景", () => assertBranchPageHealthy(args["branch-subpath"], "分支子路径场景")], + ["分支无尾斜杠场景", () => checkNoTrailingSlash()], + ]; + + const failures = []; + for (const [name, scenario] of scenarios) { + try { + await scenario(); + console.log(`PASS: ${name}`); + } catch (error) { + failures.push(`${name}: ${error.message}`); + console.log(`FAIL: ${name}: ${error.message}`); + } + } + + if (failures.length > 0) { + process.exit(1); + } + console.log("PASS: 浏览器级反代子路径验证全部通过"); + process.exit(0); +} + +run(); diff --git a/tests/frontend/build_output.test.mjs b/tests/frontend/build_output.test.mjs new file mode 100644 index 000000000..4d0c1973e --- /dev/null +++ b/tests/frontend/build_output.test.mjs @@ -0,0 +1,100 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { existsSync, readFileSync } from "node:fs"; +import { execFileSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; + +const repoRoot = fileURLToPath(new URL("../../", import.meta.url)); +const distDir = path.join(repoRoot, "dist"); +const distIndexPath = path.join(distDir, "index.html"); + +// 上游构建产物(提交 bcb264b):使用绝对路径引用, +// 反代到子路径时浏览器会绕开子路径请求资源(控制台 MIME 报错、页面白屏) +const PRE_FIX_COMMIT = "bcb264b"; + +function readDistIndex() { + return readFileSync(distIndexPath, "utf8"); +} + +function attrValues(html, tag, attr) { + const pattern = new RegExp(`<${tag}[^>]*\\s${attr}="([^"]*)"`, "gi"); + return [...html.matchAll(pattern)].map((match) => match[1]); +} + +test("构建产物中脚本与样式引用均为相对路径", () => { + const html = readDistIndex(); + const refs = [ + ...attrValues(html, "script", "src"), + ...attrValues(html, "link", "href"), + ]; + assert.ok(refs.length >= 3, "应包含模块脚本、样式与 favicon 引用"); + for (const ref of refs) { + assert.ok( + ref.startsWith("./") && !ref.startsWith("/"), + `引用应为相对路径,实际为 ${ref}`, + ); + assert.ok( + existsSync(path.join(distDir, ref)), + `dist 中不存在被引用的文件 ${ref}`, + ); + } +}); + +test("构建产物中不存在指向站点根的属性引用", () => { + const html = readDistIndex(); + assert.doesNotMatch( + html, + /(?:src|href)="\/(?!\/)/, + "不允许出现 /assets、/favicon.ico 等绝对路径引用", + ); +}); + +test("构建产物 bundle 包含页面基径计算逻辑", () => { + const html = readDistIndex(); + const scriptSrc = attrValues(html, "script", "src")[0]; + const bundle = readFileSync(path.join(distDir, scriptSrc), "utf8"); + assert.match(bundle, /window\.location/); + assert.match(bundle, /endsWith\("\/"\)/); +}); + +test("末尾斜杠规整脚本位于模块脚本之前", () => { + const html = readDistIndex(); + const inlineIdx = html.indexOf("location.pathname.endsWith"); + const moduleIdx = html.search(/]*type="module"/); + assert.ok(inlineIdx !== -1, "应包含末尾斜杠规整脚本"); + assert.ok(moduleIdx !== -1, "应包含模块脚本"); + assert.ok( + inlineIdx < moduleIdx, + "规整脚本必须先于模块脚本,保证模块加载失败时仍能跳转", + ); +}); + +test("上游构建产物使用绝对路径引用(反代子路径故障的根因)", (t) => { + let upstreamHtml; + try { + upstreamHtml = execFileSync( + "git", + ["show", `${PRE_FIX_COMMIT}:dist/index.html`], + { cwd: repoRoot, encoding: "utf8" }, + ); + } catch { + t.skip("当前环境无 git 历史,跳过上游产物对比"); + return; + } + assert.match( + upstreamHtml, + /]*src="\/assets\//, + "上游产物应以绝对路径引用模块脚本", + ); + assert.match( + upstreamHtml, + /]*href="\/favicon\.ico"/, + "上游产物应以绝对路径引用 favicon", + ); + assert.notEqual( + upstreamHtml, + readDistIndex(), + "分支产物应与上游产物存在差异", + ); +}); diff --git a/tests/test_panel_static.py b/tests/test_panel_static.py new file mode 100644 index 000000000..05db1db00 --- /dev/null +++ b/tests/test_panel_static.py @@ -0,0 +1,116 @@ +"""面板静态资源路由测试(FastAPI TestClient) + +覆盖控制面板首页、assets、favicon、docs 静态目录的响应内容与内容类型, +以及路径穿越防护。运行方式(项目根目录、使用项目虚拟环境): + + python tests/test_panel_static.py +""" + +import os +import re +import shutil +import sys +import tempfile +import unittest +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent + +# 在临时目录的代码树副本中运行:docs 静态目录挂载依赖仓库根目录作为工作目录, +# 应用启动还会在数据库目录写入运行时文件,避免污染仓库 +TREE = Path(tempfile.mkdtemp(prefix="agy2api-static-")) / "tree" +shutil.copytree( + REPO_ROOT, + TREE, + ignore=shutil.ignore_patterns( + ".git", "node_modules", "creds", "data", "__pycache__", "*.pyc" + ), +) +os.chdir(TREE) +sys.path.insert(0, str(TREE)) + +from fastapi.testclient import TestClient # noqa: E402 + +from web import app # noqa: E402 + + +class PanelStaticRoutesTest(unittest.TestCase): + """面板静态资源路由""" + + @classmethod + def setUpClass(cls): + cls.client = TestClient(app) + # 进入上下文触发 lifespan:初始化配置缓存与数据库 + cls.client.__enter__() + cls.response = cls.client.get("/") + cls.index_html = cls.response.text + + @classmethod + def tearDownClass(cls): + cls.client.__exit__(None, None, None) + + def test_index_returns_html(self): + self.assertEqual(self.response.status_code, 200) + self.assertIn("text/html", self.response.headers["content-type"]) + + def test_index_assets_references_are_relative(self): + refs = re.findall(r'(?:src|href)="([^"]+)"', self.index_html) + asset_refs = [ref for ref in refs if "assets/" in ref or "favicon" in ref] + self.assertTrue(asset_refs, "首页应引用构建产物资源") + for ref in asset_refs: + self.assertTrue( + ref.startswith("./"), + f"资源引用应为相对路径,实际为 {ref}", + ) + + def test_index_has_no_root_absolute_asset_reference(self): + self.assertIsNone( + re.search(r'(?:src|href)="/(?!/)', self.index_html), + "首页不允许出现指向站点根的绝对资源引用", + ) + + def test_asset_script_served_with_javascript_mime(self): + match = re.search(r']*src="([^"]+)"', self.index_html) + self.assertIsNotNone(match) + response = self.client.get(match.group(1)) + self.assertEqual(response.status_code, 200) + self.assertNotIn("text/html", response.headers["content-type"]) + self.assertIn("javascript", response.headers["content-type"]) + + def test_asset_stylesheet_served_with_css_mime(self): + match = re.search(r']*rel="stylesheet"[^>]*href="([^"]+)"', self.index_html) + self.assertIsNotNone(match) + response = self.client.get(match.group(1)) + self.assertEqual(response.status_code, 200) + self.assertIn("text/css", response.headers["content-type"]) + + def test_favicon_served_with_icon_mime(self): + response = self.client.get("/favicon.ico") + self.assertEqual(response.status_code, 200) + self.assertIn("image/x-icon", response.headers["content-type"]) + + def test_docs_static_file_served(self): + response = self.client.get("/docs/qq-group.jpg") + self.assertEqual(response.status_code, 200) + self.assertIn("image", response.headers["content-type"]) + + def test_asset_path_traversal_rejected(self): + response = self.client.get("/assets/%2e%2e/web.py") + self.assertEqual(response.status_code, 404) + + def test_missing_asset_returns_404(self): + response = self.client.get("/assets/not-exist.js") + self.assertEqual(response.status_code, 404) + + def test_login_rejects_wrong_password(self): + response = self.client.post( + "/auth/login", json={"password": "definitely-wrong"} + ) + self.assertEqual(response.status_code, 401) + + +if __name__ == "__main__": + try: + unittest.main(verbosity=2) + finally: + shutil.rmtree(TREE.parent, ignore_errors=True) diff --git a/tests/test_reverse_proxy_e2e.py b/tests/test_reverse_proxy_e2e.py new file mode 100644 index 000000000..e9a69d269 --- /dev/null +++ b/tests/test_reverse_proxy_e2e.py @@ -0,0 +1,475 @@ +"""反向代理子路径部署端到端测试 + +用真实 uvicorn 进程 + 模拟反代服务器覆盖以下场景: + +1. 上游构建产物(绝对路径引用)经子路径反代:资源落到站点根, + 复现控制台 MIME 报错与 favicon 404(上游子路径故障现象) +2. 分支构建产物(相对路径引用)经子路径反代:JS/CSS/favicon/docs 全部可用, + API 登录与鉴权请求正常 +3. 根路径部署回归:资源与 API 与上游行为一致 +4. 反代保留路径前缀 + PATH_PREFIX:路由按去前缀后的路径匹配 +5. 不带末尾斜杠的访问:页面携带末尾斜杠规整脚本 +6. 浏览器级验证(playwright-core):复现上游 MIME 报错白屏,确认分支下渲染与登录正常 + +运行方式(项目根目录、使用项目虚拟环境): + + python tests/test_reverse_proxy_e2e.py +""" + +import json +import os +import re +import shutil +import socket +import subprocess +import sys +import tarfile +import tempfile +import threading +import time +import unittest +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +from urllib.error import HTTPError +from urllib.parse import urljoin +from urllib.request import Request, urlopen + +REPO_ROOT = Path(__file__).resolve().parent.parent + +# 上游构建产物(提交 bcb264b):使用绝对路径引用 +PRE_FIX_COMMIT = "bcb264b" + +PANEL_PASSWORD = "e2e-test-password" +PROXY_PREFIX = "/AGY2API" +READY_TIMEOUT_SECONDS = 60 + +IGNORE_NAMES = shutil.ignore_patterns( + ".git", "node_modules", "creds", "data", "__pycache__", "*.pyc" +) + + +class HttpResult: + def __init__(self, url, status, headers, body): + self.url = url + self.status = status + self.headers = headers + self.body = body + + @property + def content_type(self): + return self.headers.get("Content-Type", "") + + @property + def text(self): + return self.body.decode("utf-8") + + +def http_request(method, url, json_body=None, headers=None, timeout=60): + data = None + request_headers = dict(headers or {}) + if json_body is not None: + data = json.dumps(json_body).encode("utf-8") + request_headers["Content-Type"] = "application/json" + request = Request(url, data=data, headers=request_headers, method=method) + try: + with urlopen(request, timeout=timeout) as response: + return HttpResult(url, response.status, response.headers, response.read()) + except HTTPError as error: + return HttpResult(url, error.code, error.headers, error.read()) + + +def free_port(): + with socket.socket() as sock: + sock.bind(("127.0.0.1", 0)) + return sock.getsockname()[1] + + +class SubPathProxyHandler(BaseHTTPRequestHandler): + """模拟把 /AGY2API/ 反代到后端的服务器""" + + backend_url = "http://127.0.0.1:1" + prefix = PROXY_PREFIX + # preserve_prefix 为 True 时原样转发前缀(对应 proxy_pass 不带 URI 的反代), + # 为 False 时剥掉前缀再转发(对应 proxy_pass 带 URI 的反代) + preserve_prefix = False + + def log_message(self, fmt, *args): + pass + + def do_GET(self): + self._proxy() + + def do_POST(self): + self._proxy() + + def _proxy(self): + path = self.path + if path == self.prefix: + # location /AGY2API(无尾斜杠)反代:精确命中映射到后端根路径 + target_path = path if self.preserve_prefix else "/" + elif path.startswith(self.prefix + "/"): + target_path = path if self.preserve_prefix else path[len(self.prefix):] + else: + # 反代端口上的其他服务:面板引用绝对路径时请求会落到这里。 + # 按现场情况模拟——资源路径返回 HTML(SPA catch-all,复现模块脚本 + # MIME 类型报错),favicon 返回 404(复现 favicon 404 报错) + if self.path.rstrip("/").endswith("/favicon.ico"): + self._send(404, "text/html", b"404 Not Found") + else: + body = ( + b"Other Service" + b"other service" + ) + self._send(200, "text/html", body) + return + + body = None + length = self.headers.get("Content-Length") + if length: + body = self.rfile.read(int(length)) + forward_headers = {} + for name in ("Content-Type", "Authorization", "Accept"): + value = self.headers.get(name) + if value: + forward_headers[name] = value + + request = Request( + self.backend_url + target_path, + data=body, + method=self.command, + headers=forward_headers, + ) + try: + with urlopen(request, timeout=60) as response: + self._send( + response.status, + response.headers.get("Content-Type", "application/octet-stream"), + response.read(), + ) + except HTTPError as error: + self._send( + error.code, + error.headers.get("Content-Type", "application/octet-stream"), + error.read(), + ) + + def _send(self, status, content_type, payload): + self.send_response(status) + self.send_header("Content-Type", content_type) + self.send_header("Content-Length", str(len(payload))) + self.end_headers() + self.wfile.write(payload) + + +def start_proxy(backend_port, preserve_prefix=False): + port = free_port() + + class Handler(SubPathProxyHandler): + pass + + Handler.backend_url = f"http://127.0.0.1:{backend_port}" + Handler.preserve_prefix = preserve_prefix + server = ThreadingHTTPServer(("127.0.0.1", port), Handler) + server.daemon_threads = True + + thread = threading.Thread(target=server.serve_forever, daemon=True) + thread.start() + return server, port + + +def start_backend(tree, path_prefix=""): + port = free_port() + env = dict(os.environ) + env["HOST"] = "127.0.0.1" + env["PORT"] = str(port) + env["PANEL_PASSWORD"] = PANEL_PASSWORD + if path_prefix: + env["PATH_PREFIX"] = path_prefix + process = subprocess.Popen( + [sys.executable, "web.py"], + cwd=str(tree), + env=env, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + _wait_ready(port) + return process, port + + +def _wait_ready(port): + deadline = time.time() + READY_TIMEOUT_SECONDS + while time.time() < deadline: + try: + result = http_request("GET", f"http://127.0.0.1:{port}/", timeout=5) + if result.status == 200: + return + except Exception: + pass + time.sleep(0.4) + raise RuntimeError(f"后端在 {READY_TIMEOUT_SECONDS} 秒内未就绪: 127.0.0.1:{port}") + + +def extract_upstream_tree(target): + """从修复前提交导出完整代码树(含当时的绝对路径构建产物)""" + target.mkdir(parents=True, exist_ok=True) + archive_path = target.parent / "upstream.tar" + with open(archive_path, "wb") as archive_file: + subprocess.run( + ["git", "archive", PRE_FIX_COMMIT], + cwd=str(REPO_ROOT), + stdout=archive_file, + check=True, + ) + with tarfile.open(archive_path) as tar: + tar.extractall(path=str(target), filter="data") + archive_path.unlink() + + +class ReverseProxySubPathE2ETest(unittest.TestCase): + """子路径反代端到端场景""" + + @classmethod + def setUpClass(cls): + cls.tmp = Path(tempfile.mkdtemp(prefix="agy2api-e2e-")) + cls.processes = [] + cls.servers = [] + + try: + # 上游代码树(修复前) + cls.upstream_tree = cls.tmp / "upstream" + extract_upstream_tree(cls.upstream_tree) + + # 分支代码树:当前工作区副本(node_modules 等运行时无关内容除外) + cls.branch_tree = cls.tmp / "branch" + shutil.copytree(REPO_ROOT, cls.branch_tree, ignore=IGNORE_NAMES) + cls.branch_rootpath_tree = cls.tmp / "branch-rootpath" + shutil.copytree(REPO_ROOT, cls.branch_rootpath_tree, ignore=IGNORE_NAMES) + + # 场景一:上游构建 + 前缀剥离反代(复现故障) + cls.upstream_process, cls.upstream_port = start_backend(cls.upstream_tree) + cls.processes.append(cls.upstream_process) + cls.upstream_proxy, cls.upstream_proxy_port = start_proxy(cls.upstream_port) + cls.servers.append(cls.upstream_proxy) + + # 场景二:分支构建 + 前缀剥离反代 + cls.branch_process, cls.branch_port = start_backend(cls.branch_tree) + cls.processes.append(cls.branch_process) + cls.branch_proxy, cls.branch_proxy_port = start_proxy(cls.branch_port) + cls.servers.append(cls.branch_proxy) + + # 场景四:分支构建 + 前缀保留反代 + PATH_PREFIX + cls.rootpath_process, cls.rootpath_port = start_backend( + cls.branch_rootpath_tree, path_prefix=PROXY_PREFIX + ) + cls.processes.append(cls.rootpath_process) + cls.rootpath_proxy, cls.rootpath_proxy_port = start_proxy( + cls.rootpath_port, preserve_prefix=True + ) + cls.servers.append(cls.rootpath_proxy) + except Exception: + cls._teardown() + raise + + @classmethod + def tearDownClass(cls): + cls._teardown() + + @classmethod + def _teardown(cls): + for process in getattr(cls, "processes", []): + process.terminate() + try: + process.wait(timeout=10) + except subprocess.TimeoutExpired: + process.kill() + for server in getattr(cls, "servers", []): + server.shutdown() + server.server_close() + if getattr(cls, "tmp", None) and cls.tmp.exists(): + shutil.rmtree(cls.tmp, ignore_errors=True) + + # ---------- 场景一:上游构建产物在子路径反代下故障 ---------- + + def test_upstream_absolute_assets_fall_back_to_site_root(self): + page = http_request( + "GET", f"http://127.0.0.1:{self.upstream_proxy_port}{PROXY_PREFIX}/" + ) + self.assertEqual(page.status, 200) + self.assertIn("text/html", page.content_type) + + script_src = re.search(r']*src="([^"]+)"', page.text).group(1) + self.assertTrue( + script_src.startswith("/assets/"), + "上游构建产物应以绝对路径引用模块脚本", + ) + + # 浏览器将绝对路径解析到站点根,该路径在反代端口上不属于本应用 + asset = http_request( + "GET", f"http://127.0.0.1:{self.upstream_proxy_port}{script_src}" + ) + self.assertIn( + "text/html", + asset.content_type, + "上游场景下脚本请求应返回 HTML(复现模块脚本 MIME 报错)", + ) + + favicon = http_request( + "GET", f"http://127.0.0.1:{self.upstream_proxy_port}/favicon.ico" + ) + self.assertEqual(favicon.status, 404, "上游场景下 favicon 请求应 404") + + # ---------- 场景二:分支构建产物在子路径反代下可用 ---------- + + def test_branch_assets_load_under_subpath_proxy(self): + page = http_request( + "GET", f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}/" + ) + self.assertEqual(page.status, 200) + self.assertIn("text/html", page.content_type) + + for script_src in re.findall(r']*src="([^"]+)"', page.text): + self.assertTrue(script_src.startswith("./")) + asset = http_request("GET", urljoin(page.url, script_src)) + self.assertEqual(asset.status, 200) + self.assertIn("javascript", asset.content_type) + self.assertNotIn("text/html", asset.content_type) + expected = (self.branch_tree / "dist" / script_src[2:]).read_bytes() + self.assertEqual(asset.body, expected, f"{script_src} 内容应与后端一致") + + for css_href in re.findall(r']*href="([^"]+)"', page.text): + self.assertTrue(css_href.startswith("./")) + asset = http_request("GET", urljoin(page.url, css_href)) + self.assertEqual(asset.status, 200) + if css_href.endswith(".css"): + self.assertIn("text/css", asset.content_type) + else: + self.assertIn("image", asset.content_type) + + favicon = http_request("GET", urljoin(page.url, "./favicon.ico")) + self.assertEqual(favicon.status, 200) + self.assertIn("image/x-icon", favicon.content_type) + + docs_image = http_request( + "GET", + f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}/docs/qq-group.jpg", + ) + self.assertEqual(docs_image.status, 200) + self.assertIn("image", docs_image.content_type) + + def test_branch_api_calls_under_subpath_proxy(self): + base = f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}" + + login = http_request( + "POST", f"{base}/auth/login", json_body={"password": PANEL_PASSWORD} + ) + self.assertEqual(login.status, 200) + token = json.loads(login.text)["token"] + + wrong = http_request( + "POST", f"{base}/auth/login", json_body={"password": "wrong-password"} + ) + self.assertEqual(wrong.status, 401) + + version = http_request("GET", f"{base}/version/info") + self.assertEqual(version.status, 200) + self.assertTrue(json.loads(version.text)["success"]) + + config = http_request( + "GET", f"{base}/config/get", headers={"Authorization": f"Bearer {token}"} + ) + self.assertEqual(config.status, 200) + + # ---------- 场景三:根路径部署回归 ---------- + + def test_branch_root_deployment_regression(self): + base = f"http://127.0.0.1:{self.branch_port}" + page = http_request("GET", f"{base}/") + self.assertEqual(page.status, 200) + + for script_src in re.findall(r']*src="([^"]+)"', page.text): + asset = http_request("GET", urljoin(page.url, script_src)) + self.assertEqual(asset.status, 200) + self.assertIn("javascript", asset.content_type) + + favicon = http_request("GET", f"{base}/favicon.ico") + self.assertEqual(favicon.status, 200) + + login = http_request( + "POST", f"{base}/auth/login", json_body={"password": PANEL_PASSWORD} + ) + self.assertEqual(login.status, 200) + + # ---------- 场景四:反代保留前缀 + PATH_PREFIX ---------- + + def test_branch_prefix_preserving_proxy_with_path_prefix(self): + base = f"http://127.0.0.1:{self.rootpath_proxy_port}{PROXY_PREFIX}" + page = http_request("GET", f"{base}/") + self.assertEqual(page.status, 200) + self.assertIn("text/html", page.content_type) + + for script_src in re.findall(r']*src="([^"]+)"', page.text): + asset = http_request("GET", urljoin(page.url, script_src)) + self.assertEqual(asset.status, 200) + self.assertIn("javascript", asset.content_type) + + favicon = http_request("GET", urljoin(page.url, "./favicon.ico")) + self.assertEqual(favicon.status, 200) + + login = http_request( + "POST", f"{base}/auth/login", json_body={"password": PANEL_PASSWORD} + ) + self.assertEqual(login.status, 200) + + # ---------- 场景五:不带末尾斜杠的访问 ---------- + + def test_no_trailing_slash_url_serves_normalization_script(self): + page = http_request( + "GET", f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}" + ) + self.assertEqual(page.status, 200) + + inline_index = page.text.find("location.pathname.endsWith") + module_index = re.search(r']*type="module"', page.text).start() + self.assertNotEqual(inline_index, -1, "页面应包含末尾斜杠规整脚本") + self.assertLess( + inline_index, + module_index, + "规整脚本应先于模块脚本,保证模块加载失败时仍能跳转", + ) + + # ---------- 场景六:浏览器级验证(控制台报错与渲染) ---------- + + def test_browser_console_and_rendering(self): + node = shutil.which("node") or shutil.which("node.exe") + if not node: + self.skipTest("未找到 node,跳过浏览器级验证") + result = subprocess.run( + [ + node, + str(REPO_ROOT / "tests" / "frontend" / "browser_subpath_check.mjs"), + "--branch-subpath", + f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}/", + "--upstream-subpath", + f"http://127.0.0.1:{self.upstream_proxy_port}{PROXY_PREFIX}/", + "--branch-no-slash", + f"http://127.0.0.1:{self.branch_proxy_port}{PROXY_PREFIX}", + "--password", + PANEL_PASSWORD, + ], + cwd=str(REPO_ROOT), + capture_output=True, + text=True, + timeout=300, + ) + sys.stdout.write(result.stdout) + if "SKIP:" in result.stdout: + self.skipTest("playwright-core 不可用,跳过浏览器级验证") + self.assertEqual( + result.returncode, + 0, + f"浏览器验证失败:\n{result.stdout}\n{result.stderr}", + ) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/web.py b/web.py index 841423979..b9b8b17d7 100644 --- a/web.py +++ b/web.py @@ -129,6 +129,32 @@ async def __call__(self, scope, receive, send): await self.app(scope, receive, send) +class PathPrefixMiddleware: + """ + 路径前缀剥离中间件(纯 ASGI) + + 反代保留路径前缀时(如 location /AGY2API/ 搭配不带 URI 的 proxy_pass), + 请求路径形如 /AGY2API/xxx。配置 PATH_PREFIX 后,中间件在路由匹配前 + 剥掉该前缀;未配置时请求原样下发。 + """ + + def __init__(self, app, prefix: str): + self.app = app + self.prefix = prefix + + async def __call__(self, scope, receive, send): + if scope["type"] == "http": + path = scope.get("path", "") + if path == self.prefix or path.startswith(self.prefix + "/"): + scope["path"] = path[len(self.prefix):] or "/" + raw_path = scope.get("raw_path") + if isinstance(raw_path, bytes) and raw_path.startswith( + self.prefix.encode("ascii") + ): + scope["raw_path"] = raw_path[len(self.prefix):] or b"/" + await self.app(scope, receive, send) + + # 创建FastAPI应用 app = FastAPI( title="AGY2API", @@ -146,9 +172,16 @@ async def __call__(self, scope, receive, send): allow_headers=["*"], ) -# IP 白名单中间件(需在最外层,先于 CORS 与所有路由执行) +# IP 白名单中间件(先于 CORS 与所有路由执行) app.add_middleware(IPWhitelistMiddleware) +# 路径前缀剥离中间件(配置 PATH_PREFIX 时启用,先于白名单与所有路由执行, +# 使反代保留前缀的请求按剥掉前缀后的路径匹配路由) +path_prefix = os.environ.get("PATH_PREFIX", "").rstrip("/") +if path_prefix: + app.add_middleware(PathPrefixMiddleware, prefix=path_prefix) + log.info(f"已启用路径前缀剥离: {path_prefix}") + # 挂载路由器 # Antigravity路由 - 处理OpenAI格式请求并转换为Antigravity API app.include_router(antigravity_openai_router, prefix="", tags=["Antigravity OpenAI API"])