From 001e328ce84db53333138c6a93df234ed2c59b25 Mon Sep 17 00:00:00 2001 From: maziggy Date: Sun, 1 Feb 2026 08:15:54 +0100 Subject: [PATCH] Add configurable FPS and status-only mode to streaming overlay - Add ?fps=N parameter to control camera frame rate (1-30, default 15) - Add ?camera=false parameter for status-only overlay without camera feed - Increase default camera FPS from 10 to 15 across all camera views - Add comprehensive tests for new overlay parameters Resolves user request on Issue #164 for higher FPS and status-only option. --- CHANGELOG.md | 6 + README.md | 2 +- .../pages/StreamOverlayPage.test.tsx | 133 ++++++++++++++++++ .../src/components/EmbeddedCameraViewer.tsx | 2 +- frontend/src/pages/CameraPage.tsx | 2 +- frontend/src/pages/StreamOverlayPage.tsx | 32 +++-- .../{index-DAZbTvYK.js => index-CxQsg2-C.js} | 4 +- static/index.html | 2 +- 8 files changed, 168 insertions(+), 15 deletions(-) rename static/assets/{index-DAZbTvYK.js => index-CxQsg2-C.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13251aca8..20756190c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to Bambuddy will be documented in this file. ## [0.1.7b] - Not released +### Enhancements +- **Streaming Overlay Improvements** (Issue #164): + - **Configurable FPS**: Add `?fps=30` parameter to control camera frame rate (1-30, default 15) + - **Status-only mode**: Add `?camera=false` parameter to hide camera and show only status overlay on black background + - Increased default camera FPS from 10 to 15 for smoother video across all camera views + ## [0.1.6-final] - 2026-01-31 ### New Features diff --git a/README.md b/README.md index 2e5c1a24c..f5872d234 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ ### 📊 Monitoring & Control - Real-time printer status via WebSocket - Live camera streaming (MJPEG) & snapshots with multi-viewer support -- **Streaming overlay for OBS** - Embeddable page with camera + status for live streaming (`/overlay/:printerId`) +- **Streaming overlay for OBS** - Embeddable page with camera + status for live streaming (`/overlay/:printerId`), configurable FPS (`?fps=30`), status-only mode (`?camera=false`) - External camera support (MJPEG, RTSP, HTTP snapshot, USB/V4L2) with layer-based timelapse - **Build plate empty detection** - Auto-pause print if objects detected on plate (multi-reference calibration, ROI adjustment) - Fan status monitoring (part cooling, auxiliary, chamber) diff --git a/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx b/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx index 405fb1c82..2babedab5 100644 --- a/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx +++ b/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx @@ -207,6 +207,139 @@ describe('StreamOverlayPage', () => { }); }); + describe('FPS configuration', () => { + it('uses default FPS of 15 when not specified', async () => { + renderOverlayPage(1); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=15'); + }); + }); + + it('uses custom FPS when specified in query params', async () => { + renderOverlayPage(1, '?fps=30'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=30'); + }); + }); + + it('clamps FPS to maximum of 30', async () => { + renderOverlayPage(1, '?fps=60'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=30'); + }); + }); + + it('clamps FPS to minimum of 1', async () => { + renderOverlayPage(1, '?fps=0'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=1'); + }); + }); + + it('handles invalid FPS value gracefully', async () => { + renderOverlayPage(1, '?fps=invalid'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + // Should fall back to default of 15 + expect(img.src).toContain('fps=15'); + }); + }); + }); + + describe('camera toggle (status-only mode)', () => { + it('shows camera by default', async () => { + renderOverlayPage(1); + + await waitFor(() => { + expect(screen.getByAltText('Camera stream')).toBeInTheDocument(); + }); + }); + + it('hides camera when camera=false', async () => { + renderOverlayPage(1, '?camera=false'); + + await waitFor(() => { + // Status should still be visible + expect(screen.getByText('Printer is idle')).toBeInTheDocument(); + }); + + // Camera should not be rendered + expect(screen.queryByAltText('Camera stream')).not.toBeInTheDocument(); + }); + + it('hides camera when camera=0', async () => { + renderOverlayPage(1, '?camera=0'); + + await waitFor(() => { + expect(screen.getByText('Printer is idle')).toBeInTheDocument(); + }); + + expect(screen.queryByAltText('Camera stream')).not.toBeInTheDocument(); + }); + + it('shows camera when camera=true', async () => { + renderOverlayPage(1, '?camera=true'); + + await waitFor(() => { + expect(screen.getByAltText('Camera stream')).toBeInTheDocument(); + }); + }); + + it('shows camera when camera=1', async () => { + renderOverlayPage(1, '?camera=1'); + + await waitFor(() => { + expect(screen.getByAltText('Camera stream')).toBeInTheDocument(); + }); + }); + }); + + describe('combined parameters', () => { + it('supports fps and camera together', async () => { + renderOverlayPage(1, '?fps=25&camera=true'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=25'); + }); + }); + + it('supports status-only with custom size', async () => { + renderOverlayPage(1, '?camera=false&size=large'); + + await waitFor(() => { + expect(screen.getByText('Printer is idle')).toBeInTheDocument(); + }); + + expect(screen.queryByAltText('Camera stream')).not.toBeInTheDocument(); + }); + + it('supports show parameter with fps', async () => { + server.use( + http.get('/api/v1/printers/:id/status', () => { + return HttpResponse.json(mockStatusPrinting); + }) + ); + + renderOverlayPage(1, '?fps=20&show=progress'); + + await waitFor(() => { + const img = screen.getByAltText('Camera stream') as HTMLImageElement; + expect(img.src).toContain('fps=20'); + expect(screen.getByText('45%')).toBeInTheDocument(); + }); + }); + }); + describe('offline state', () => { beforeEach(() => { server.use( diff --git a/frontend/src/components/EmbeddedCameraViewer.tsx b/frontend/src/components/EmbeddedCameraViewer.tsx index c50ba2049..d9715df9d 100644 --- a/frontend/src/components/EmbeddedCameraViewer.tsx +++ b/frontend/src/components/EmbeddedCameraViewer.tsx @@ -461,7 +461,7 @@ export function EmbeddedCameraViewer({ printerId, printerName, viewerIndex = 0, } }, [isDragging, isResizing, dragOffset]); - const streamUrl = `/api/v1/printers/${printerId}/camera/stream?fps=10&t=${imageKey}`; + const streamUrl = `/api/v1/printers/${printerId}/camera/stream?fps=15&t=${imageKey}`; return (
- {/* Camera feed - fullscreen background */} - Camera stream + {/* Camera feed - fullscreen background (optional) */} + {config.showCamera && ( + Camera stream + )} {/* Bambuddy logo - top right */} >>=0,h===0?32:31-($e(h)/ut|0)|0}var nt=256,ie=262144,he=4194304;function Ae(h){var g=h&42;if(g!==0)return g;switch(h&-h){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return h&261888;case 262144:case 524288:case 1048576:case 2097152:return h&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return h&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return h}}function be(h,g,_){var M=h.pendingLanes;if(M===0)return 0;var P=0,I=h.suspendedLanes,J=h.pingedLanes;h=h.warmLanes;var ve=M&134217727;return ve!==0?(M=ve&~I,M!==0?P=Ae(M):(J&=ve,J!==0?P=Ae(J):_||(_=ve&~h,_!==0&&(P=Ae(_))))):(ve=M&~I,ve!==0?P=Ae(ve):J!==0?P=Ae(J):_||(_=M&~h,_!==0&&(P=Ae(_)))),P===0?0:g!==0&&g!==P&&(g&I)===0&&(I=P&-P,_=g&-g,I>=_||I===32&&(_&4194048)!==0)?g:P}function Ve(h,g){return(h.pendingLanes&~(h.suspendedLanes&~h.pingedLanes)&g)===0}function pt(h,g){switch(h){case 1:case 2:case 4:case 8:case 64:return g+250;case 16:case 32: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 g+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ct(){var h=he;return he<<=1,(he&62914560)===0&&(he=4194304),h}function jt(h){for(var g=[],_=0;31>_;_++)g.push(h);return g}function Qt(h,g){h.pendingLanes|=g,g!==268435456&&(h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0)}function Ft(h,g,_,M,P,I){var J=h.pendingLanes;h.pendingLanes=_,h.suspendedLanes=0,h.pingedLanes=0,h.warmLanes=0,h.expiredLanes&=_,h.entangledLanes&=_,h.errorRecoveryDisabledLanes&=_,h.shellSuspendCounter=0;var ve=h.entanglements,Ue=h.expirationTimes,rt=h.hiddenUpdates;for(_=J&~_;0<_;){var mt=31-Ne(_),bt=1<"u")return null;try{return h.activeElement||h.body}catch{return h.body}}var Et=/[\n"\\]/g;function $t(h){return h.replace(Et,function(g){return"\\"+g.charCodeAt(0).toString(16)+" "})}function xt(h,g,_,M,P,I,J,ve){h.name="",J!=null&&typeof J!="function"&&typeof J!="symbol"&&typeof J!="boolean"?h.type=J:h.removeAttribute("type"),g!=null?J==="number"?(g===0&&h.value===""||h.value!=g)&&(h.value=""+sn(g)):h.value!==""+sn(g)&&(h.value=""+sn(g)):J!=="submit"&&J!=="reset"||h.removeAttribute("value"),g!=null?Dn(h,J,sn(g)):_!=null?Dn(h,J,sn(_)):M!=null&&h.removeAttribute("value"),P==null&&I!=null&&(h.defaultChecked=!!I),P!=null&&(h.checked=P&&typeof P!="function"&&typeof P!="symbol"),ve!=null&&typeof ve!="function"&&typeof ve!="symbol"&&typeof ve!="boolean"?h.name=""+sn(ve):h.removeAttribute("name")}function Ut(h,g,_,M,P,I,J,ve){if(I!=null&&typeof I!="function"&&typeof I!="symbol"&&typeof I!="boolean"&&(h.type=I),g!=null||_!=null){if(!(I!=="submit"&&I!=="reset"||g!=null)){un(h);return}_=_!=null?""+sn(_):"",g=g!=null?""+sn(g):_,ve||g===h.value||(h.value=g),h.defaultValue=g}M=M??P,M=typeof M!="function"&&typeof M!="symbol"&&!!M,h.checked=ve?h.checked:!!M,h.defaultChecked=!!M,J!=null&&typeof J!="function"&&typeof J!="symbol"&&typeof J!="boolean"&&(h.name=J),un(h)}function Dn(h,g,_){g==="number"&&Qe(h.ownerDocument)===h||h.defaultValue===""+_||(h.defaultValue=""+_)}function Sn(h,g,_,M){if(h=h.options,g){g={};for(var P=0;P<_.length;P++)g["$"+_[P]]=!0;for(_=0;_"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Uh=!1;if(sl)try{var qu={};Object.defineProperty(qu,"passive",{get:function(){Uh=!0}}),window.addEventListener("test",qu,qu),window.removeEventListener("test",qu,qu)}catch{Uh=!1}var go=null,Rl=null,Wu=null;function Rm(){if(Wu)return Wu;var h,g=Rl,_=g.length,M,P="value"in go?go.value:go.textContent,I=P.length;for(h=0;h<_&&g[h]===P[h];h++);var J=_-h;for(M=1;M<=J&&g[_-M]===P[I-M];M++);return Wu=P.slice(h,1=Lx),d5=" ",h5=!1;function f5(h,g){switch(h){case"keyup":return Jre.indexOf(g.keyCode)!==-1;case"keydown":return g.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function m5(h){return h=h.detail,typeof h=="object"&&"data"in h?h.data:null}var Om=!1;function tie(h,g){switch(h){case"compositionend":return m5(g);case"keypress":return g.which!==32?null:(h5=!0,d5);case"textInput":return h=g.data,h===d5&&h5?null:h;default:return null}}function nie(h,g){if(Om)return h==="compositionend"||!HM&&f5(h,g)?(h=Rm(),Wu=Rl=go=null,Om=!1,h):null;switch(h){case"paste":return null;case"keypress":if(!(g.ctrlKey||g.altKey||g.metaKey)||g.ctrlKey&&g.altKey){if(g.char&&1=g)return{node:_,offset:g-h};h=M}e:{for(;_;){if(_.nextSibling){_=_.nextSibling;break e}_=_.parentNode}_=void 0}_=w5(_)}}function N5(h,g){return h&&g?h===g?!0:h&&h.nodeType===3?!1:g&&g.nodeType===3?N5(h,g.parentNode):"contains"in h?h.contains(g):h.compareDocumentPosition?!!(h.compareDocumentPosition(g)&16):!1:!1}function M5(h){h=h!=null&&h.ownerDocument!=null&&h.ownerDocument.defaultView!=null?h.ownerDocument.defaultView:window;for(var g=Qe(h.document);g instanceof h.HTMLIFrameElement;){try{var _=typeof g.contentWindow.location.href=="string"}catch{_=!1}if(_)h=g.contentWindow;else break;g=Qe(h.document)}return g}function qM(h){var g=h&&h.nodeName&&h.nodeName.toLowerCase();return g&&(g==="input"&&(h.type==="text"||h.type==="search"||h.type==="tel"||h.type==="url"||h.type==="password")||g==="textarea"||h.contentEditable==="true")}var uie=sl&&"documentMode"in document&&11>=document.documentMode,Lm=null,WM=null,zx=null,KM=!1;function E5(h,g,_){var M=_.window===_?_.document:_.nodeType===9?_:_.ownerDocument;KM||Lm==null||Lm!==Qe(M)||(M=Lm,"selectionStart"in M&&qM(M)?M={start:M.selectionStart,end:M.selectionEnd}:(M=(M.ownerDocument&&M.ownerDocument.defaultView||window).getSelection(),M={anchorNode:M.anchorNode,anchorOffset:M.anchorOffset,focusNode:M.focusNode,focusOffset:M.focusOffset}),zx&&Ux(zx,M)||(zx=M,M=c_(WM,"onSelect"),0>=J,P-=J,Il=1<<32-Ne(g)+P|_<Mn?(Hn=Kt,Kt=null):Hn=Kt.sibling;var rr=ot(Ye,Kt,tt[Mn],gt);if(rr===null){Kt===null&&(Kt=Hn);break}h&&Kt&&rr.alternate===null&&g(Ye,Kt),qe=I(rr,qe,Mn),nr===null?Jt=rr:nr.sibling=rr,nr=rr,Kt=Hn}if(Mn===tt.length)return _(Ye,Kt),Gn&&Mc(Ye,Mn),Jt;if(Kt===null){for(;MnMn?(Hn=Kt,Kt=null):Hn=Kt.sibling;var gd=ot(Ye,Kt,rr.value,gt);if(gd===null){Kt===null&&(Kt=Hn);break}h&&Kt&&gd.alternate===null&&g(Ye,Kt),qe=I(gd,qe,Mn),nr===null?Jt=gd:nr.sibling=gd,nr=gd,Kt=Hn}if(rr.done)return _(Ye,Kt),Gn&&Mc(Ye,Mn),Jt;if(Kt===null){for(;!rr.done;Mn++,rr=tt.next())rr=bt(Ye,rr.value,gt),rr!==null&&(qe=I(rr,qe,Mn),nr===null?Jt=rr:nr.sibling=rr,nr=rr);return Gn&&Mc(Ye,Mn),Jt}for(Kt=M(Kt);!rr.done;Mn++,rr=tt.next())rr=ft(Kt,Ye,Mn,rr.value,gt),rr!==null&&(h&&rr.alternate!==null&&Kt.delete(rr.key===null?Mn:rr.key),qe=I(rr,qe,Mn),nr===null?Jt=rr:nr.sibling=rr,nr=rr);return h&&Kt.forEach(function(kae){return g(Ye,kae)}),Gn&&Mc(Ye,Mn),Jt}function vr(Ye,qe,tt,gt){if(typeof tt=="object"&&tt!==null&&tt.type===b&&tt.key===null&&(tt=tt.props.children),typeof tt=="object"&&tt!==null){switch(tt.$$typeof){case p:e:{for(var Jt=tt.key;qe!==null;){if(qe.key===Jt){if(Jt=tt.type,Jt===b){if(qe.tag===7){_(Ye,qe.sibling),gt=P(qe,tt.props.children),gt.return=Ye,Ye=gt;break e}}else if(qe.elementType===Jt||typeof Jt=="object"&&Jt!==null&&Jt.$$typeof===L&&Zh(Jt)===qe.type){_(Ye,qe.sibling),gt=P(qe,tt.props),qx(gt,tt),gt.return=Ye,Ye=gt;break e}_(Ye,qe);break}else g(Ye,qe);qe=qe.sibling}tt.type===b?(gt=Wh(tt.props.children,Ye.mode,gt,tt.key),gt.return=Ye,Ye=gt):(gt=Ev(tt.type,tt.key,tt.props,null,Ye.mode,gt),qx(gt,tt),gt.return=Ye,Ye=gt)}return J(Ye);case x:e:{for(Jt=tt.key;qe!==null;){if(qe.key===Jt)if(qe.tag===4&&qe.stateNode.containerInfo===tt.containerInfo&&qe.stateNode.implementation===tt.implementation){_(Ye,qe.sibling),gt=P(qe,tt.children||[]),gt.return=Ye,Ye=gt;break e}else{_(Ye,qe);break}else g(Ye,qe);qe=qe.sibling}gt=tE(tt,Ye.mode,gt),gt.return=Ye,Ye=gt}return J(Ye);case L:return tt=Zh(tt),vr(Ye,qe,tt,gt)}if(G(tt))return Gt(Ye,qe,tt,gt);if(D(tt)){if(Jt=D(tt),typeof Jt!="function")throw Error(r(150));return tt=Jt.call(tt),an(Ye,qe,tt,gt)}if(typeof tt.then=="function")return vr(Ye,qe,Rv(tt),gt);if(tt.$$typeof===N)return vr(Ye,qe,Av(Ye,tt),gt);Dv(Ye,tt)}return typeof tt=="string"&&tt!==""||typeof tt=="number"||typeof tt=="bigint"?(tt=""+tt,qe!==null&&qe.tag===6?(_(Ye,qe.sibling),gt=P(qe,tt),gt.return=Ye,Ye=gt):(_(Ye,qe),gt=eE(tt,Ye.mode,gt),gt.return=Ye,Ye=gt),J(Ye)):_(Ye,qe)}return function(Ye,qe,tt,gt){try{Gx=0;var Jt=vr(Ye,qe,tt,gt);return Wm=null,Jt}catch(Kt){if(Kt===qm||Kt===jv)throw Kt;var nr=$s(29,Kt,null,Ye.mode);return nr.lanes=gt,nr.return=Ye,nr}finally{}}}var ef=X5(!0),Y5=X5(!1),Ju=!1;function fE(h){h.updateQueue={baseState:h.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function mE(h,g){h=h.updateQueue,g.updateQueue===h&&(g.updateQueue={baseState:h.baseState,firstBaseUpdate:h.firstBaseUpdate,lastBaseUpdate:h.lastBaseUpdate,shared:h.shared,callbacks:null})}function ed(h){return{lane:h,tag:0,payload:null,callback:null,next:null}}function td(h,g,_){var M=h.updateQueue;if(M===null)return null;if(M=M.shared,(or&2)!==0){var P=M.pending;return P===null?g.next=g:(g.next=P.next,P.next=g),M.pending=g,g=Mv(h),R5(h,null,_),g}return Nv(h,M,g,_),Mv(h)}function Wx(h,g,_){if(g=g.updateQueue,g!==null&&(g=g.shared,(_&4194048)!==0)){var M=g.lanes;M&=h.pendingLanes,_|=M,g.lanes=_,qt(h,_)}}function pE(h,g){var _=h.updateQueue,M=h.alternate;if(M!==null&&(M=M.updateQueue,_===M)){var P=null,I=null;if(_=_.firstBaseUpdate,_!==null){do{var J={lane:_.lane,tag:_.tag,payload:_.payload,callback:null,next:null};I===null?P=I=J:I=I.next=J,_=_.next}while(_!==null);I===null?P=I=g:I=I.next=g}else P=I=g;_={baseState:M.baseState,firstBaseUpdate:P,lastBaseUpdate:I,shared:M.shared,callbacks:M.callbacks},h.updateQueue=_;return}h=_.lastBaseUpdate,h===null?_.firstBaseUpdate=g:h.next=g,_.lastBaseUpdate=g}var gE=!1;function Kx(){if(gE){var h=Gm;if(h!==null)throw h}}function Xx(h,g,_,M){gE=!1;var P=h.updateQueue;Ju=!1;var I=P.firstBaseUpdate,J=P.lastBaseUpdate,ve=P.shared.pending;if(ve!==null){P.shared.pending=null;var Ue=ve,rt=Ue.next;Ue.next=null,J===null?I=rt:J.next=rt,J=Ue;var mt=h.alternate;mt!==null&&(mt=mt.updateQueue,ve=mt.lastBaseUpdate,ve!==J&&(ve===null?mt.firstBaseUpdate=rt:ve.next=rt,mt.lastBaseUpdate=Ue))}if(I!==null){var bt=P.baseState;J=0,mt=rt=Ue=null,ve=I;do{var ot=ve.lane&-536870913,ft=ot!==ve.lane;if(ft?($n&ot)===ot:(M&ot)===ot){ot!==0&&ot===Vm&&(gE=!0),mt!==null&&(mt=mt.next={lane:0,tag:ve.tag,payload:ve.payload,callback:null,next:null});e:{var Gt=h,an=ve;ot=g;var vr=_;switch(an.tag){case 1:if(Gt=an.payload,typeof Gt=="function"){bt=Gt.call(vr,bt,ot);break e}bt=Gt;break e;case 3:Gt.flags=Gt.flags&-65537|128;case 0:if(Gt=an.payload,ot=typeof Gt=="function"?Gt.call(vr,bt,ot):Gt,ot==null)break e;bt=f({},bt,ot);break e;case 2:Ju=!0}}ot=ve.callback,ot!==null&&(h.flags|=64,ft&&(h.flags|=8192),ft=P.callbacks,ft===null?P.callbacks=[ot]:ft.push(ot))}else ft={lane:ot,tag:ve.tag,payload:ve.payload,callback:ve.callback,next:null},mt===null?(rt=mt=ft,Ue=bt):mt=mt.next=ft,J|=ot;if(ve=ve.next,ve===null){if(ve=P.shared.pending,ve===null)break;ft=ve,ve=ft.next,ft.next=null,P.lastBaseUpdate=ft,P.shared.pending=null}}while(!0);mt===null&&(Ue=bt),P.baseState=Ue,P.firstBaseUpdate=rt,P.lastBaseUpdate=mt,I===null&&(P.shared.lanes=0),sd|=J,h.lanes=J,h.memoizedState=bt}}function Q5(h,g){if(typeof h!="function")throw Error(r(191,h));h.call(g)}function Z5(h,g){var _=h.callbacks;if(_!==null)for(h.callbacks=null,h=0;h<_.length;h++)Q5(_[h],g)}var Km=U(null),Ov=U(0);function J5(h,g){h=Lc,le(Ov,h),le(Km,g),Lc=h|g.baseLanes}function xE(){le(Ov,Lc),le(Km,Km.current)}function bE(){Lc=Ov.current,W(Km),W(Ov)}var Hs=U(null),So=null;function nd(h){var g=h.alternate;le(gi,gi.current&1),le(Hs,h),So===null&&(g===null||Km.current!==null||g.memoizedState!==null)&&(So=h)}function yE(h){le(gi,gi.current),le(Hs,h),So===null&&(So=h)}function eI(h){h.tag===22?(le(gi,gi.current),le(Hs,h),So===null&&(So=h)):rd()}function rd(){le(gi,gi.current),le(Hs,Hs.current)}function Vs(h){W(Hs),So===h&&(So=null),W(gi)}var gi=U(0);function Lv(h){for(var g=h;g!==null;){if(g.tag===13){var _=g.memoizedState;if(_!==null&&(_=_.dehydrated,_===null||MC(_)||EC(_)))return g}else if(g.tag===19&&(g.memoizedProps.revealOrder==="forwards"||g.memoizedProps.revealOrder==="backwards"||g.memoizedProps.revealOrder==="unstable_legacy-backwards"||g.memoizedProps.revealOrder==="together")){if((g.flags&128)!==0)return g}else if(g.child!==null){g.child.return=g,g=g.child;continue}if(g===h)break;for(;g.sibling===null;){if(g.return===null||g.return===h)return null;g=g.return}g.sibling.return=g.return,g=g.sibling}return null}var Tc=0,wn=null,br=null,Mi=null,Iv=!1,Xm=!1,tf=!1,Fv=0,Yx=0,Ym=null,vie=0;function si(){throw Error(r(321))}function vE(h,g){if(g===null)return!1;for(var _=0;_I?I:8;var J=q.T,ve={};q.T=ve,OE(h,!1,g,_);try{var Ue=P(),rt=q.S;if(rt!==null&&rt(ve,Ue),Ue!==null&&typeof Ue=="object"&&typeof Ue.then=="function"){var mt=yie(Ue,M);Zx(h,g,mt,Ws(h))}else Zx(h,g,M,Ws(h))}catch(bt){Zx(h,g,{then:function(){},status:"rejected",reason:bt},Ws())}finally{K.p=I,J!==null&&ve.types!==null&&(J.types=ve.types),q.T=J}}function Mie(){}function RE(h,g,_,M){if(h.tag!==5)throw Error(r(476));var P=kI(h).queue;AI(h,P,g,Q,_===null?Mie:function(){return jI(h),_(M)})}function kI(h){var g=h.memoizedState;if(g!==null)return g;g={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ac,lastRenderedState:Q},next:null};var _={};return g.next={memoizedState:_,baseState:_,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ac,lastRenderedState:_},next:null},h.memoizedState=g,h=h.alternate,h!==null&&(h.memoizedState=g),g}function jI(h){var g=kI(h);g.next===null&&(g=h.alternate.memoizedState),Zx(h,g.next.queue,{},Ws())}function DE(){return ba(pb)}function PI(){return xi().memoizedState}function RI(){return xi().memoizedState}function Eie(h){for(var g=h.return;g!==null;){switch(g.tag){case 24:case 3:var _=Ws();h=ed(_);var M=td(g,h,_);M!==null&&(ws(M,g,_),Wx(M,g,_)),g={cache:cE()},h.payload=g;return}g=g.return}}function Cie(h,g,_){var M=Ws();_={lane:M,revertLane:0,gesture:null,action:_,hasEagerState:!1,eagerState:null,next:null},Vv(h)?OI(g,_):(_=ZM(h,g,_,M),_!==null&&(ws(_,h,M),LI(_,g,M)))}function DI(h,g,_){var M=Ws();Zx(h,g,_,M)}function Zx(h,g,_,M){var P={lane:M,revertLane:0,gesture:null,action:_,hasEagerState:!1,eagerState:null,next:null};if(Vv(h))OI(g,P);else{var I=h.alternate;if(h.lanes===0&&(I===null||I.lanes===0)&&(I=g.lastRenderedReducer,I!==null))try{var J=g.lastRenderedState,ve=I(J,_);if(P.hasEagerState=!0,P.eagerState=ve,Bs(ve,J))return Nv(h,g,P,0),Pr===null&&Sv(),!1}catch{}finally{}if(_=ZM(h,g,P,M),_!==null)return ws(_,h,M),LI(_,g,M),!0}return!1}function OE(h,g,_,M){if(M={lane:2,revertLane:fC(),gesture:null,action:M,hasEagerState:!1,eagerState:null,next:null},Vv(h)){if(g)throw Error(r(479))}else g=ZM(h,_,M,2),g!==null&&ws(g,h,2)}function Vv(h){var g=h.alternate;return h===wn||g!==null&&g===wn}function OI(h,g){Xm=Iv=!0;var _=h.pending;_===null?g.next=g:(g.next=_.next,_.next=g),h.pending=g}function LI(h,g,_){if((_&4194048)!==0){var M=g.lanes;M&=h.pendingLanes,_|=M,g.lanes=_,qt(h,_)}}var Jx={readContext:ba,use:zv,useCallback:si,useContext:si,useEffect:si,useImperativeHandle:si,useLayoutEffect:si,useInsertionEffect:si,useMemo:si,useReducer:si,useRef:si,useState:si,useDebugValue:si,useDeferredValue:si,useTransition:si,useSyncExternalStore:si,useId:si,useHostTransitionStatus:si,useFormState:si,useActionState:si,useOptimistic:si,useMemoCache:si,useCacheRefresh:si};Jx.useEffectEvent=si;var II={readContext:ba,use:zv,useCallback:function(h,g){return Za().memoizedState=[h,g===void 0?null:g],h},useContext:ba,useEffect:vI,useImperativeHandle:function(h,g,_){_=_!=null?_.concat([h]):null,$v(4194308,4,NI.bind(null,g,h),_)},useLayoutEffect:function(h,g){return $v(4194308,4,h,g)},useInsertionEffect:function(h,g){$v(4,2,h,g)},useMemo:function(h,g){var _=Za();g=g===void 0?null:g;var M=h();if(tf){Ge(!0);try{h()}finally{Ge(!1)}}return _.memoizedState=[M,g],M},useReducer:function(h,g,_){var M=Za();if(_!==void 0){var P=_(g);if(tf){Ge(!0);try{_(g)}finally{Ge(!1)}}}else P=g;return M.memoizedState=M.baseState=P,h={pending:null,lanes:0,dispatch:null,lastRenderedReducer:h,lastRenderedState:P},M.queue=h,h=h.dispatch=Cie.bind(null,wn,h),[M.memoizedState,h]},useRef:function(h){var g=Za();return h={current:h},g.memoizedState=h},useState:function(h){h=TE(h);var g=h.queue,_=DI.bind(null,wn,g);return g.dispatch=_,[h.memoizedState,_]},useDebugValue:jE,useDeferredValue:function(h,g){var _=Za();return PE(_,h,g)},useTransition:function(){var h=TE(!1);return h=AI.bind(null,wn,h.queue,!0,!1),Za().memoizedState=h,[!1,h]},useSyncExternalStore:function(h,g,_){var M=wn,P=Za();if(Gn){if(_===void 0)throw Error(r(407));_=_()}else{if(_=g(),Pr===null)throw Error(r(349));($n&127)!==0||iI(M,g,_)}P.memoizedState=_;var I={value:_,getSnapshot:g};return P.queue=I,vI(sI.bind(null,M,I,h),[h]),M.flags|=2048,Qm(9,{destroy:void 0},aI.bind(null,M,I,_,g),null),_},useId:function(){var h=Za(),g=Pr.identifierPrefix;if(Gn){var _=Fl,M=Il;_=(M&~(1<<32-Ne(M)-1)).toString(32)+_,g="_"+g+"R_"+_,_=Fv++,0<_&&(g+="H"+_.toString(32)),g+="_"}else _=vie++,g="_"+g+"r_"+_.toString(32)+"_";return h.memoizedState=g},useHostTransitionStatus:DE,useFormState:pI,useActionState:pI,useOptimistic:function(h){var g=Za();g.memoizedState=g.baseState=h;var _={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return g.queue=_,g=OE.bind(null,wn,!0,_),_.dispatch=g,[h,g]},useMemoCache:ME,useCacheRefresh:function(){return Za().memoizedState=Eie.bind(null,wn)},useEffectEvent:function(h){var g=Za(),_={impl:h};return g.memoizedState=_,function(){if((or&2)!==0)throw Error(r(440));return _.impl.apply(void 0,arguments)}}},LE={readContext:ba,use:zv,useCallback:EI,useContext:ba,useEffect:kE,useImperativeHandle:MI,useInsertionEffect:wI,useLayoutEffect:SI,useMemo:CI,useReducer:Bv,useRef:yI,useState:function(){return Bv(Ac)},useDebugValue:jE,useDeferredValue:function(h,g){var _=xi();return TI(_,br.memoizedState,h,g)},useTransition:function(){var h=Bv(Ac)[0],g=xi().memoizedState;return[typeof h=="boolean"?h:Qx(h),g]},useSyncExternalStore:rI,useId:PI,useHostTransitionStatus:DE,useFormState:gI,useActionState:gI,useOptimistic:function(h,g){var _=xi();return cI(_,br,h,g)},useMemoCache:ME,useCacheRefresh:RI};LE.useEffectEvent=_I;var FI={readContext:ba,use:zv,useCallback:EI,useContext:ba,useEffect:kE,useImperativeHandle:MI,useInsertionEffect:wI,useLayoutEffect:SI,useMemo:CI,useReducer:CE,useRef:yI,useState:function(){return CE(Ac)},useDebugValue:jE,useDeferredValue:function(h,g){var _=xi();return br===null?PE(_,h,g):TI(_,br.memoizedState,h,g)},useTransition:function(){var h=CE(Ac)[0],g=xi().memoizedState;return[typeof h=="boolean"?h:Qx(h),g]},useSyncExternalStore:rI,useId:PI,useHostTransitionStatus:DE,useFormState:bI,useActionState:bI,useOptimistic:function(h,g){var _=xi();return br!==null?cI(_,br,h,g):(_.baseState=h,[h,_.queue.dispatch])},useMemoCache:ME,useCacheRefresh:RI};FI.useEffectEvent=_I;function IE(h,g,_,M){g=h.memoizedState,_=_(M,g),_=_==null?g:f({},g,_),h.memoizedState=_,h.lanes===0&&(h.updateQueue.baseState=_)}var FE={enqueueSetState:function(h,g,_){h=h._reactInternals;var M=Ws(),P=ed(M);P.payload=g,_!=null&&(P.callback=_),g=td(h,P,M),g!==null&&(ws(g,h,M),Wx(g,h,M))},enqueueReplaceState:function(h,g,_){h=h._reactInternals;var M=Ws(),P=ed(M);P.tag=1,P.payload=g,_!=null&&(P.callback=_),g=td(h,P,M),g!==null&&(ws(g,h,M),Wx(g,h,M))},enqueueForceUpdate:function(h,g){h=h._reactInternals;var _=Ws(),M=ed(_);M.tag=2,g!=null&&(M.callback=g),g=td(h,M,_),g!==null&&(ws(g,h,_),Wx(g,h,_))}};function UI(h,g,_,M,P,I,J){return h=h.stateNode,typeof h.shouldComponentUpdate=="function"?h.shouldComponentUpdate(M,I,J):g.prototype&&g.prototype.isPureReactComponent?!Ux(_,M)||!Ux(P,I):!0}function zI(h,g,_,M){h=g.state,typeof g.componentWillReceiveProps=="function"&&g.componentWillReceiveProps(_,M),typeof g.UNSAFE_componentWillReceiveProps=="function"&&g.UNSAFE_componentWillReceiveProps(_,M),g.state!==h&&FE.enqueueReplaceState(g,g.state,null)}function nf(h,g){var _=g;if("ref"in g){_={};for(var M in g)M!=="ref"&&(_[M]=g[M])}if(h=h.defaultProps){_===g&&(_=f({},_));for(var P in h)_[P]===void 0&&(_[P]=h[P])}return _}function BI(h){wv(h)}function $I(h){console.error(h)}function HI(h){wv(h)}function Gv(h,g){try{var _=h.onUncaughtError;_(g.value,{componentStack:g.stack})}catch(M){setTimeout(function(){throw M})}}function VI(h,g,_){try{var M=h.onCaughtError;M(_.value,{componentStack:_.stack,errorBoundary:g.tag===1?g.stateNode:null})}catch(P){setTimeout(function(){throw P})}}function UE(h,g,_){return _=ed(_),_.tag=3,_.payload={element:null},_.callback=function(){Gv(h,g)},_}function GI(h){return h=ed(h),h.tag=3,h}function qI(h,g,_,M){var P=_.type.getDerivedStateFromError;if(typeof P=="function"){var I=M.value;h.payload=function(){return P(I)},h.callback=function(){VI(g,_,M)}}var J=_.stateNode;J!==null&&typeof J.componentDidCatch=="function"&&(h.callback=function(){VI(g,_,M),typeof P!="function"&&(od===null?od=new Set([this]):od.add(this));var ve=M.stack;this.componentDidCatch(M.value,{componentStack:ve!==null?ve:""})})}function Tie(h,g,_,M,P){if(_.flags|=32768,M!==null&&typeof M=="object"&&typeof M.then=="function"){if(g=_.alternate,g!==null&&Hm(g,_,P,!0),_=Hs.current,_!==null){switch(_.tag){case 31:case 13:return So===null?r_():_.alternate===null&&oi===0&&(oi=3),_.flags&=-257,_.flags|=65536,_.lanes=P,M===Pv?_.flags|=16384:(g=_.updateQueue,g===null?_.updateQueue=new Set([M]):g.add(M),uC(h,M,P)),!1;case 22:return _.flags|=65536,M===Pv?_.flags|=16384:(g=_.updateQueue,g===null?(g={transitions:null,markerInstances:null,retryQueue:new Set([M])},_.updateQueue=g):(_=g.retryQueue,_===null?g.retryQueue=new Set([M]):_.add(M)),uC(h,M,P)),!1}throw Error(r(435,_.tag))}return uC(h,M,P),r_(),!1}if(Gn)return g=Hs.current,g!==null?((g.flags&65536)===0&&(g.flags|=256),g.flags|=65536,g.lanes=P,M!==iE&&(h=Error(r(422),{cause:M}),$x(yo(h,_)))):(M!==iE&&(g=Error(r(423),{cause:M}),$x(yo(g,_))),h=h.current.alternate,h.flags|=65536,P&=-P,h.lanes|=P,M=yo(M,_),P=UE(h.stateNode,M,P),pE(h,P),oi!==4&&(oi=2)),!1;var I=Error(r(520),{cause:M});if(I=yo(I,_),ob===null?ob=[I]:ob.push(I),oi!==4&&(oi=2),g===null)return!0;M=yo(M,_),_=g;do{switch(_.tag){case 3:return _.flags|=65536,h=P&-P,_.lanes|=h,h=UE(_.stateNode,M,h),pE(_,h),!1;case 1:if(g=_.type,I=_.stateNode,(_.flags&128)===0&&(typeof g.getDerivedStateFromError=="function"||I!==null&&typeof I.componentDidCatch=="function"&&(od===null||!od.has(I))))return _.flags|=65536,P&=-P,_.lanes|=P,P=GI(P),qI(P,h,_,M),pE(_,P),!1}_=_.return}while(_!==null);return!1}var zE=Error(r(461)),Ei=!1;function ya(h,g,_,M){g.child=h===null?Y5(g,null,_,M):ef(g,h.child,_,M)}function WI(h,g,_,M,P){_=_.render;var I=g.ref;if("ref"in M){var J={};for(var ve in M)ve!=="ref"&&(J[ve]=M[ve])}else J=M;return Yh(g),M=_E(h,g,_,J,I,P),ve=wE(),h!==null&&!Ei?(SE(h,g,P),kc(h,g,P)):(Gn&&ve&&nE(g),g.flags|=1,ya(h,g,M,P),g.child)}function KI(h,g,_,M,P){if(h===null){var I=_.type;return typeof I=="function"&&!JM(I)&&I.defaultProps===void 0&&_.compare===null?(g.tag=15,g.type=I,XI(h,g,I,M,P)):(h=Ev(_.type,null,M,g,g.mode,P),h.ref=g.ref,h.return=g,g.child=h)}if(I=h.child,!KE(h,P)){var J=I.memoizedProps;if(_=_.compare,_=_!==null?_:Ux,_(J,M)&&h.ref===g.ref)return kc(h,g,P)}return g.flags|=1,h=Nc(I,M),h.ref=g.ref,h.return=g,g.child=h}function XI(h,g,_,M,P){if(h!==null){var I=h.memoizedProps;if(Ux(I,M)&&h.ref===g.ref)if(Ei=!1,g.pendingProps=M=I,KE(h,P))(h.flags&131072)!==0&&(Ei=!0);else return g.lanes=h.lanes,kc(h,g,P)}return BE(h,g,_,M,P)}function YI(h,g,_,M){var P=M.children,I=h!==null?h.memoizedState:null;if(h===null&&g.stateNode===null&&(g.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),M.mode==="hidden"){if((g.flags&128)!==0){if(I=I!==null?I.baseLanes|_:_,h!==null){for(M=g.child=h.child,P=0;M!==null;)P=P|M.lanes|M.childLanes,M=M.sibling;M=P&~I}else M=0,g.child=null;return QI(h,g,I,_,M)}if((_&536870912)!==0)g.memoizedState={baseLanes:0,cachePool:null},h!==null&&kv(g,I!==null?I.cachePool:null),I!==null?J5(g,I):xE(),eI(g);else return M=g.lanes=536870912,QI(h,g,I!==null?I.baseLanes|_:_,_,M)}else I!==null?(kv(g,I.cachePool),J5(g,I),rd(),g.memoizedState=null):(h!==null&&kv(g,null),xE(),rd());return ya(h,g,P,_),g.child}function eb(h,g){return h!==null&&h.tag===22||g.stateNode!==null||(g.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),g.sibling}function QI(h,g,_,M,P){var I=dE();return I=I===null?null:{parent:Ni._currentValue,pool:I},g.memoizedState={baseLanes:_,cachePool:I},h!==null&&kv(g,null),xE(),eI(g),h!==null&&Hm(h,g,M,!0),g.childLanes=P,null}function qv(h,g){return g=Kv({mode:g.mode,children:g.children},h.mode),g.ref=h.ref,h.child=g,g.return=h,g}function ZI(h,g,_){return ef(g,h.child,null,_),h=qv(g,g.pendingProps),h.flags|=2,Vs(g),g.memoizedState=null,h}function Aie(h,g,_){var M=g.pendingProps,P=(g.flags&128)!==0;if(g.flags&=-129,h===null){if(Gn){if(M.mode==="hidden")return h=qv(g,M),g.lanes=536870912,eb(null,h);if(yE(g),(h=zr)?(h=uU(h,wo),h=h!==null&&h.data==="&"?h:null,h!==null&&(g.memoizedState={dehydrated:h,treeContext:Xu!==null?{id:Il,overflow:Fl}:null,retryLane:536870912,hydrationErrors:null},_=O5(h),_.return=g,g.child=_,xa=g,zr=null)):h=null,h===null)throw Qu(g);return g.lanes=536870912,null}return qv(g,M)}var I=h.memoizedState;if(I!==null){var J=I.dehydrated;if(yE(g),P)if(g.flags&256)g.flags&=-257,g=ZI(h,g,_);else if(g.memoizedState!==null)g.child=h.child,g.flags|=128,g=null;else throw Error(r(558));else if(Ei||Hm(h,g,_,!1),P=(_&h.childLanes)!==0,Ei||P){if(M=Pr,M!==null&&(J=Xn(M,_),J!==0&&J!==I.retryLane))throw I.retryLane=J,qh(h,J),ws(M,h,J),zE;r_(),g=ZI(h,g,_)}else h=I.treeContext,zr=No(J.nextSibling),xa=g,Gn=!0,Yu=null,wo=!1,h!==null&&F5(g,h),g=qv(g,M),g.flags|=4096;return g}return h=Nc(h.child,{mode:M.mode,children:M.children}),h.ref=g.ref,g.child=h,h.return=g,h}function Wv(h,g){var _=g.ref;if(_===null)h!==null&&h.ref!==null&&(g.flags|=4194816);else{if(typeof _!="function"&&typeof _!="object")throw Error(r(284));(h===null||h.ref!==_)&&(g.flags|=4194816)}}function BE(h,g,_,M,P){return Yh(g),_=_E(h,g,_,M,void 0,P),M=wE(),h!==null&&!Ei?(SE(h,g,P),kc(h,g,P)):(Gn&&M&&nE(g),g.flags|=1,ya(h,g,_,P),g.child)}function JI(h,g,_,M,P,I){return Yh(g),g.updateQueue=null,_=nI(g,M,_,P),tI(h),M=wE(),h!==null&&!Ei?(SE(h,g,I),kc(h,g,I)):(Gn&&M&&nE(g),g.flags|=1,ya(h,g,_,I),g.child)}function eF(h,g,_,M,P){if(Yh(g),g.stateNode===null){var I=Um,J=_.contextType;typeof J=="object"&&J!==null&&(I=ba(J)),I=new _(M,I),g.memoizedState=I.state!==null&&I.state!==void 0?I.state:null,I.updater=FE,g.stateNode=I,I._reactInternals=g,I=g.stateNode,I.props=M,I.state=g.memoizedState,I.refs={},fE(g),J=_.contextType,I.context=typeof J=="object"&&J!==null?ba(J):Um,I.state=g.memoizedState,J=_.getDerivedStateFromProps,typeof J=="function"&&(IE(g,_,J,M),I.state=g.memoizedState),typeof _.getDerivedStateFromProps=="function"||typeof I.getSnapshotBeforeUpdate=="function"||typeof I.UNSAFE_componentWillMount!="function"&&typeof I.componentWillMount!="function"||(J=I.state,typeof I.componentWillMount=="function"&&I.componentWillMount(),typeof I.UNSAFE_componentWillMount=="function"&&I.UNSAFE_componentWillMount(),J!==I.state&&FE.enqueueReplaceState(I,I.state,null),Xx(g,M,I,P),Kx(),I.state=g.memoizedState),typeof I.componentDidMount=="function"&&(g.flags|=4194308),M=!0}else if(h===null){I=g.stateNode;var ve=g.memoizedProps,Ue=nf(_,ve);I.props=Ue;var rt=I.context,mt=_.contextType;J=Um,typeof mt=="object"&&mt!==null&&(J=ba(mt));var bt=_.getDerivedStateFromProps;mt=typeof bt=="function"||typeof I.getSnapshotBeforeUpdate=="function",ve=g.pendingProps!==ve,mt||typeof I.UNSAFE_componentWillReceiveProps!="function"&&typeof I.componentWillReceiveProps!="function"||(ve||rt!==J)&&zI(g,I,M,J),Ju=!1;var ot=g.memoizedState;I.state=ot,Xx(g,M,I,P),Kx(),rt=g.memoizedState,ve||ot!==rt||Ju?(typeof bt=="function"&&(IE(g,_,bt,M),rt=g.memoizedState),(Ue=Ju||UI(g,_,Ue,M,ot,rt,J))?(mt||typeof I.UNSAFE_componentWillMount!="function"&&typeof I.componentWillMount!="function"||(typeof I.componentWillMount=="function"&&I.componentWillMount(),typeof I.UNSAFE_componentWillMount=="function"&&I.UNSAFE_componentWillMount()),typeof I.componentDidMount=="function"&&(g.flags|=4194308)):(typeof I.componentDidMount=="function"&&(g.flags|=4194308),g.memoizedProps=M,g.memoizedState=rt),I.props=M,I.state=rt,I.context=J,M=Ue):(typeof I.componentDidMount=="function"&&(g.flags|=4194308),M=!1)}else{I=g.stateNode,mE(h,g),J=g.memoizedProps,mt=nf(_,J),I.props=mt,bt=g.pendingProps,ot=I.context,rt=_.contextType,Ue=Um,typeof rt=="object"&&rt!==null&&(Ue=ba(rt)),ve=_.getDerivedStateFromProps,(rt=typeof ve=="function"||typeof I.getSnapshotBeforeUpdate=="function")||typeof I.UNSAFE_componentWillReceiveProps!="function"&&typeof I.componentWillReceiveProps!="function"||(J!==bt||ot!==Ue)&&zI(g,I,M,Ue),Ju=!1,ot=g.memoizedState,I.state=ot,Xx(g,M,I,P),Kx();var ft=g.memoizedState;J!==bt||ot!==ft||Ju||h!==null&&h.dependencies!==null&&Tv(h.dependencies)?(typeof ve=="function"&&(IE(g,_,ve,M),ft=g.memoizedState),(mt=Ju||UI(g,_,mt,M,ot,ft,Ue)||h!==null&&h.dependencies!==null&&Tv(h.dependencies))?(rt||typeof I.UNSAFE_componentWillUpdate!="function"&&typeof I.componentWillUpdate!="function"||(typeof I.componentWillUpdate=="function"&&I.componentWillUpdate(M,ft,Ue),typeof I.UNSAFE_componentWillUpdate=="function"&&I.UNSAFE_componentWillUpdate(M,ft,Ue)),typeof I.componentDidUpdate=="function"&&(g.flags|=4),typeof I.getSnapshotBeforeUpdate=="function"&&(g.flags|=1024)):(typeof I.componentDidUpdate!="function"||J===h.memoizedProps&&ot===h.memoizedState||(g.flags|=4),typeof I.getSnapshotBeforeUpdate!="function"||J===h.memoizedProps&&ot===h.memoizedState||(g.flags|=1024),g.memoizedProps=M,g.memoizedState=ft),I.props=M,I.state=ft,I.context=Ue,M=mt):(typeof I.componentDidUpdate!="function"||J===h.memoizedProps&&ot===h.memoizedState||(g.flags|=4),typeof I.getSnapshotBeforeUpdate!="function"||J===h.memoizedProps&&ot===h.memoizedState||(g.flags|=1024),M=!1)}return I=M,Wv(h,g),M=(g.flags&128)!==0,I||M?(I=g.stateNode,_=M&&typeof _.getDerivedStateFromError!="function"?null:I.render(),g.flags|=1,h!==null&&M?(g.child=ef(g,h.child,null,P),g.child=ef(g,null,_,P)):ya(h,g,_,P),g.memoizedState=I.state,h=g.child):h=kc(h,g,P),h}function tF(h,g,_,M){return Kh(),g.flags|=256,ya(h,g,_,M),g.child}var $E={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function HE(h){return{baseLanes:h,cachePool:V5()}}function VE(h,g,_){return h=h!==null?h.childLanes&~_:0,g&&(h|=qs),h}function nF(h,g,_){var M=g.pendingProps,P=!1,I=(g.flags&128)!==0,J;if((J=I)||(J=h!==null&&h.memoizedState===null?!1:(gi.current&2)!==0),J&&(P=!0,g.flags&=-129),J=(g.flags&32)!==0,g.flags&=-33,h===null){if(Gn){if(P?nd(g):rd(),(h=zr)?(h=uU(h,wo),h=h!==null&&h.data!=="&"?h:null,h!==null&&(g.memoizedState={dehydrated:h,treeContext:Xu!==null?{id:Il,overflow:Fl}:null,retryLane:536870912,hydrationErrors:null},_=O5(h),_.return=g,g.child=_,xa=g,zr=null)):h=null,h===null)throw Qu(g);return EC(h)?g.lanes=32:g.lanes=536870912,null}var ve=M.children;return M=M.fallback,P?(rd(),P=g.mode,ve=Kv({mode:"hidden",children:ve},P),M=Wh(M,P,_,null),ve.return=g,M.return=g,ve.sibling=M,g.child=ve,M=g.child,M.memoizedState=HE(_),M.childLanes=VE(h,J,_),g.memoizedState=$E,eb(null,M)):(nd(g),GE(g,ve))}var Ue=h.memoizedState;if(Ue!==null&&(ve=Ue.dehydrated,ve!==null)){if(I)g.flags&256?(nd(g),g.flags&=-257,g=qE(h,g,_)):g.memoizedState!==null?(rd(),g.child=h.child,g.flags|=128,g=null):(rd(),ve=M.fallback,P=g.mode,M=Kv({mode:"visible",children:M.children},P),ve=Wh(ve,P,_,null),ve.flags|=2,M.return=g,ve.return=g,M.sibling=ve,g.child=M,ef(g,h.child,null,_),M=g.child,M.memoizedState=HE(_),M.childLanes=VE(h,J,_),g.memoizedState=$E,g=eb(null,M));else if(nd(g),EC(ve)){if(J=ve.nextSibling&&ve.nextSibling.dataset,J)var rt=J.dgst;J=rt,M=Error(r(419)),M.stack="",M.digest=J,$x({value:M,source:null,stack:null}),g=qE(h,g,_)}else if(Ei||Hm(h,g,_,!1),J=(_&h.childLanes)!==0,Ei||J){if(J=Pr,J!==null&&(M=Xn(J,_),M!==0&&M!==Ue.retryLane))throw Ue.retryLane=M,qh(h,M),ws(J,h,M),zE;MC(ve)||r_(),g=qE(h,g,_)}else MC(ve)?(g.flags|=192,g.child=h.child,g=null):(h=Ue.treeContext,zr=No(ve.nextSibling),xa=g,Gn=!0,Yu=null,wo=!1,h!==null&&F5(g,h),g=GE(g,M.children),g.flags|=4096);return g}return P?(rd(),ve=M.fallback,P=g.mode,Ue=h.child,rt=Ue.sibling,M=Nc(Ue,{mode:"hidden",children:M.children}),M.subtreeFlags=Ue.subtreeFlags&65011712,rt!==null?ve=Nc(rt,ve):(ve=Wh(ve,P,_,null),ve.flags|=2),ve.return=g,M.return=g,M.sibling=ve,g.child=M,eb(null,M),M=g.child,ve=h.child.memoizedState,ve===null?ve=HE(_):(P=ve.cachePool,P!==null?(Ue=Ni._currentValue,P=P.parent!==Ue?{parent:Ue,pool:Ue}:P):P=V5(),ve={baseLanes:ve.baseLanes|_,cachePool:P}),M.memoizedState=ve,M.childLanes=VE(h,J,_),g.memoizedState=$E,eb(h.child,M)):(nd(g),_=h.child,h=_.sibling,_=Nc(_,{mode:"visible",children:M.children}),_.return=g,_.sibling=null,h!==null&&(J=g.deletions,J===null?(g.deletions=[h],g.flags|=16):J.push(h)),g.child=_,g.memoizedState=null,_)}function GE(h,g){return g=Kv({mode:"visible",children:g},h.mode),g.return=h,h.child=g}function Kv(h,g){return h=$s(22,h,null,g),h.lanes=0,h}function qE(h,g,_){return ef(g,h.child,null,_),h=GE(g,g.pendingProps.children),h.flags|=2,g.memoizedState=null,h}function rF(h,g,_){h.lanes|=g;var M=h.alternate;M!==null&&(M.lanes|=g),oE(h.return,g,_)}function WE(h,g,_,M,P,I){var J=h.memoizedState;J===null?h.memoizedState={isBackwards:g,rendering:null,renderingStartTime:0,last:M,tail:_,tailMode:P,treeForkCount:I}:(J.isBackwards=g,J.rendering=null,J.renderingStartTime=0,J.last=M,J.tail=_,J.tailMode=P,J.treeForkCount=I)}function iF(h,g,_){var M=g.pendingProps,P=M.revealOrder,I=M.tail;M=M.children;var J=gi.current,ve=(J&2)!==0;if(ve?(J=J&1|2,g.flags|=128):J&=1,le(gi,J),ya(h,g,M,_),M=Gn?Bx:0,!ve&&h!==null&&(h.flags&128)!==0)e:for(h=g.child;h!==null;){if(h.tag===13)h.memoizedState!==null&&rF(h,_,g);else if(h.tag===19)rF(h,_,g);else if(h.child!==null){h.child.return=h,h=h.child;continue}if(h===g)break e;for(;h.sibling===null;){if(h.return===null||h.return===g)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}switch(P){case"forwards":for(_=g.child,P=null;_!==null;)h=_.alternate,h!==null&&Lv(h)===null&&(P=_),_=_.sibling;_=P,_===null?(P=g.child,g.child=null):(P=_.sibling,_.sibling=null),WE(g,!1,P,_,I,M);break;case"backwards":case"unstable_legacy-backwards":for(_=null,P=g.child,g.child=null;P!==null;){if(h=P.alternate,h!==null&&Lv(h)===null){g.child=P;break}h=P.sibling,P.sibling=_,_=P,P=h}WE(g,!0,_,null,I,M);break;case"together":WE(g,!1,null,null,void 0,M);break;default:g.memoizedState=null}return g.child}function kc(h,g,_){if(h!==null&&(g.dependencies=h.dependencies),sd|=g.lanes,(_&g.childLanes)===0)if(h!==null){if(Hm(h,g,_,!1),(_&g.childLanes)===0)return null}else return null;if(h!==null&&g.child!==h.child)throw Error(r(153));if(g.child!==null){for(h=g.child,_=Nc(h,h.pendingProps),g.child=_,_.return=g;h.sibling!==null;)h=h.sibling,_=_.sibling=Nc(h,h.pendingProps),_.return=g;_.sibling=null}return g.child}function KE(h,g){return(h.lanes&g)!==0?!0:(h=h.dependencies,!!(h!==null&&Tv(h)))}function kie(h,g,_){switch(g.tag){case 3:_e(g,g.stateNode.containerInfo),Zu(g,Ni,h.memoizedState.cache),Kh();break;case 27:case 5:ke(g);break;case 4:_e(g,g.stateNode.containerInfo);break;case 10:Zu(g,g.type,g.memoizedProps.value);break;case 31:if(g.memoizedState!==null)return g.flags|=128,yE(g),null;break;case 13:var M=g.memoizedState;if(M!==null)return M.dehydrated!==null?(nd(g),g.flags|=128,null):(_&g.child.childLanes)!==0?nF(h,g,_):(nd(g),h=kc(h,g,_),h!==null?h.sibling:null);nd(g);break;case 19:var P=(h.flags&128)!==0;if(M=(_&g.childLanes)!==0,M||(Hm(h,g,_,!1),M=(_&g.childLanes)!==0),P){if(M)return iF(h,g,_);g.flags|=128}if(P=g.memoizedState,P!==null&&(P.rendering=null,P.tail=null,P.lastEffect=null),le(gi,gi.current),M)break;return null;case 22:return g.lanes=0,YI(h,g,_,g.pendingProps);case 24:Zu(g,Ni,h.memoizedState.cache)}return kc(h,g,_)}function aF(h,g,_){if(h!==null)if(h.memoizedProps!==g.pendingProps)Ei=!0;else{if(!KE(h,_)&&(g.flags&128)===0)return Ei=!1,kie(h,g,_);Ei=(h.flags&131072)!==0}else Ei=!1,Gn&&(g.flags&1048576)!==0&&I5(g,Bx,g.index);switch(g.lanes=0,g.tag){case 16:e:{var M=g.pendingProps;if(h=Zh(g.elementType),g.type=h,typeof h=="function")JM(h)?(M=nf(h,M),g.tag=1,g=eF(null,g,h,M,_)):(g.tag=0,g=BE(null,g,h,M,_));else{if(h!=null){var P=h.$$typeof;if(P===E){g.tag=11,g=WI(null,g,h,M,_);break e}else if(P===T){g.tag=14,g=KI(null,g,h,M,_);break e}}throw g=j(h)||h,Error(r(306,g,""))}}return g;case 0:return BE(h,g,g.type,g.pendingProps,_);case 1:return M=g.type,P=nf(M,g.pendingProps),eF(h,g,M,P,_);case 3:e:{if(_e(g,g.stateNode.containerInfo),h===null)throw Error(r(387));M=g.pendingProps;var I=g.memoizedState;P=I.element,mE(h,g),Xx(g,M,null,_);var J=g.memoizedState;if(M=J.cache,Zu(g,Ni,M),M!==I.cache&&lE(g,[Ni],_,!0),Kx(),M=J.element,I.isDehydrated)if(I={element:M,isDehydrated:!1,cache:J.cache},g.updateQueue.baseState=I,g.memoizedState=I,g.flags&256){g=tF(h,g,M,_);break e}else if(M!==P){P=yo(Error(r(424)),g),$x(P),g=tF(h,g,M,_);break e}else{switch(h=g.stateNode.containerInfo,h.nodeType){case 9:h=h.body;break;default:h=h.nodeName==="HTML"?h.ownerDocument.body:h}for(zr=No(h.firstChild),xa=g,Gn=!0,Yu=null,wo=!0,_=Y5(g,null,M,_),g.child=_;_;)_.flags=_.flags&-3|4096,_=_.sibling}else{if(Kh(),M===P){g=kc(h,g,_);break e}ya(h,g,M,_)}g=g.child}return g;case 26:return Wv(h,g),h===null?(_=gU(g.type,null,g.pendingProps,null))?g.memoizedState=_:Gn||(_=g.type,h=g.pendingProps,M=u_(fe.current).createElement(_),M[tr]=g,M[_n]=h,va(M,_,h),Fe(M),g.stateNode=M):g.memoizedState=gU(g.type,h.memoizedProps,g.pendingProps,h.memoizedState),null;case 27:return ke(g),h===null&&Gn&&(M=g.stateNode=fU(g.type,g.pendingProps,fe.current),xa=g,wo=!0,P=zr,dd(g.type)?(CC=P,zr=No(M.firstChild)):zr=P),ya(h,g,g.pendingProps.children,_),Wv(h,g),h===null&&(g.flags|=4194304),g.child;case 5:return h===null&&Gn&&((P=M=zr)&&(M=sae(M,g.type,g.pendingProps,wo),M!==null?(g.stateNode=M,xa=g,zr=No(M.firstChild),wo=!1,P=!0):P=!1),P||Qu(g)),ke(g),P=g.type,I=g.pendingProps,J=h!==null?h.memoizedProps:null,M=I.children,wC(P,I)?M=null:J!==null&&wC(P,J)&&(g.flags|=32),g.memoizedState!==null&&(P=_E(h,g,_ie,null,null,_),pb._currentValue=P),Wv(h,g),ya(h,g,M,_),g.child;case 6:return h===null&&Gn&&((h=_=zr)&&(_=oae(_,g.pendingProps,wo),_!==null?(g.stateNode=_,xa=g,zr=null,h=!0):h=!1),h||Qu(g)),null;case 13:return nF(h,g,_);case 4:return _e(g,g.stateNode.containerInfo),M=g.pendingProps,h===null?g.child=ef(g,null,M,_):ya(h,g,M,_),g.child;case 11:return WI(h,g,g.type,g.pendingProps,_);case 7:return ya(h,g,g.pendingProps,_),g.child;case 8:return ya(h,g,g.pendingProps.children,_),g.child;case 12:return ya(h,g,g.pendingProps.children,_),g.child;case 10:return M=g.pendingProps,Zu(g,g.type,M.value),ya(h,g,M.children,_),g.child;case 9:return P=g.type._context,M=g.pendingProps.children,Yh(g),P=ba(P),M=M(P),g.flags|=1,ya(h,g,M,_),g.child;case 14:return KI(h,g,g.type,g.pendingProps,_);case 15:return XI(h,g,g.type,g.pendingProps,_);case 19:return iF(h,g,_);case 31:return Aie(h,g,_);case 22:return YI(h,g,_,g.pendingProps);case 24:return Yh(g),M=ba(Ni),h===null?(P=dE(),P===null&&(P=Pr,I=cE(),P.pooledCache=I,I.refCount++,I!==null&&(P.pooledCacheLanes|=_),P=I),g.memoizedState={parent:M,cache:P},fE(g),Zu(g,Ni,P)):((h.lanes&_)!==0&&(mE(h,g),Xx(g,null,null,_),Kx()),P=h.memoizedState,I=g.memoizedState,P.parent!==M?(P={parent:M,cache:M},g.memoizedState=P,g.lanes===0&&(g.memoizedState=g.updateQueue.baseState=P),Zu(g,Ni,M)):(M=I.cache,Zu(g,Ni,M),M!==P.cache&&lE(g,[Ni],_,!0))),ya(h,g,g.pendingProps.children,_),g.child;case 29:throw g.pendingProps}throw Error(r(156,g.tag))}function jc(h){h.flags|=4}function XE(h,g,_,M,P){if((g=(h.mode&32)!==0)&&(g=!1),g){if(h.flags|=16777216,(P&335544128)===P)if(h.stateNode.complete)h.flags|=8192;else if(PF())h.flags|=8192;else throw Jh=Pv,hE}else h.flags&=-16777217}function sF(h,g){if(g.type!=="stylesheet"||(g.state.loading&4)!==0)h.flags&=-16777217;else if(h.flags|=16777216,!_U(g))if(PF())h.flags|=8192;else throw Jh=Pv,hE}function Xv(h,g){g!==null&&(h.flags|=4),h.flags&16384&&(g=h.tag!==22?Ct():536870912,h.lanes|=g,tp|=g)}function tb(h,g){if(!Gn)switch(h.tailMode){case"hidden":g=h.tail;for(var _=null;g!==null;)g.alternate!==null&&(_=g),g=g.sibling;_===null?h.tail=null:_.sibling=null;break;case"collapsed":_=h.tail;for(var M=null;_!==null;)_.alternate!==null&&(M=_),_=_.sibling;M===null?g||h.tail===null?h.tail=null:h.tail.sibling=null:M.sibling=null}}function Br(h){var g=h.alternate!==null&&h.alternate.child===h.child,_=0,M=0;if(g)for(var P=h.child;P!==null;)_|=P.lanes|P.childLanes,M|=P.subtreeFlags&65011712,M|=P.flags&65011712,P.return=h,P=P.sibling;else for(P=h.child;P!==null;)_|=P.lanes|P.childLanes,M|=P.subtreeFlags,M|=P.flags,P.return=h,P=P.sibling;return h.subtreeFlags|=M,h.childLanes=_,g}function jie(h,g,_){var M=g.pendingProps;switch(rE(g),g.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Br(g),null;case 1:return Br(g),null;case 3:return _=g.stateNode,M=null,h!==null&&(M=h.memoizedState.cache),g.memoizedState.cache!==M&&(g.flags|=2048),Cc(Ni),ge(),_.pendingContext&&(_.context=_.pendingContext,_.pendingContext=null),(h===null||h.child===null)&&($m(g)?jc(g):h===null||h.memoizedState.isDehydrated&&(g.flags&256)===0||(g.flags|=1024,aE())),Br(g),null;case 26:var P=g.type,I=g.memoizedState;return h===null?(jc(g),I!==null?(Br(g),sF(g,I)):(Br(g),XE(g,P,null,M,_))):I?I!==h.memoizedState?(jc(g),Br(g),sF(g,I)):(Br(g),g.flags&=-16777217):(h=h.memoizedProps,h!==M&&jc(g),Br(g),XE(g,P,h,M,_)),null;case 27:if(De(g),_=fe.current,P=g.type,h!==null&&g.stateNode!=null)h.memoizedProps!==M&&jc(g);else{if(!M){if(g.stateNode===null)throw Error(r(166));return Br(g),null}h=re.current,$m(g)?U5(g):(h=fU(P,M,_),g.stateNode=h,jc(g))}return Br(g),null;case 5:if(De(g),P=g.type,h!==null&&g.stateNode!=null)h.memoizedProps!==M&&jc(g);else{if(!M){if(g.stateNode===null)throw Error(r(166));return Br(g),null}if(I=re.current,$m(g))U5(g);else{var J=u_(fe.current);switch(I){case 1:I=J.createElementNS("http://www.w3.org/2000/svg",P);break;case 2:I=J.createElementNS("http://www.w3.org/1998/Math/MathML",P);break;default:switch(P){case"svg":I=J.createElementNS("http://www.w3.org/2000/svg",P);break;case"math":I=J.createElementNS("http://www.w3.org/1998/Math/MathML",P);break;case"script":I=J.createElement("div"),I.innerHTML=" +