{"version":3,"file":"quote-portal-components.a6b04082.js","mappings":"8lCAAO,SAASA,EAAMC,GAA+B,IAApBC,EAAcC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAChD,SAAUG,KAAKN,MAAMO,OAAON,EAAI,KAAOC,IAAW,KAAOA,IAASM,QAAQN,EAC5E,C,6CAEO,MAAMO,EAAS,CACpBC,YAAcA,GAAiCV,EAA4B,IAAtBO,OAAOG,IAAsB,IAClFC,YAAcA,GAAiCX,EAA4B,IAAtBO,OAAOI,IAAsB,IAClFC,YAAcA,GAAwBZ,EAAMY,GAC5CC,YAAcA,GAAwBb,EAAMa,GAC5CC,KAAOA,GAAiBd,EAAa,IAAPc,GAAc,IAC5CC,KAAOD,GAAiBd,EAAa,IAAPc,GAAc,IAC5CE,WAAaA,GAAuBhB,EAAmB,IAAbgB,GAAoB,IAC9DC,eAAiBA,GAAwBA,EACzCC,aAAeA,GAAsBA,EACrCC,aAAeA,GAAsBA,EACrCC,UAAYA,GAAsBpB,EAAkB,IAAZoB,GAAmB,IAC3DC,WAAaA,GAAuBrB,EAAmB,IAAbqB,GAAoB,KAGnDC,EAAc,IAEdC,EAAyBC,OAAOC,OAAO,CAClDC,IAAK,IAAIC,KAAK,KAAM,EAAG,GACvBC,IAAK,IAAID,KAAK,KAAM,EAAG,K,uICnBlB,MAAME,EAAuB,0BACvBC,EAAmB,YACnBC,EAAmB,YACnBC,EAAmB,CAC9B,qBACA,oBACA,sBACA,wBAGF,IAAIC,EAAM,CACR,CAAEC,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,QAASC,MAAO,SACzB,CAAED,MAAOJ,EAAkBK,MAAO,yBAClC,CAAED,MAAO,gBAAiBC,MAAO,iBAAkB1B,OAAQ,KAC3D,CAAEyB,MAAO,cAAeC,MAAO,eAAgB1B,OAAQ,KACvD,CAAEyB,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,QAASC,MAAO,SACzB,CAAED,MAAO,SAAUC,MAAO,iBAAkB1B,OAAQ,KACpD,CAAEyB,MAAO,SAAUC,MAAO,sBAAuB1B,OAAQ,KACzD,CAAEyB,MAAO,UAAWC,MAAO,sBAAuB1B,OAAQ,KAC1D,CAAEyB,MAAO,YAAaC,MAAO,0BAA2B1B,OAAQ,KAChE,CAAEyB,MAAO,cAAeC,MAAO,4BAA6B1B,OAAQ,KACpE,CAAEyB,MAAO,WAAYC,MAAO,mBAAoB1B,OAAQ,KACxD,CAAEyB,MAAO,cAAeC,MAAO,4BAA6B1B,OAAQ,KACpE,CAAEyB,MAAO,KAAMC,MAAO,OACtB,CAAED,MAAO,YAAaC,MAAO,eAC7B,CAAED,MAAO,MAAOC,MAAO,OACvB,CAAED,MAAO,KAAMC,MAAO,OACtB,CAAED,MAAO,KAAMC,MAAO,OACtB,CAAED,MAAO,KAAMC,MAAO,OACtB,CAAED,MAAO,OAAQC,MAAO,SACxB,CAAED,MAAO,MAAOC,MAAO,OACvB,CAAED,MAAO,MAAOC,MAAO,OACvB,CAAED,MAAO,MAAOC,MAAO,OACvB,CAAED,MAAO,cAAeC,MAAO,eAAgB1B,OAAQ,KACvD,CAAEyB,MAAO,aAAcC,MAAO,mBAAoB1B,OAAQ,KAC1D,CAAEyB,MAAO,YAAaC,MAAO,gBAAiB1B,OAAQ,KACtD,CAAEyB,MAAO,WAAYC,MAAO,iBAC5B,CAAED,MAAO,aAAcC,MAAO,eAC9B,CAAED,MAAO,WAAYC,MAAO,4BAC5B,CAAED,MAAO,SAAUC,MAAO,wBAC1B,CAAED,MAAO,aAAcC,MAAO,SAAU1B,OAAQ,KAChD,CAAEyB,MAAO,aAAcC,MAAO,mBAAoB1B,OAAQ,KAC1D,CAAEyB,MAAO,MAAOC,MAAO,MAAO1B,OAAQ,KACtC,CAAEyB,MAAO,aAAcC,MAAO,UAC9B,CAAED,MAAO,gBAAiBC,MAAO,cACjC,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,mBAAoBC,MAAO,sBACpC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,SAAUC,MAAO,qBAAsB1B,OAAQ,KACxD,CAAEyB,MAAO,SAAUC,MAAO,sBAAuB1B,OAAQ,KACzD,CAAEyB,MAAO,UAAWC,MAAO,sBAAuB1B,OAAQ,KAC1D,CAAEyB,MAAO,UAAWC,MAAO,sBAAuB1B,OAAQ,KAC1D,CAAEyB,MAAO,UAAWC,MAAO,qBAAsB1B,OAAQ,KACzD,CAAEyB,MAAO,UAAWC,MAAO,2BAA4B1B,OAAQ,KAC/D,CAAEyB,MAAO,eAAgBC,MAAO,oBAAqB1B,OAAQ,KAC7D,CAAEyB,MAAO,eAAgBC,MAAO,oBAAqB1B,OAAQ,KAC7D,CAAEyB,MAAO,OAAQC,MAAO,QACxB,CAAED,MAAO,SAAUC,MAAO,cAAe1B,OAAQ,KACjD,CAAEyB,MAAO,UAAWC,MAAO,eAAgB1B,OAAQ,KACnD,CAAEyB,MAAO,QAASC,MAAO,2BAA4B1B,OAAQ,KAC7D,CAAEyB,MAAO,QAASC,MAAO,2BAA4B1B,OAAQ,KAC7D,CAAEyB,MAAO,SAAUC,MAAO,4BAA6B1B,OAAQ,KAC/D,CAAEyB,MAAO,MAAOC,MAAO,8BACvB,CAAED,MAAO,aAAcC,MAAO,oBAAqB1B,OAAQ,KAC3D,CAAEyB,MAAO,eAAgBC,MAAO,uBAAwB1B,OAAQ,KAChE,CAAEyB,MAAO,UAAWC,MAAO,0BAA2B1B,OAAQ,KAC9D,CAAEyB,MAAO,YAAaC,MAAO,6BAA8B1B,OAAQ,KACnE,CAAEyB,MAAO,qBAAsBC,MAAO,uBAAwB1B,OAAQ,KACtE,CAAEyB,MAAO,qBAAsBC,MAAO,wBACtC,CAAED,MAAO,YAAaC,MAAO,0BAC7B,CAAED,MAAO,cAAeC,MAAO,eAAgB1B,OAAQ,MAGrD2B,EAAQ,CACV,CAAEF,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,YAAaC,MAAO,yBAC7B,CAAED,MAAO,aAAcC,MAAO,UAC9B,CAAED,MAAO,gBAAiBC,MAAO,cACjC,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,mBAAoBC,MAAO,sBACpC,CAAED,MAAO,iBAAkBC,MAAO,oBAGhCE,EAAS,CACX,CAAEH,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,WAAYC,MAAO,YAC5B,CAAED,MAAO,UAAWC,MAAO,WAC3B,CAAED,MAAO,YAAaC,MAAO,yBAC7B,CAAED,MAAO,aAAcC,MAAO,SAAU1B,OAAQ,KAChD,CAAEyB,MAAO,SAAUC,MAAO,qBAAsB1B,OAAQ,KACxD,CAAEyB,MAAO,SAAUC,MAAO,sBAAuB1B,OAAQ,KACzD,CAAEyB,MAAO,UAAWC,MAAO,sBAAuB1B,OAAQ,KAC1D,CAAEyB,MAAO,UAAWC,MAAO,sBAAuB1B,OAAQ,KAC1D,CAAEyB,MAAO,UAAWC,MAAO,qBAAsB1B,OAAQ,KACzD,CAAEyB,MAAO,UAAWC,MAAO,2BAA4B1B,OAAQ,KAC/D,CAAEyB,MAAO,aAAcC,MAAO,UAC9B,CAAED,MAAO,gBAAiBC,MAAO,cACjC,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,mBAAoBC,MAAO,sBACpC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,YAAaC,MAAO,2BAG3BG,EAAU,CACZ,CAAEJ,MAAO,MAAOC,MAAO,OACvB,CAAED,MAAO,QAASC,MAAO,WACzB,CAAED,MAAO,MAAOC,MAAO,cACvB,CAAED,MAAO,MAAOC,MAAO,QACvB,CAAED,MAAO,MAAOC,MAAO,iBAGrBI,EAAU,CACZ,CAAEL,MAAO,GAAIC,MAAO,OACpB,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,wBAAyBC,MAAO,0BACzC,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,oBAAqBC,MAAO,sBACrC,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAOH,EAAkBI,MAAO,aAClC,CAAED,MAAO,aAAcC,MAAO,cAC9B,CAAED,MAAO,cAAeC,MAAO,eAC/B,CAAED,MAAO,aAAcC,MAAO,eAC9B,CAAED,MAAO,aAAcC,MAAO,cAC9B,CAAED,MAAO,YAAaC,MAAO,cAG3BK,EAAa,CACf,CAAEN,MAAO,GAAIC,MAAO,OACpB,CAAED,MAAO,aAAcC,MAAO,0BAC9B,CAAED,MAAO,qBAAsBC,MAAO,wBACtC,CAAED,MAAO,sBAAuBC,MAAO,wBACvC,CAAED,MAAO,mBAAoBC,MAAO,uBACpC,CAAED,MAAO,qBAAsBC,MAAO,uBACtC,CAAED,MAAO,WAAYC,MAAO,YAC5B,CAAED,MAAO,sBAAuBC,MAAO,2BACvC,CAAED,MAAO,WAAYC,MAAO,YAC5B,CAAED,MAAO,uBAAwBC,MAAO,yBACxC,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,kBAAmBC,MAAO,oBACnC,CAAED,MAAO,oBAAqBC,MAAO,sBACrC,CAAED,MAAO,YAAaC,MAAO,cAC7B,CAAED,MAAO,uBAAwBC,MAAO,4BACxC,CAAED,MAAO,mBAAoBC,MAAO,uBACpC,CAAED,MAAO,gBAAiBC,MAAO,oBACjC,CAAED,MAAO,mBAAoBC,MAAO,uBACpC,CAAED,MAAO,wBAAyBC,MAAO,6BACzC,CAAED,MAAO,gCAAiCC,MAAO,uCACjD,CAAED,MAAO,gBAAiBC,MAAO,iBACjC,CAAED,MAAO,eAAgBC,MAAO,gBAChC,CAAED,MAAO,oBAAqBC,MAAO,sBACrC,CAAED,MAAO,4BAA6BC,MAAO,iCAC7C,CAAED,MAAO,4BAA6BC,MAAO,iCAC7C,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,oBAAqBC,MAAO,0BACrC,CAAED,MAAO,sBAAuBC,MAAO,4BACvC,CAAED,MAAO,uBAAwBC,MAAO,6BACxC,CAAED,MAAO,aAAcC,MAAO,eAC9B,CAAED,MAAO,yBAA0BC,MAAO,2BAC1C,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,gBAAiBC,MAAO,iBACjC,CAAED,MAAO,gBAAiBC,MAAO,iBACjC,CAAED,MAAO,qBAAsBC,MAAO,uBACtC,CAAED,MAAO,sBAAuBC,MAAO,wBACvC,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,sBAAuBC,MAAO,0BACvC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,2BAA4BC,MAAO,gCAC5C,CAAED,MAAO,oCAAqCC,MAAO,4CACrD,CAAED,MAAO,4BAA6BC,MAAO,iCAC7C,CAAED,MAAO,2BAA4BC,MAAO,gCAC5C,CAAED,MAAO,uBAAwBC,MAAO,yBACxC,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,kCAAmCC,MAAO,uCACnD,CAAED,MAAO,0BAA2BC,MAAO,8BAC3C,CAAED,MAAO,gBAAiBC,MAAO,iBACjC,CAAED,MAAO,iCAAkCC,MAAO,uCAClD,CAAED,MAAO,eAAgBC,MAAO,iBAChC,CAAED,MAAO,yBAA0BC,MAAO,2BAC1C,CAAED,MAAO,8BAA+BC,MAAO,oCAC/C,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,sBAAuBC,MAAO,0BACvC,CAAED,MAAO,gCAAiCC,MAAO,sCACjD,CAAED,MAAO,WAAYC,MAAO,YAC5B,CAAED,MAAO,OAAQC,MAAO,QACxB,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,kBAAmBC,MAAO,oBACnC,CAAED,MAAO,4BAA6BC,MAAO,+BAC7C,CAAED,MAAO,wBAAyBC,MAAO,2BACzC,CAAED,MAAO,4BAA6BC,MAAO,iCAC7C,CAAED,MAAO,yBAA0BC,MAAO,2BAC1C,CAAED,MAAO,gCAAiCC,MAAO,mCACjD,CAAED,MAAO,2BAA4BC,MAAO,6BAC5C,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,uBAAwBC,MAAO,2BACxC,CAAED,MAAO,gBAAiBC,MAAO,oBACjC,CAAED,MAAO,4BAA6BC,MAAO,mCAC7C,CAAED,MAAO,uBAAwBC,MAAO,2BACxC,CAAED,MAAO,qBAAsBC,MAAO,yBACtC,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,UAAWC,MAAO,WAC3B,CAAED,MAAO,UAAWC,MAAO,WAC3B,CAAED,MAAO,uBAAwBC,MAAO,4BACxC,CAAED,MAAO,cAAeC,MAAO,gBAC/B,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,wBAAyBC,MAAO,2BACzC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,sBAAuBC,MAAO,wBACvC,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,kBAAmBC,MAAO,oBACnC,CAAED,MAAO,iBAAkBC,MAAO,sBAClC,CAAED,MAAO,WAAYC,MAAO,iBAC5B,CAAED,MAAO,0BAA2BC,MAAO,kCAC3C,CAAED,MAAO,mBAAoBC,MAAO,wBACpC,CAAED,MAAO,kBAAmBC,MAAO,uBACnC,CAAED,MAAO,0BAA2BC,MAAO,kCAC3C,CAAED,MAAO,8BAA+BC,MAAO,oCAC/C,CAAED,MAAO,4BAA6BC,MAAO,kCAC7C,CAAED,MAAO,gBAAiBC,MAAO,kBACjC,CAAED,MAAO,sBAAuBC,MAAO,0BACvC,CAAED,MAAO,qBAAsBC,MAAO,0BACtC,CAAED,MAAO,mBAAoBC,MAAO,qBACpC,CAAED,MAAO,0BAA2BC,MAAO,4BAC3C,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,aAAcC,MAAO,cAC9B,CAAED,MAAO,YAAaC,MAAO,aAC7B,CAAED,MAAO,wBAAyBC,MAAO,6BACzC,CAAED,MAAO,wBAAyBC,MAAO,6BACzC,CAAED,MAAO,qBAAsBC,MAAO,wBACtC,CAAED,MAAO,uBAAwBC,MAAO,yBACxC,CAAED,MAAO,kBAAmBC,MAAO,sBACnC,CAAED,MAAO,2BAA4BC,MAAO,gCAC5C,CAAED,MAAO,iBAAkBC,MAAO,wBAClC,CAAED,MAAO,iBAAkBC,MAAO,qBAClC,CAAED,MAAO,eAAgBC,MAAO,mBAChC,CAAED,MAAO,aAAcC,MAAO,iBAC9B,CAAED,MAAO,kBAAmBC,MAAO,sBACnC,CAAED,MAAO,aAAcC,MAAO,iBAC9B,CAAED,MAAO,gBAAiBC,MAAO,oBACjC,CAAED,MAAO,wBAAyBC,MAAO,6BACzC,CAAED,MAAO,0BAA2BC,MAAO,4BAC3C,CAAED,MAAO,iBAAkBC,MAAO,qBAClC,CAAED,MAAO,cAAeC,MAAO,eAC/B,CAAED,MAAO,iCAAkCC,MAAO,sCAClD,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,kCAAmCC,MAAO,uCACnD,CAAED,MAAO,iBAAkBC,MAAO,kBAClC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,SAAUC,MAAO,UAC1B,CAAED,MAAO,sBAAuBC,MAAO,0BACvC,CAAED,MAAO,yBAA0BC,MAAO,6BAC1C,CAAED,MAAO,QAASC,MAAO,SACzB,CAAED,MAAO,4BAA6BC,MAAO,+BAC7C,CAAED,MAAO,qBAAsBC,MAAO,uBACtC,CAAED,MAAO,+BAAgCC,MAAO,kCAChD,CAAED,MAAO,kBAAmBC,MAAO,oBACnC,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,QAASC,MAAO,SACzB,CAAED,MAAO,kBAAmBC,MAAO,oBACnC,CAAED,MAAO,uBAAwBC,MAAO,yBACxC,CAAED,MAAO,cAAeC,MAAO,gBAC/B,CAAED,MAAO,UAAWC,MAAO,WAC3B,CAAED,MAAO,mBAAoBC,MAAO,uBACpC,CAAED,MAAO,iBAAkBC,MAAO,mBAClC,CAAED,MAAO,WAAYC,MAAO,YAC5B,CAAED,MAAO,UAAWC,MAAO,WAC3B,CAAED,MAAO,uBAAwBC,MAAO,2BACxC,CAAED,MAAO,qCAAsCC,MAAO,2CACtD,CAAED,MAAO,6BAA8BC,MAAO,kCAC9C,CAAED,MAAO,wBAAyBC,MAAO,6BACzC,CAAED,MAAO,0BAA2BC,MAAO,+BAC3C,CAAED,MAAO,qBAAsBC,MAAO,yBACtC,CAAED,MAAO,kBAAmBC,MAAO,qBAGjCM,EAAa,CACf,CAAEP,MAAO,GAAIC,MAAO,OACpB,CAAED,MAAO,OAAQC,MAAO,2BACxB,CAAED,MAAO,QAASC,MAAO,6BACzB,CAAED,MAAO,MAAOC,MAAO,yBACvB,CAAED,MAAO,QAASC,MAAO,4BACzB,CAAED,MAAO,QAASC,MAAO,6BACzB,CAAED,MAAO,OAAQC,MAAO,uBACxB,CAAED,MAAO,YAAaC,MAAO,wBAC7B,CAAED,MAAO,UAAWC,MAAO,qBAC3B,CAAED,MAAO,YAAaC,MAAO,yBAC7B,CAAED,MAAO,YAAaC,MAAO,wBAC7B,CAAED,MAAO,aAAcC,MAAO,0BAC9B,CAAED,MAAO,WAAYC,MAAO,uBAC5B,CAAED,MAAO,aAAcC,MAAO,wBAC9B,CAAED,MAAO,aAAcC,MAAO,2BAG5BO,EAAiB,CACnB,CAAER,MAAO,GAAIC,MAAO,OACpB,CAAED,MAAO,MAAOC,MAAO,aACvB,CAAED,MAAO,OAAQC,MAAO,cACxB,CAAED,MAAO,OAAQC,MAAO,cACxB,CAAED,MAAO,OAAQC,MAAO,cACxB,CAAED,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,MAAOC,MAAO,YACvB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,OAAQC,MAAO,aACxB,CAAED,MAAO,QAASC,MAAO,WACzB,CAAED,MAAO,QAASC,MAAO,WACzB,CAAED,MAAO,WAAYC,MAAO,gBAC5B,CAAED,MAAO,YAAaC,MAAO,cAC7B,CAAED,MAAO,YAAaC,MAAO,cAC7B,CAAED,MAAO,aAAcC,MAAO,e,yKCpThC,MAAMQ,EAAsB,CAC1B,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGF,SAASC,EAAqBC,EAA8BX,EAA2BY,GAAkB,IAAAC,EACvG,MAAMC,EAAIH,EAAOI,MAAMD,GAAMA,EAAEd,QAAUA,IAEzC,OAAe,QAAfa,EAAOC,aAAC,EAADA,EAAGd,aAAK,IAAAa,EAAAA,EAAID,CACrB,CAEA,SAASI,IAAuF,IAAAC,EAAAC,EAAA,IAAtEC,EAA6BlD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAGmD,EAAwBnD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAChFoD,EAAgC,CAClCC,EAAGZ,EAAqBX,EAAAA,GAAKoB,EAAMG,EAAG,UACtCC,EAAGb,EAAqBX,EAAAA,GAAKoB,EAAMI,EAAG,cACtCC,KAAMd,EAAqBR,EAAAA,GAAOiB,EAAMK,KAAM,aAC9CC,MAAOf,EAAqBP,EAAAA,GAAQgB,EAAMM,MAAO,UACjDC,IAAKhB,EAAqBN,EAAAA,GAASe,EAAMO,IAAK,SAC9CC,OAAoB,QAAdV,EAAEE,EAAMQ,cAAM,IAAAV,EAAAA,EAAI,GACxBW,OAAoB,QAAdV,EAAEC,EAAMS,cAAM,IAAAV,EAAAA,EAAI,IAGL,IAAAW,EAAAC,EAAjBV,IACFC,EAAQ,IACHA,EACHU,IAAKrB,EAAqBL,EAAAA,GAASc,EAAMY,IAAK,IAC9CC,IAAKtB,EAAqBJ,EAAAA,GAAYa,EAAMa,IAAK,IACjDC,IAAKvB,EAAqBH,EAAAA,GAAYY,EAAMc,IAAK,IACjDC,UAAWxB,EAAqBF,EAAAA,GAAgBW,EAAMe,UAAW,IACjEC,QAAsB,QAAfN,EAAEV,EAAMgB,eAAO,IAAAN,EAAAA,EAAI,GAC1BO,eAAoC,QAAtBN,EAAEX,EAAMiB,sBAAc,IAAAN,EAAAA,EAAI,KAI5C,OAAOT,CACT,CAEA,SAASgB,EAAkBjB,GACzB,OAAOJ,GAAiBsB,EAAAA,EAAAA,KAAUlB,EACpC,CAEA,IAAImB,EAAa,SAAUC,EAAeC,GACxC,IAAIC,EAAWF,EAAIG,SAASC,MAAK,SAAUC,EAAGC,GAC5C,OAAOD,EAAIC,CACb,IACIC,EAAIL,EAASxE,OACbH,GAAKgF,EAAI,GAAKN,EAAkB,EAEpC,GAAU,IAAN1E,EACF,OAAO2E,EAAS,GACX,GAAI3E,IAAMgF,EACf,OAAOL,EAASK,EAAI,GAEpB,IAAIC,IAAMjF,EACNkF,EAAIlF,EAAIiF,EACZ,OAAON,EAASM,EAAI,GAAKC,GAAKP,EAASM,GAAKN,EAASM,EAAI,GAE7D,EAEIE,EAAY,SAAUC,EAAoBC,GAC5C,IAAI9B,EAAI+B,EAAAA,MAELC,MAAM,CAAC,EAAGF,IACVG,OAAOF,EAAAA,IAAUF,GAAOF,GAAkBA,EAAE3B,KAC5CkC,KAAK,IAIR,OAHoB,IAAhBL,EAAKjF,QACPoD,EAAEiC,OAAO,CAAiB,GAAhBjC,EAAEiC,SAAS,GAA0B,IAAhBjC,EAAEiC,SAAS,KAAWC,KAAK,IAErDlC,CACT,EAEImC,EAAY,SAAUN,EAAoBO,GAC5C,IAAInC,EAAI8B,EAAAA,MAELC,MAAM,CAACI,EAAQ,IACfH,OAAOF,EAAAA,IAAUF,GAAOF,GAAkBA,EAAE1B,KAC5CiC,KAAK,IAIR,OAHoB,IAAhBL,EAAKjF,QACPqD,EAAEgC,OAAO,CAAiB,GAAhBhC,EAAEgC,SAAS,GAA0B,IAAhBhC,EAAEgC,SAAS,KAAWC,KAAK,IAErDjC,CACT,EAEIoC,EAAoC,CAAC,EACzC,SAASC,EAAcT,EAAoBU,GAAuD,IAK5FC,EACA3D,EACAX,EACAE,EACAqE,EACAC,EAV0DC,EAAUhG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGwC,EAC3E,GAAIkD,EAAaE,GACf,OAAOF,EAAaE,GAStB,OAAQA,GACN,IAAK,WACL,IAAK,SACL,IAAK,WACL,IAAK,UACHC,EAAIT,EAAAA,MAAkBC,MAAMW,GAC5B,MACF,IAAK,YACL,IAAK,gBACL,IAAK,iBACL,IAAK,aACL,IAAK,mBACL,IAAK,gBACH9D,EAASgD,EAAKe,KAAKjB,GAAM5E,OAAO4E,EAAExB,SAAQ0C,OAAO9F,OAAO+F,UACxD5E,EAAM+C,EAAWpC,EAAQ,KACzBT,EAAM6C,EAAWpC,EAAQ,KACzB4D,EAAWM,EAAAA,GAAyB,QACpCL,EAAcX,EAAAA,MAEXE,OAAO,CAAC/D,EAAKE,IACb4D,MAAM,CAAC,EAAGS,EAAS5D,OAAOjC,OAAS,IACtC4F,EAAKb,IACH,GAAI,MAAOA,EACT,OAAOc,EAASO,UAEdrB,EAAIvD,IAAKuD,EAAIvD,GACbuD,EAAIzD,IAAKyD,EAAIzD,GACjB,IAAI+E,EAAInG,KAAKN,MAAMkG,EAAYf,IAC/B,OAAOc,EAAS5D,OAAOoE,EAAE,EAE3BT,EAAEP,OAAS,IAAM,CAAC/D,EAAKE,GACvB,MACF,IAAK,aACL,IAAK,SACL,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACHS,EAASgD,EAAKe,KAAKjB,GAAM5E,OAAO4E,EAAExB,SAAQ0C,OAAO9F,OAAO+F,UAExD5E,EAAM+C,EAAWpC,EAAQ,KACzBT,EAAM6C,EAAWpC,EAAQ,KACzBT,EAAMtB,KAAKsB,IAAItB,KAAKoG,IAAIhF,GAAMpB,KAAKoG,IAAI9E,IACvCF,GAAOE,EAEPqE,EAAWM,EAAAA,GAAgBI,EAAAA,GAAQC,SACnCV,EAAcX,EAAAA,MAEXE,OAAO,CAAC/D,EAAKE,IACb4D,MAAM,CAAC,EAAGS,EAAS5D,OAAOjC,OAAS,IACtC4F,EAAKb,IACH,GAAI,MAAOA,EACT,OAAOc,EAASO,UAEdrB,EAAIvD,IAAKuD,EAAIvD,GACbuD,EAAIzD,IAAKyD,EAAIzD,GACjB,IAAI+E,EAAInG,KAAKN,MAAMkG,EAAYf,IAC/B,OAAOc,EAAS5D,OAAOoE,EAAE,EAE3BT,EAAEP,OAAS,IAAM,CAAC/D,EAAKE,GACvB,MACF,IAAK,YACHF,EAAM,EACNE,EAAM,EACNqE,EAAWM,EAAAA,GAAgBI,EAAAA,GAAQC,SACnCV,EAAcX,EAAAA,MAEXE,OAAO,CAAC/D,EAAKE,IACb4D,MAAM,CAAC,EAAGS,EAAS5D,OAAOjC,OAAS,IACtC4F,EAAKb,IACH,GAAI,MAAOA,EACT,OAAOc,EAASO,UAEdrB,EAAIvD,IAAKuD,EAAIvD,GACbuD,EAAIzD,IAAKyD,EAAIzD,GACjB,IAAI+E,EAAInG,KAAKN,MAAMkG,EAAYf,IAC/B,OAAOc,EAAS5D,OAAOoE,EAAE,EAE3BT,EAAEP,OAAS,IAAM,CAAC/D,EAAKE,GACvB,MAEF,QACEoE,EAAI,WACF,MAAO,SACT,EACAA,EAAEP,OAAS,IAAM,CAAC,YAOtB,OAHIJ,EAAKjF,OAAS,IAChByF,EAAaE,GAAeC,GAEvBA,CACT,CAEA,IAAIa,EAAe,SAAUxB,GAC3B,IAAIyB,EAAIvB,EAAAA,MAELC,MAAM,CAAC,EAAG,KACVC,OAAOF,EAAAA,IAAUF,GAAOF,GAAkBA,EAAEzB,QAC5CgC,KAAK,IAKR,OAHsB,IAAlBoB,EAAErB,SAAS,IAA8B,IAAlBqB,EAAErB,SAAS,IACpCqB,EAAErB,OAAO,CAAC,EAAG,KAERqB,CACT,EAEIC,EAAY,SACd1B,EACAC,EACAM,EACAG,EACAI,GAEA,MAAO,CACL3C,EAAG4B,EAAUC,EAAMC,GACnB7B,EAAGkC,EAAUN,EAAMO,GACnBkB,EAAGD,EAAaxB,GAChBW,EAAGF,EAAcT,EAAMU,EAAaI,GAExC,EAEA,SAASa,EAAkBC,EAAmCC,GAC5D,MAAM7D,GAAQ8D,EAAAA,EAAAA,GAAkB,IAAK3F,OAAO4F,YAAYF,QAAAA,EAAa,OAAQD,IAE7E,MAAO,GAAGI,OAAOC,SAASC,YAAYlE,GACxC,CAEA,SAASmE,EAAYtF,EAAwBzB,EAAiBgH,GAC5D,GAAIA,IAAqBlH,OAAO+F,SAASpE,GACvC,MAAO,IAGT,GAAqB,iBAAVA,EAAoB,CAC7B,MAAMwF,EAAWpH,KAAKoG,IAAIxE,GAGxBA,EADEwF,EAAW,IACLxF,EAAM1B,QAAQ,GACbkH,EAAW,KACXxF,EAAQ,KAAM1B,QAAQ,GAAK,IAC3BkH,EAAW,KACXxF,EAAQ,KAAS1B,QAAQ,GAAK,KAE9B0B,EAAQ,KAAY1B,QAAQ,GAAK,GAE9C,CAMA,MAJe,MAAXC,IACFyB,GAAS,KAGJA,CACT,C,gFC/PO,SAASyF,EAAoBC,GAWT,IAXU,MACnCtC,EAAQ,IAAG,OACXM,EAAS,IAAG,OACZiC,EAAM,UACNC,EAAS,aACTC,EAAY,2BACZC,EAA6BC,EAAAA,GAA2BC,QAAO,eAC/DC,EAAc,MACdC,EAAK,OACL/F,EAASgG,IAA4B,YACrCC,GAAc,GACSV,EACvB,MAAO,CACLW,OAAQC,EAAAA,GAAW,QACnBlD,QACAM,SACA6C,SAAU,EACVC,UAAW,EACXC,YAAY,EACZC,UAAU,EACVZ,6BACAG,iBACAC,QACA/F,SACAwG,OAAQ,CACN,CACEvD,MAAO,EACPwD,WAAW,EACXC,aAAa,EACbC,UAAW,KACXpD,SACAkC,YACAmB,MAAOC,EAAAA,GAAUC,OACjBtB,OAAQA,EACRuB,WAAY,EACZC,WAAYC,EAAAA,GAAWC,MACvBjB,cACAkB,SAAS,EACTC,MAAO,CACL,CACE7D,SACA8D,SAAU3B,MAMtB,CAEO,SAASM,IACd,IACE,OAAOsB,KAAKC,OAAMC,EAAAA,EAAAA,IAAiB,gBACrC,CAAE,MACA,MACF,CACF,C,mGC5EO,MAAMC,EAAkB,uCAAsC,IAEhEC,EAAS,SAATA,GAAS,OAATA,EAAS,8BAATA,EAAS,+BAATA,EAAS,4BAATA,EAAS,yBAATA,CAAS,EAATA,GAAS,IAOd,MAAMC,EAAgB,CACpB,CAACD,EAAUE,oBAAqB,CAAEC,WAAY,EAAGC,MAAO,CAAE7E,MAAO,IAAK8E,UAAW,MACjF,CAACL,EAAUM,iBAAkB,CAAEH,WAAY,EAAGC,MAAO,CAAE7E,MAAO,IAAK8E,UAAW,MAC9E,CAACL,EAAUO,eAAgB,CAAEJ,WAAY,EAAGC,MAAO,CAAE7E,MAAO,IAAK8E,UAAW,KAC5E,CAACL,EAAUQ,WAAY,CAAEL,WAAY,EAAGC,MAAO,CAAE7E,MAAO,IAAK8E,UAAW,OAGpEI,EAAyBC,EAAAA,OAA8BA,EAAAA,GAAqBC,iBAK3E,SAASC,IACd,IAAIC,EA2BJ,MAAO,CAAEC,OAzBT,WACE,IAC8B,IAAAC,EAA5B,GAAIN,EAC0B,QAA5BM,EAAAzD,OAAO0D,6BAAqB,IAAAD,GAA5BA,EAA8BE,MAAK,KAAM,IAAAC,EAAAC,EACvC,IAAIC,EAAuC,QAAjCF,EAAG5D,OAA6B,4BAAC,IAAA4D,EAAAA,EAAI,CAAC,EAChDL,EAA8B,QAA1BM,EAAG7D,OAAOqD,wBAAgB,IAAAQ,OAAA,EAAvBA,EAAyBE,IAAIC,IAAIvB,EAAiBqB,EAAO,GAGtE,CAAE,MAAOG,GACPC,QAAQC,MAAMF,EAChB,CACF,EAciBG,QAZjB,WACE,IAC8B,IAAAC,EAA5B,GAAIlB,EAC0B,QAA5BkB,EAAArE,OAAO0D,6BAAqB,IAAAW,GAA5BA,EAA8BV,MAAK,KAAM,IAAAW,EACnC,QAAJA,EAAAf,SAAI,IAAAe,GAAJA,EAAMF,SAAS,GAGrB,CAAE,MAAOH,GACPC,QAAQC,MAAMF,EAChB,CACF,EAGF,CAKO,SAASM,IAA6C,IAAtBC,EAAe1L,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAWvD,OAVA2L,EAAAA,iBAAsB,KACpB,MAAMlB,EAAOD,IAIb,OAFAC,EAAKC,SAEE,IAAMD,EAAKa,SAAS,GAG1BI,GAEIrB,CACT,CAqBO,SAASuB,EAAKnE,GAA+C,IAA9C,KAAEoE,EAAI,SAAEC,EAAW,KAAMC,GAAmBtE,EAChE,MAAMuE,EAAUpC,EAAUiC,GACpBI,EAAWpC,EAAcmC,GACzBE,EAAgB,GAAGF,KAAW7L,KAAKoB,IAAIpB,KAAKsB,IAAIqK,EAAU,GAAIG,EAASlC,cAE7E,OAAKM,GAEE8B,EAAAA,EAAAA,KAAA,UAASJ,EAAOK,GAAIF,EAAelC,MAAO,IAAK+B,EAAM/B,SAAUiC,EAASjC,SAF3C,IAGtC,C,kDClGO,SAASqC,EAAmBC,GAAqE,IAA/BC,EAASvM,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGwM,eAAeC,GAClG,MAAMzB,EAAgCxB,KAAKC,MAAMD,KAAKkD,UAAUJ,IAOhE,GALAtB,EAAOxC,YAAa,EAChBgE,eAAeG,iBACjB3B,EAAOxC,WAAawC,EAAOvC,WAAamE,EAAAA,GAAMC,YAG5CN,EAAW,CACb,MAAMO,EAAON,eAAeM,KAC5BC,EAAAA,GAAAA,sBAAgC/B,EAAQuB,EAAWO,EAAO,CAAEA,aAAS5M,EACvE,CAEA,OAAO8K,CACT,C,8GCHO,SAASgC,EAAUvF,GAA6C,IAA5C,SAAEwF,EAAQ,MAAEjL,EAAK,KAAEuB,EAAI,SAAE2J,GAAiBzF,EACnE,OACE0F,EAAAA,EAAAA,MAAA,OAAKC,UAAU,gCAA+BH,SAAA,CAC3CjL,IACCmK,EAAAA,EAAAA,KAACkB,EAAAA,GAAS,CAAC9J,KAAK,QAAQ6J,UAAU,gCAA+BH,SAC9DjL,IAIJ2J,EAAAA,SAAe1F,IAAIgH,GAAWK,IAC6B,IAAAC,EAA1D,OAAI5B,EAAAA,eAAqB2B,IAAUA,EAAME,OAASC,EAAAA,GACzC9B,EAAAA,aAAmB2B,EAAO,CAC/B/J,OACA2J,WACAjF,MAAwB,QAAnBsF,EAAED,EAAMvB,MAAM9D,aAAK,IAAAsF,EAAAA,EAAI,kBAC5BH,UAAWM,IAAWJ,EAAMvB,MAAMqB,UAAW,CAE3C,sCAAuCE,EAAMvB,MAAM4B,OACnD,kCAAmCL,EAAMvB,MAAM4B,WAK9CL,CAAK,MAIpB,CAEO,MAAMM,EAAmBH,EAAAA,E,2FCtCzB,SAASI,EAAapG,GAGiD,IAHhD,SAC5BqG,GAAW,KACR/B,GACuEtE,EAC1E,OACE0E,EAAAA,EAAAA,KAAC4B,EAAAA,EAAqB,IAChBhC,EACJ+B,SAAUA,EACVE,OAAQ,KACRC,gBAAgB,MAChBb,UAAWc,IAAWnC,EAAMqB,UAAW,yCAG7C,CAEAS,EAAcM,YAAcJ,EAAAA,EAAsBI,W,oGCd3C,MAAMC,EAAoB,SAQ1B,SAASC,EAAiB5G,GAQ9B,IAR+B,MAChC1F,EAAK,UACLuM,EAAS,UACTC,GAAY,GAKb9G,EACC,IAAKrH,OAAO+F,SAAS,IAAI3E,KAAKO,GAAOyM,WAAY,MAAO,GAExD,MAAMC,EAAOF,GAAYG,EAAAA,EAAAA,IAAQ3M,GAAS,IAAIP,KAAKO,GACnD,OAAOzB,EAAAA,EAAAA,GAAOmO,EAAMH,EACtB,CAEO,MAAMK,UAAcC,EAAAA,G,YAAdD,E,EAAK,e,EACM,IACjBC,EAAAA,EAAcC,aACjBzB,UAAW,mCACX0B,UAAU,EACVC,UAAU,EACVC,GAAI,EACJC,KA5Be,CACjBC,SAAU,GACVC,WAAY,IACZC,KAAM,M,07BCLR,MAAMC,EAAa,CACjBH,SAAU,GACVC,WAAY,IACZC,KAAM,IAaD,MAAME,UAAc3D,EAAAA,UAczB4D,MAAAA,GACE,OAAOpD,EAAAA,EAAAA,KAACqD,EAAAA,EAAa,IAAMC,KAAK1D,OAClC,EACD2D,EAjBYJ,EAAK,cAGKE,EAAAA,EAAcrB,aAAWuB,EAHnCJ,EAAK,eAKM,IACjBE,EAAAA,EAAcX,aACjBzB,UAAW,mCACX0B,UAAU,EACVC,UAAU,EACVE,KAAMI,EACNM,cAAeC,EAAAA,I,6FCZZ,MAAMC,EAAyBlE,EAAAA,cAA8E,CAClHmE,SAAU,CAAC,EACXC,YAAaA,IAAM,KACnBC,gBAAY9P,IAOP,SAAS+P,IACd,OAAOtE,EAAAA,WAAiBkE,EAC1B,CAYO,MAAMK,EAAiCzI,IAAqD,IAApD,SAAEwF,EAAQ,UAAEkD,EAAS,gBAAEC,GAAwB3I,EAC5F,MAAOuI,EAAYK,GAAiB1E,EAAAA,YAC7BmE,EAAUC,GAAepE,EAAAA,UAAe,KAC7C,MAAM2E,EAAcC,oBAAmBC,EAAAA,EAAAA,IAAUL,IACjD,GAA2B,IAAvBG,EAAYrQ,OAAc,OAAOmQ,EAErC,IACE,MAAO,IAAKA,KAAoB5G,KAAKC,MAAM6G,GAC7C,CAAE,MACA,OAAOF,CACT,KASF,OACEjE,EAAAA,EAAAA,KAAC0D,EAAuBY,SAAQ,CAAC1O,MAAO,CAAE+N,WAAUC,YAPrBD,IAC/BO,EAAc,CAAEK,UAAWxJ,OAAOyJ,UAClCZ,EAAYD,IACZc,EAAAA,EAAAA,IAAiBT,EAAW3G,KAAKkD,UAAUoD,GAAU,EAIqCE,cAAa/C,SACpGA,GAC+B,C,2KC1CvB,SAAS4D,EAAkBpJ,GAWsC,IAP9E,KACAvC,EAAI,QACJ4L,EAAO,WACPC,EAAU,mBACVC,EAAkB,QAClBC,EAAO,OACPC,GAC4EzJ,EAC5E,MAAM,GAAE2E,EAAE,MAAEpK,EAAK,aAAEmP,EAAY,qBAAEC,EAAoB,WAAEC,EAAU,MAAE7N,EAAK,QAAE8N,EAAO,oBAAEC,GAAwBrM,EAE3G,OACEiI,EAAAA,EAAAA,MAACqE,EAAAA,GAAS,CACRpE,UAAU,oBACVqE,YAAaA,KACXT,EAAmB5E,GAAKiF,EAAW,EACnCpE,SAAA,EAEFE,EAAAA,EAAAA,MAACuE,EAAAA,GAAQ,CACPtE,UAAWc,IAAW,2BAA4B,CAChD,gBAAiB+C,EACjB,oCAAqCC,KAAWI,SAAAA,EAASrR,UACxDgN,SAAA,EAEHd,EAAAA,EAAAA,KAACwF,EAAAA,GAAS,CACRC,YAAY,EACZC,MAAOC,EAAAA,GAAWC,KAClB3E,UAAWc,IAAWkD,EAAsB,0BAC5CY,SAAUT,EAAoBtE,UAE9Bd,EAAAA,EAAAA,KAAC8F,EAAAA,GAAQ,CACPC,UAAQ,EACRC,QAASd,EACTrP,MAAOmP,QAAAA,GAAgBhF,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,kDAAiDH,SAAEjL,IAC1FoL,UAAU,iBACV5J,MAAOA,EACPD,KAAK,WAIRuN,EAAQ7K,KAAKmM,IAAM,IAAAC,EAAA,OAClBlG,EAAAA,EAAAA,KAACwF,EAAAA,GAAS,CAERE,MAAOO,EAAOP,MACdD,YAAY,EACZxE,UAAWc,IAAWkE,EAAOhF,UAAoC,QAA3BiF,EAAED,EAAOE,0BAAkB,IAAAD,OAAA,EAAzBA,EAAAE,KAAAH,EAA4BlN,GAAO,eAAe+H,SAEzFmF,EAAOI,aAAatN,IALhBkN,EAAOhG,GAMF,OAGfkF,aAAO,EAAPA,EAASrL,KAAI,CAACwM,EAAMC,EAAOC,KAC1BxF,EAAAA,EAAAA,MAACuE,EAAAA,GAAQ,CAEPtE,UAAWc,IAAW,CACpB,oCAAqCwE,IAAUC,EAAM1S,OAAS,GAAKiR,IAClEjE,SAAA,EAEHd,EAAAA,EAAAA,KAACwF,EAAAA,GAAS,CAACC,YAAY,EAAOC,MAAOC,EAAAA,GAAWC,KAAM3E,UAAU,sBAAqBH,SAClFwF,EAAKzQ,QAEP+O,aAAU,EAAVA,EAAa0B,EAAKrG,IAAInG,KAAKmM,IAC1BjG,EAAAA,EAAAA,KAACwF,EAAAA,GAAS,CAERE,MAAOO,EAAOP,MACdD,YAAY,EACZxE,UAAWc,IAAWkE,EAAOhF,UAAW,eAAeH,SAEtDmF,EAAOI,aAAaC,IALhBL,EAAOhG,QAVXqG,EAAKrG,QAsBpB,CC5Ee,SAASwG,EAAenL,GAYsC,IAR3E,UACAoL,EAAS,YACTC,EAAW,QACXhC,EAAO,WACPC,EAAU,KACV7L,EAAI,aACJ6N,GAAe,EAAI,mBACnB/B,GACyEvJ,EACzE,OACE0F,EAAAA,EAAAA,MAAC6F,EAAAA,GAAK,CAAC5F,UAAWM,IAAW,oDAAqD,CAAE,cAAeqF,IAAgB9F,SAAA,CAChH4F,EACA3N,EAAKe,KAAI,CAACgN,EAAKP,KAAK,IAAAQ,EAAA,OACnB/G,EAAAA,EAAAA,KAAC0E,EAAkB,CAEjB3L,KAAM+N,EACNnC,QAASA,EACTC,WAAYA,EACZC,mBAAoBA,EACpBC,QAAmB,IAAVyB,EACTxB,OAAQwB,IAAUxN,EAAKjF,OAAS,GANrB,QAMuBiT,EAN7BD,EAAI7G,UAAE,IAAA8G,EAAAA,EAAID,EAAIjR,MAOnB,IAEH8Q,IAGP,CC5BO,SAASK,EAAgB1L,GAe8C,IAAA2L,EAAAC,EAAA,IAX5E,SACApG,EAAQ,UACR4F,EAAS,YACTC,EAAW,QACXhC,EAAO,WACPC,EAAU,OACVuC,EAAM,KACNpO,EAAI,aACJ6N,EAAY,uBACZQ,EAAsB,mBACtBvC,GAC0EvJ,EAC1E,MAAM+L,GACJrH,EAAAA,EAAAA,KAACyG,EAAe,CACdC,UAAWA,EACXC,YAAaA,EACb5N,KAAMA,EACN4L,QAASA,EACTC,WAAYA,EACZgC,aAAcA,EACd/B,mBAAoBA,IAGxB,OACE7D,EAAAA,EAAAA,MAAA,OAAKC,UAAU,uBAAsBH,SAAA,EACnCE,EAAAA,EAAAA,MAAA,OAAKC,UAAU,qBAAoBH,SAAA,CAChCqG,EACArG,KAEFsG,GACCpH,EAAAA,EAAAA,KAACsH,EAAAA,EAAwB,CAAmCC,WAAS,EAACC,mBAAiB,EAAA1G,SACpFuG,GADkD,QACnCJ,EADoB,QACpBC,EADanO,EAAK,UAAE,IAAAmO,OAAA,EAAPA,EAAS3Q,OAAOzC,cAAM,IAAAmT,EAAAA,EAAI,GAIzDI,IAIR,C,SCpEO,SAASI,EAAyC1O,GACvD,MAAM2O,EAAa,IAAI3O,GAAMP,MAAK,CAACC,EAAGC,IAAMzE,OAAO0T,SAASlP,EAAEmP,MAAQ3T,OAAO0T,SAASjP,EAAEkP,QACxF,OAAOF,EAAWG,QAIhB,CAACC,EAAGxM,EAAmBnB,KAAM,IAAA4N,EAAAC,EAAA,IAAvB,KAAEJ,EAAI,MAAEhS,GAAO0F,EACnB,MAAM2M,EAA+B,QAA3BF,EAAoB,QAApBC,EAAGN,EAAWvN,EAAI,UAAE,IAAA6N,OAAA,EAAjBA,EAAmBpS,aAAK,IAAAmS,EAAAA,EAAI,KACzC,IAAIG,EAAwB,KACxBC,EAA2B,KAO/B,OALc,OAAVvS,GAA2B,OAATqS,GAA2B,IAAVrS,GAAwB,IAATqS,IACpDC,EAAStS,EAAQqS,EACjBE,GAAcvS,EAAQqS,GAAQjU,KAAKoG,IAAI6N,GAAS,KAG3C,CACLC,OAAQ,IACHJ,EAAII,OACP,CAACN,GAAOM,GAEVC,UAAW,IACNL,EAAIK,UACP,CAACP,GAAOO,GAEX,GAEH,CAAED,OAAQ,CAAC,EAAGC,UAAW,CAAC,GAE9B,CAEO,SAASC,EAAmDrP,GACjE,MAAM2O,EAAa,IAAI3O,GAAMP,MAAK,CAACC,EAAGC,IAAMzE,OAAO0T,SAASlP,EAAEmP,MAAQ3T,OAAO0T,SAASjP,EAAEkP,QACxF,OAAOF,EAAWG,QAAsC,CAACC,EAAGO,EAAmBlO,KAAM,IAAAmO,EAAAC,EAAA,IAAvB,KAAEX,EAAI,MAAEhS,GAAOyS,EAC3E,MAAMJ,EAA+B,QAA3BK,EAAoB,QAApBC,EAAGb,EAAWvN,EAAI,UAAE,IAAAoO,OAAA,EAAjBA,EAAmB3S,aAAK,IAAA0S,EAAAA,EAAI,KACzC,IAAIH,EAA2B,KAM/B,OAJc,OAAVvS,GAA2B,OAATqS,GAA2B,IAAVrS,GAAwB,IAATqS,IACpDE,GAAcvS,EAAQqS,GAAQjU,KAAKoG,IAAI6N,GAAS,KAG3C,IACFH,EACH,CAACF,GAAOO,EACT,GACA,CAAC,EACN,CAEO,SAASK,EAAaC,EAAmBtM,GAK9C,OAD8BA,EAAWsM,EAFfzU,KAAKoB,IAAI2F,OAAO2N,WAAY,MAGxB,GAChC,CAEO,SAASC,IAAkD,IAA7B/S,EAAoB/B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAC1D,OAAc,OAAV+B,GAA4B,IAAVA,EAAoB,0BAGtCA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,GAAS,GAAW,4BACpBA,EAAQ,EAAU,4BAGlBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,GAAW,8BACnBA,EAAQ,EAAU,mCAAtB,CACF,C,+FCrEO,SAASgT,IACd,MAAM5N,GAAW6N,EAAAA,EAAAA,MAEjBrJ,EAAAA,WAAgB,KAGd,MAAM,EAAErF,IAAMlC,EAAAA,EAAAA,GAAkB+C,EAAS8N,SACpC3O,GAAKY,OAAOgO,oBACfhO,OAAOC,SAASgO,QAClB,GACC,CAAChO,EAAS8N,QACf,C,sECRO,SAASG,IAAyE,IAA3D,iBAAEC,EAAmB,IAAG,WAAEC,GAAa,GAAatV,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACpF,MAAOuD,EAAMgS,GAAW5J,EAAAA,SAAe,CACrC6J,YAAaC,SAASC,gBAAgBF,YACtCX,WAAY3N,OAAO2N,WACnBc,YAAazO,OAAOyO,cAsBtB,OAnBAhK,EAAAA,WAAgB,KACd,IAAK2J,EAAY,OAEjB,MAAMM,EAAeC,KAAS,KAC5BN,EAAQ,CACNC,YAAaC,SAASC,gBAAgBF,YACtCX,WAAY3N,OAAO2N,WACnBc,YAAazO,OAAOyO,aACpB,GACDN,GAIH,OAFAnO,OAAO4O,iBAAiB,SAAUF,GAE3B,KACLA,EAAaG,SACb7O,OAAO8O,oBAAoB,SAAUJ,EAAa,CACnD,GACA,CAACP,EAAkBC,IAEf/R,CACT,C,oGC7BA,MAAM0S,EAAU,EAET,SAASC,EAAoBC,GAAwB,IAAAC,EAAAC,EAC1D,MAAMC,EAAmBb,SAASc,eAAeJ,GAE3CK,EAAMF,aAAgB,EAAhBA,EAAkBG,wBAE9B,MAAO,CACLtR,MAAOhF,KAAKsB,KAAe,QAAX2U,EAACI,aAAG,EAAHA,EAAKrR,aAAK,IAAAiR,EAAAA,EAAI,GAAKH,EAAS,GAC7CxQ,OAAQtF,KAAKsB,KAAgB,QAAZ4U,EAACG,aAAG,EAAHA,EAAK/Q,cAAM,IAAA4Q,EAAAA,EAAI,GAAKJ,EAAS,GAEnD,CAEO,SAASS,EAAeC,EAAWR,GACxC,MAAMS,EAAmBV,EAAoBC,GAE7C,GAAIQ,EAAM,CACR,MAAME,EAAcxV,OAAOyV,OAAO,CAAC,EAAGC,qBAAqBC,UAAW,CACpE9U,OAAQ6U,qBAAqB7U,OAC7BiD,MAAOyR,EAAiBzR,MACxBM,OAAQmR,EAAiBnR,OACzB+C,YAAY,EACZyO,QAAS,CAAC,SAAU,WAAY,UAAW,WAE7C,IAAK,IAAI3Q,EAAI,EAAGA,EAAIuQ,EAAYnO,OAAOzI,OAAQqG,IACxCuQ,EAAYnO,OAAOpC,GAAG4C,aACzB2N,EAAYnO,OAAOpC,GAAG4C,WAAa,SAIvC,OAAO2N,CACT,CAEA,MAAO,CACLK,WAAW,EACX/R,MAAOyR,EAAiBzR,MACxBM,OAAQmR,EAAiBnR,OACzB6C,SAAU,EACVC,UAAW,EACXC,YAAY,EACZ2O,oBAAoB,EACpBlP,MAAO8O,qBAAqB9O,MAC5B/F,OAAQ6U,qBAAqB7U,OAC7B+U,QAAS,CAAC,SAAU,WAAY,UAAW,SAC3C7O,OAAQ2O,qBAAqB3O,OAC7BM,OAAQqO,qBAAqB7S,QAAQ+B,KAAI,SAAUyB,EAAgBgL,GACjE,MAAO,CACL/K,UAAWoP,qBAAqBK,QAAQ1E,GACxC7J,UAAWkO,qBAAqBM,OAAO3E,GACvC5J,MAAOiO,qBAAqBO,SAASxO,OAAS,SAC9CpB,OAAQA,EACRwB,YAAYqO,EAAAA,EAAAA,IAAuB7P,GACnCiB,UAAWoO,qBAAqBO,SAAS3O,UACzCC,YAAamO,qBAAqBO,SAAS1O,YAC3C4O,eAAgBT,qBAAqBO,SAASE,eAC9CrP,aAAa,EACbmB,MAAOyD,EAAAA,GAAAA,SAAmBgK,qBAAqBO,UAEnD,IAEJ,CAEO,MAAMG,EAAiBA,CAACC,EAA2BV,KACxD,MAAMW,EAAcnO,KAAKkD,UAAUsK,GAAWY,SAAS,YAEvD,IAAK,IAAItR,EAAI,EAAGA,EAAIoR,EAAOzX,OAAQqG,IAAK,CACtC,MAAMuR,EAAQH,EAAOpR,GAEG,OAApBuR,EAAMlQ,WAA0C,OAApBkQ,EAAMlQ,WAA0C,OAApBkQ,EAAMlQ,WAA0C,QAApBkQ,EAAMlQ,YACvFkQ,EAAMC,eAAe,uBACxBD,EAAME,kBAAwC,QAApBF,EAAMlQ,UAAsB,IAAM,KAGzDkQ,EAAMC,eAAe,wBACxBD,EAAMG,mBAAyC,QAApBH,EAAMlQ,UAAsB,IAAM,KAG1DkQ,EAAMC,eAAe,4BACxBD,EAAMI,uBAA6C,QAApBJ,EAAMlQ,UAAsB,EAAI,IAG5DkQ,EAAMC,eAAe,8BACxBD,EAAMK,yBAA2B,IAIhCL,EAAMC,eAAe,iBACxBD,EAAMF,YAAcA,GAGtBE,EAAMM,OAASnB,EAAUL,KAAKvK,GAE9BgM,EAAAA,EAAM1N,OAAcmN,EACtB,E,iHC5FK,MAAMQ,EAAe1M,EAAAA,cAMzB,CAAE+G,OAAQ,EAAGhL,OAAQ,GAAI4Q,OAAQC,EAAAA,GAAUvT,EAAGwT,KAAM,KAAMC,QAAS,OAE/D,SAASC,EAAoBjR,GAI2B,IAJ1B,OACnCC,EAAM,MACNgL,EAAK,SACLzF,GAC2DxF,EAC3D,MAAOvE,IAASyV,EAAAA,EAAAA,MACVnL,EAAOtK,EAAM0V,IAAIC,EAAAA,GAAWC,MAC5BR,EAASpV,EAAM0V,IAAIC,EAAAA,GAAWE,QAC9BC,EAAerN,EAAAA,SACnB,KAAM,CAAG+G,QAAOhL,SAAQ4Q,SAAQE,MAAMS,EAAAA,EAAAA,GAAazL,GAAOiL,SAASS,EAAAA,EAAAA,GAAgB1L,MACnF,CAACkF,EAAO4F,EAAQ5Q,EAAQ8F,IAG1B,OAAOrB,EAAAA,EAAAA,KAACkM,EAAa5H,SAAQ,CAAC1O,MAAOiX,EAAa/L,SAAEA,GACtD,C,6JCZO,SAASkM,EAAU1R,GAMvB,IANwB,eACzB2R,EAAc,WACdC,GAID5R,EACC,MAAM6R,EAAU3N,EAAAA,OAAa8J,SAASc,eAAegD,EAAAA,MACrDC,EAAAA,EAAAA,KAEA,MAAMxO,EAASW,EAAAA,SAAc,KAC3B,IAAIkL,EAAc3P,OAAOuS,kBAEzB,IAAK5C,EAAa,OAEdA,EAAY6C,YAEdjC,EAAAA,EAAAA,IAAeZ,EAAY6C,WAAY7C,IAGnCA,EAAY8C,WAAWvB,EAAAA,GAAM1N,OAAOmM,EAAY8C,WACpD9C,GAAcxK,EAAAA,EAAAA,GAAmBwK,EAAawC,IAGhD,MAAM,EAAEO,EAAIpN,eAAeqN,gBAAkBzV,EAAAA,EAAAA,KACvC0V,GAAaC,EAAAA,EAAAA,GAAyBlD,EAAa+C,GAEzD,MAAO,IACF/C,KACAiD,EACH7R,MAAOuE,eAAewN,aAAeC,EAAAA,GAAMC,KAAOD,EAAAA,GAAME,MACxDtS,2BAA4BC,EAAAA,GAA2BsS,UACvD1R,OAAQmO,EAAYnO,OAAOzC,KAAKoU,IAAK,IAAAC,EAAA,MAAM,IACtCD,EACHxR,UACE2D,eAAeG,gBAAkB4N,EAAAA,GAAiB3C,SAAwB,QAAhB0C,EAACD,EAAMxR,iBAAS,IAAAyR,EAAAA,EAAI,IAAMD,EAAMxR,UAAY,KACzG,OACEuQ,EACJ,GACA,CAACC,EAAYD,IAEhB,OAAKpO,GAAWsO,EAAQkB,QAEjBC,EAAAA,cAAsBtO,EAAAA,EAAAA,KAACuO,EAAAA,GAA0B,CAACC,cAAerB,EAAStO,OAAQA,IAAYsO,EAAQkB,SAFrE,IAG1C,C,+TCrCO,MAAMI,EAAqBjP,EAAAA,cAAwC,CACxEkP,iBAAa3a,EACb4a,mBAAe5a,EACf6a,oBAAqBA,SAoChB,SAASC,EAAWvT,GAAoF,IAAnF,MAAEiL,EAAK,oBAAEqI,EAAmB,eAAEE,EAAc,MAAEC,EAAK,SAAEjO,GAA4BxF,EAE3G,MAAM0T,EAAUxP,EAAAA,WAAiB0M,EAAAA,GAC3B+C,EAAe1I,QAAAA,EAASyI,EAAQzI,MAGhCoI,EACJG,aAA0BI,UAAYC,MAAMC,QAAQN,GAAkBA,EAAeG,GAAgBH,EACjGJ,EAAcK,aAAiBG,UAAYC,MAAMC,QAAQL,GAASA,EAAME,GAAgBF,GAOvFM,EAAWC,GAAgB9P,EAAAA,SAAwBoP,QAAAA,IAA0BD,KAAmBD,ICzElG,SAAiCa,GAA4E,IAAhDC,EAAyB3b,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAI4b,IAAO5b,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACzG2L,EAAAA,WAAgB,KACd,IAAK+P,EAAe,OAEpB,MAAMG,EAAeC,GAAkCA,aAAO,EAAPA,EAASC,UAAUC,IAAI,UACxEC,EAAeH,GAAkCA,aAAO,EAAPA,EAASC,UAAUG,OAAO,UAC3EC,EAAiBA,CAACL,EAAiCM,KACnDN,aAAmBT,UAAYC,MAAMC,QAAQO,GAC/CA,EAAQO,QAAQD,GAEhBA,EAASN,EACX,EAMF,OAHAK,EAAeT,EAAeE,EAAUC,EAAcI,GACtDE,EAAeR,EAAeC,EAAUK,EAAcJ,GAE/C,KACLM,EAAeT,EAAeO,GAC9BE,EAAeR,EAAeE,EAAY,CAC3C,GACA,CAACH,EAAeC,EAAeC,GACpC,CDoDEU,CAAwBxB,EAAeD,EAAaW,GAEpD,MAAMe,EAAqB5Q,EAAAA,SACzB,KAAM,CAEJkP,YAAaA,EACbC,cAAeA,EAEfC,oBAAsBa,GAAsBH,GAAce,GAAcZ,QAAAA,GAAYY,OAEtF,CAAC3B,EAAaC,IAGhB,OAAKD,GAGH1O,EAAAA,EAAAA,KAACsQ,EAAAA,GAAa,CAAC9Z,SAAU,KAAM+Z,QAASA,IAAMjB,GAAa,GAAOxO,UAChEd,EAAAA,EAAAA,KAACyO,EAAmBnK,SAAQ,CAAC1O,MAAOwa,EAAmBtP,SACpDwN,EAAAA,aAAsBxN,EAAU4N,OALd,IAS3B,CErFO,MAAM8B,EAAoBhR,EAAAA,cANxB,CACLiR,iBAAkB,KAClBzV,SAJgB,IAAI0V,IAAI3V,OAAOC,SAAS2V,QAUrC,SAASC,EAAiBtV,GAA6C,IAA5C,SAAEwF,GAAwCxF,EAC1E,MAAM,oBAAEsT,GAAwBpP,EAAAA,WAAiBiP,GAC3CoC,ECjBD,WAAsC,IAAAC,EAC3C,MAAMC,EAAYhW,OAAOsF,eAAeG,gBAClC,iBAAEiQ,IAAqBO,EAAAA,EAAAA,KACvBC,GAAaC,EAAAA,EAAAA,GAA2C,QAA9BJ,EAACL,aAAgB,EAAhBA,EAAkBU,mBAAW,IAAAL,EAAAA,EAAI,KAAM,CACtEM,gBAAiB,CAAC,YAAa,gBAE3B,8BAAEC,IAAkCC,EAAAA,EAAAA,GAAmC,CAC3EL,aACAF,cAGF,IAAKE,EACH,MAAO,CACLjW,SAAU,IAAI0V,IAAI,GAAG3V,OAAOC,SAASC,WAAWF,OAAOC,SAAS8N,SAAU/N,OAAOC,SAASuW,QAC1Fd,oBAGJ,MAAMzV,EAAWqW,EAA8B,CAC7C9V,OAAQ0V,aAAU,EAAVA,EAAY1V,OACpBC,UAAWyV,aAAU,EAAVA,EAAYzV,UACvBkB,UAAWuU,aAAU,EAAVA,EAAYvU,YAGzB,MAAO,CAAE1B,SAAU,IAAI0V,IAAI,GAAG1V,EAASC,WAAWD,EAAS8N,SAAU/N,OAAOC,SAASuW,QAASd,mBAChG,CDPee,GAIb,OAFAhS,EAAAA,WAAgB,IAAMoP,KAAuB,CAACA,KAEvC5O,EAAAA,EAAAA,KAACwQ,EAAkBlM,SAAQ,CAAC1O,MAAOib,EAAK/P,SAAEA,GACnD,CEhBA,MAAMiQ,EAAY1Q,eAAeG,eAuD1B,SAASiR,EAAcnW,GAU+C,IAV9C,YAC7BoW,EAAW,YACXC,EAAW,KACXtF,EAAI,QACJuF,EAAO,eACPC,GAAiB,EAAI,kBACrBC,EAAoB,CAACpF,EAAAA,GAAWqF,OAAQrF,EAAAA,GAAWC,KAAMD,EAAAA,GAAWE,OAAQF,EAAAA,GAAWsF,WAAU,gBACjGC,EAAe,sBACfC,KACGtS,GACsEtE,EACzE,MAAM6W,EAAe3S,EAAAA,WAAiB0M,EAAAA,GAChCkG,EAAc5S,EAAAA,WAAiBgR,GAE/B6B,EAAU7S,EAAAA,SAAc,IACxBkS,IAAgBX,GAAkBuB,EAAAA,EAAAA,IAAiBX,GAChC,mBAAZC,EAA+BA,EAAQQ,IAE3CG,EAAAA,EAAAA,IACLH,EAAYpX,SACZ8W,EACAG,EACAC,QAAAA,EAAyB,CAAE,CAACxF,EAAAA,GAAWC,MAAON,IAC9CmG,YACD,CAACd,EAAaC,EAAaC,EAASQ,EAAaN,EAAmBG,EAAiBC,EAAuB7F,IAE/G,OACErM,EAAAA,EAAAA,KAACyS,EAAAA,GAAI,IACC7S,EACJ8S,GAAIL,EACJR,eAAiBH,IAAgBX,GAAcc,EAC/C5Q,UAAWc,IAAWnC,EAAMqB,UAAW,WAAY,CACjD,gBAAiBkR,EAAa9F,OAASA,GAAQ8F,EAAa7F,UAAYD,IACvEvL,SAEFlB,EAAMkB,UAGb,CC7FO,SAAS6R,IACd,MAAM,OAAEpX,GAAWiE,EAAAA,WAAiB0M,EAAAA,GAC9B0G,GAASC,EAAAA,EAAAA,MACTC,EAAYF,EAAOG,SAAS,SAE3BC,IAAqBC,EAAAA,EAAAA,GAAe,IACtCC,EAAAA,EACHC,iBAAkBL,IAEdM,EAAcJ,aAAiB,EAAjBA,EAAmBI,YAEvC,OACEpS,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAACyR,EAAc,CACbC,aAAW,EACXC,YAAY,qBACZC,QAASA,IAAM,wBAAwBrW,IACvC+X,QAAUtU,IAAM,IAAAuU,EAAAC,EACTnT,eAAeG,iBACT,QAAX+S,GAAAC,EAAAzY,QAAO0Y,YAAI,IAAAF,GAAXA,EAAAnN,KAAAoN,EAAc,QAAS,QAAS,CAAEE,eAAgB,iBAC9C1U,EAAE2U,SAAW3U,EAAE4U,UACnB5U,EAAE6U,iBACFjB,EAAOkB,QAAM,EACbhT,SACH,eAGDd,EAAAA,EAAAA,KAAC+T,EAAAA,GAAM,CAAC9c,MAAO2b,EAAQ,aAAW,YAAY3R,UAAU,YAAWH,SAChEsS,GACCpT,EAAAA,EAAAA,KAACoT,EAAW,CAAC7X,OAAQA,KAErByE,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,wCAAuCH,UACpDd,EAAAA,EAAAA,KAACgU,EAAAA,EAAO,UAMpB,C,eCtCO,SAASC,IACd,MAAM,OAAE1Y,GAAWiE,EAAAA,WAAiB0M,EAAAA,GAC9B0G,GAASC,EAAAA,EAAAA,MACTC,EAAYF,EAAOG,SAAS,SAE3BmB,IAAyBjB,EAAAA,EAAAA,GAAe,IAC1CkB,EAAAA,EACHhB,iBAAkBL,IAEdsB,EAAkBF,aAAqB,EAArBA,EAAuBE,gBAE/C,OACEpT,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAACyR,EAAc,CACbG,QAASA,IAAM,6BAA6BrW,IAC5C+X,QAAUtU,IAAM,IAAAuU,EAAAC,EACTnT,eAAegU,MAAMvgB,SACf,QAAXyf,GAAAC,EAAAzY,QAAO0Y,YAAI,IAAAF,GAAXA,EAAAnN,KAAAoN,EAAc,QAAS,QAAS,CAAEE,eAAgB,sBAC9C1U,EAAE2U,SAAW3U,EAAE4U,UACnB5U,EAAE6U,iBACFjB,EAAOkB,QAAM,EACbhT,SACH,sBAGDd,EAAAA,EAAAA,KAAC+T,EAAAA,GAAM,CAAC9c,MAAO2b,EAAQ,aAAW,mBAAmB3R,UAAU,QAAOH,SACnEsT,GACCpU,EAAAA,EAAAA,KAACoU,EAAe,CAAC7Y,OAAQA,KAEzByE,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,wCAAuCH,UACpDd,EAAAA,EAAAA,KAACgU,EAAAA,EAAO,UAMpB,CCpCO,SAASM,IACd,MAAM,YAAE5F,GAAgBlP,EAAAA,WAAiBiP,GACnC8F,EAA0D,SAAvC7F,EAAa8F,QAAQC,cAE9C,OACEzU,EAAAA,EAAAA,KAACR,EAAAA,SAAc,CAAChJ,SAAU,KAAKsK,UAC7Bd,EAAAA,EAAAA,KAAC4Q,EAAiB,CAAA9P,UAChBE,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAkBH,SAAA,EAC/BE,EAAAA,EAAAA,MAACyQ,EAAc,CAACpF,KAAMqI,EAAAA,GAAUC,YAAa1C,gBAAiB,CAACvF,EAAAA,GAAWC,MAAOuF,sBAAuB,CAAC,EAAEpR,SAAA,EACzGd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,YAAWH,SAAC,WAC5Bd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,mBAAkBH,SAAC,qBAErCd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,OAE/BE,EAAAA,EAAAA,MAACyQ,EAAc,CACbC,aAAW,EACXC,YAAY,qBACZtF,KAAMuI,EAAAA,GAAaC,YACnB,cAAY,0BAAyB/T,SAAA,EAErCd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,YAAWH,SAAC,aAC5Bd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,mBAAkBH,SAAC,sBAErCd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,MAE9ByT,IACCvT,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAACyR,EAAc,CAACpF,KAAMuI,EAAAA,GAAaE,cAAchU,SAAC,oBAClDd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,UAInCd,EAAAA,EAAAA,KAACyR,EAAc,CAACpF,KAAMqI,EAAAA,GAAUK,WAAWjU,SAAC,gBAC5Cd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,MAE9BT,eAAe2U,wBACdhU,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAACyR,EAAc,CAACpF,KAAMuI,EAAAA,GAAaK,QAAQnU,SAAC,aAC5Cd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,UAInCd,EAAAA,EAAAA,KAACyR,EAAc,CAACpF,KAAMqI,EAAAA,GAAUQ,QAAS,cAAY,qBAAoBpU,SAAC,aAG1Ed,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,OAE/BE,EAAAA,EAAAA,MAACyQ,EAAc,CAACpF,KAAMuI,EAAAA,GAAaO,cAAe,cAAY,sBAAqBrU,SAAA,EACjFd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,YAAWH,SAAC,aAC5Bd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,mBAAkBH,SAAC,uBAErCd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,OAE/Bd,EAAAA,EAAAA,KAACiU,EAAmB,KACpBjU,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,OAE/Bd,EAAAA,EAAAA,KAAC2S,EAAe,UAK1B,C,+jBChDA,MAAMyC,IAAoB/U,eAAegV,mBAEnCC,EAAkB,SAAU1f,GAChC,OAAIA,EAAQ,EACH,yBACEA,EAAQ,EACV,yBAEF,EACT,EAEM2f,EAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAoBjG,MAAMC,UAAcC,EAAAA,UAAsBC,WAAAA,GAAA,SAAA7hB,WAAA0P,EAAA,oBACzB/D,EAAAA,YAAiC,CAEhDmW,qBAAAA,CAAsBC,GACpB,OAtBgB,SAAUC,EAAiBC,GAC7C,GAAID,EAAK/hB,SAAWgiB,EAAKhiB,OACvB,OAAO,EAET,IAAK,IAAIqG,EAAI,EAAGA,EAAI0b,EAAK/hB,OAAQqG,IAC/B,GAAI0b,EAAK1b,KAAO2b,EAAK3b,GACnB,OAAO,EAGX,OAAO,CACT,CAYY4b,CAAYzS,KAAK1D,MAAM7H,QAAS6d,EAAU7d,QACpD,CAEAqL,MAAAA,GAAS,IAAA4S,EAAAC,EACP,MAAMna,EAAQuE,eAAewN,aAAeC,EAAAA,GAAMC,KAAOD,EAAAA,GAAME,MACzDkI,EAAcjK,EAAAA,GAAMkK,QAAeC,GAAMA,EAAEC,MAAMviB,OAAS,GAAKwP,KAAK1D,MAAM7H,QAAQ0T,SAAS2K,EAAE7a,UAC7FmP,GAAcrP,EAAAA,EAAAA,GAAqB,CACvCE,OAA8B,QAAxBya,EAAgB,QAAhBC,EAAEC,EAAY,UAAE,IAAAD,OAAA,EAAdA,EAAgB1a,cAAM,IAAAya,EAAAA,EAAI,GAClCxa,UAAW4Q,EAAAA,GAAUvT,EACrB4C,aAAc,CACZ,CACE4F,KAAMiV,EAAAA,GAAiBC,UACvBxe,QAASuL,KAAK1D,MAAM7H,QACpBye,SAAUlT,KAAK1D,MAAM6W,QACrBC,OAAQpT,KAAK1D,MAAM+W,MACnBC,SAAU,KAGd5d,MAAO,IACPM,OAAQ,IACR0C,aAAa,EACbN,2BAA4BC,EAAAA,GAA2Bkb,UACvD/a,UAEF,OACEkE,EAAAA,EAAAA,KAAA,OAAK8W,IAAKxT,KAAKyT,aAAc9W,GAAG,QAAQgB,UAAU,uBAAuBpD,MAAO,CAAEmZ,QAAS,GAAIlW,UAC7Fd,EAAAA,EAAAA,KAACiX,EAAAA,GAAW,CAACpY,OAAQ6L,EAAa8D,cAAelL,KAAKyT,gBAG5D,EAaF,MAAMlQ,UAAc4O,EAAAA,UAClBrS,MAAAA,GACE,MAAM,OAAE8T,EAAM,KAAEC,GAAS7T,KAAK1D,MACxBwX,EAAcpjB,KAAKqjB,KAAKH,EAAOpjB,OAAS,IACxCwjB,EAAY/V,IAAW,cAAe,CAC1C,2BAA4B6T,IAGxBmC,EAAM,GACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAaI,IAC/BD,EAAI7Y,MACFsC,EAAAA,EAAAA,MAAA,MAEEC,UAAWM,IAAW,CACpB,kBAAmB6T,EACnB,mDAAoDA,IACnDtU,SAAA,EAEHd,EAAAA,EAAAA,KAAA,MAAIiB,UAAWqW,IACdJ,EAAOO,OAAO,EAAG,IAAI3d,KAAK4d,IACzB1X,EAAAA,EAAAA,KAAA,MAAgBiB,UAAWqW,EAAUxW,SAClC4W,GADMA,KAIVF,IAAMJ,EAAc,IAAKpX,EAAAA,EAAAA,KAAA,MAAIiB,UAAWqW,EAAUxW,SAAC,YAZ/C0W,IAeTL,EAAKjH,SAAQ,CAACpJ,EAAK3M,KACjBod,EAAI7Y,MACFsC,EAAAA,EAAAA,MAAA,MAEEC,UAAWM,IAAW,CACpB,oCAAqC6T,EACrC,mBAAoBA,GAAmBjb,EAAI,GAAM,EACjD,kBAAmBib,GAAmBjb,EAAI,GAAM,EAChD,iBAAkBib,GAAmBjb,EAAI,GAAM,IAC9C2G,SAAA,EAEHd,EAAAA,EAAAA,KAAA,MAAIiB,UAAWM,IAAW,YAAa,CAAE,iBAAkB6T,IAAmBtU,SAAEgG,EAAIvL,SACnFuL,EAAIoQ,OAAOO,OAAO,EAAG,IAAI3d,KAAI,CAAC6d,EAAKC,KAClC5X,EAAAA,EAAAA,KAAA,MAEEiB,UAAWM,IAAW,aAAc+T,EAAgBuC,WAAWF,IAAO,CACpE,iBAAkBvC,IACjBtU,SAEF6W,GALI,GAAG7Q,EAAIvL,UAAUoc,KAAOC,OAQhCJ,IAAMJ,EAAc,IACnBpX,EAAAA,EAAAA,KAAA,MACEiB,UAAWM,IAAW,aAAc+T,EAAgBuC,WAAW/Q,EAAIgR,QAAS,CAC1E,iBAAkB1C,IACjBtU,SAEFgG,EAAIgR,UAzBJ,GAAGN,KAAKrd,KA6BhB,IAIL,OACE6F,EAAAA,EAAAA,KAAA,SACEiB,UAAWM,IAAW,CACpB,+CAAgD6T,EAChD,cAAeA,IAEjB2C,YAAY,IACZC,YAAY,IACZC,OAAQ,EAAEnX,UAEVd,EAAAA,EAAAA,KAAA,SAAAc,SAAQyW,KAGd,EAyBK,MAAMW,UAAazC,EAAAA,UACxBC,WAAAA,CAAY9V,GAAY,IAAAuY,EACtBC,MAAMxY,GAAMuY,EAAA7U,KAAAC,EAAA,sBA2LE,KACdD,KAAK+U,OAAO/U,KAAKrM,MAAMc,SAAS,EAAM,IACvCwL,EAAA,wBAiBiB,KAChB,MAAM,QAAEkT,EAAO,MAAEE,GAAUrT,KAAKrM,MAEhC,IAAKwf,IAAYE,EACf,OAGF,MAAM2B,EAAcrM,EAAAA,GAAMkK,QAAQC,GAA2B,MAAhBA,EAAE5a,YACzCgb,EAAW,IAAInhB,KAAKohB,EAAU,UAC9BC,EAAS,IAAIrhB,KAAKshB,EAAQ,UAChC2B,EAAYpI,SAASkG,IACnB,MAAMmC,EAAI,GACRC,EAAI,GACJC,EAAI,GACJ/e,EAAI,GACJb,EAAI,GACJnC,EAAI,GACN,IAAK,IAAIyD,EAAI,EAAGA,EAAIic,EAAEC,MAAMviB,OAAQqG,IAAK,CACvC,MAAMmI,EAAO7B,EAAAA,GAAMiY,sBAAsBtC,EAAE9T,KAAKnI,IAC5Cqc,GAAYlU,GAAQA,GAAQoU,IAC9B6B,EAAE7Z,KAAK0X,EAAEuC,KAAKxe,IACdqe,EAAE9Z,KAAK0X,EAAEwC,KAAKze,IACdse,EAAE/Z,KAAK0X,EAAEyC,IAAI1e,IACbT,EAAEgF,KAAK0X,EAAEC,MAAMlc,IACftB,EAAE6F,KAAK0X,EAAE9T,KAAKnI,IACdzD,EAAEgI,KAAK0X,EAAE0C,OAAO3e,IAEpB,CAIAic,EAAE2C,kBACF3C,EAAE4C,iBAAiB,CACjBL,KAAMJ,EACNK,KAAMJ,EACNK,IAAKJ,EACLpC,MAAO3c,EACP4I,KAAMzJ,EACNigB,OAAQpiB,GACR,IAIJ4M,KAAK2V,aAAa,IACnB1V,EAAA,eAEQ2V,eAAOnhB,GAAwC,IAArBohB,IAAStlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC1C,MAAM,EAAEulB,IAAMnhB,EAAAA,EAAAA,KAmBd,GAlBIkhB,GACFhB,EAAKkB,SAAS,CAAEC,SAAS,IAG3BrN,EAAAA,GAAMsN,MAAMrJ,SAAQgJ,WACdxN,EAAMnQ,SAAW6d,GAAyB,MAApB1N,EAAMlQ,WAAsB2d,KAKlDphB,EAAQ0T,SAASC,EAAMnQ,eACnBmQ,EAAM8N,UAAU,CAAEC,UAAWN,EAAYO,EAAAA,GAAeC,QAAUD,EAAAA,GAAeE,YACvFzB,EAAK0B,mBAELnO,EAAMvM,UACR,IAGEga,EAAW,CACb,MAAMtgB,EAAId,EAAQ+B,KAAKyB,IAAM,CAAQA,OAAQA,EAAQC,UAAW4Q,EAAAA,GAAUvT,EAAGkE,WAAYC,EAAAA,GAAWC,UAC9F6c,EAAI/hB,EAAQ+B,KAAKyB,IAAM,CAAQA,OAAQA,EAAQC,UAAW4Q,EAAAA,GAAU0N,EAAG/c,WAAYC,EAAAA,GAAWC,gBAC9FgP,EAAAA,GAAM8N,OAAOlhB,EAAEN,OAAOuhB,IAE5B3B,EAAKkB,SAAS,CAAEC,SAAS,GAC3B,CAEAnB,EAAK0B,iBACP,IAACtW,EAAA,kBAEYvE,IACXA,EAAE6U,iBACF,MAAMmG,GAAeC,EAAAA,EAAAA,GAAmB3W,KAAKrM,MAAM+iB,cAAc,GAC3DjiB,EAAUiiB,EAAaE,MAAM,KACnC5W,KAAK+V,SAAS,CAAEthB,UAASiiB,iBAAgB,KACvC1W,KAAK+U,OAAOtgB,EAAQ,GACpB,IACHwL,EAAA,uBAEgB,CAAClC,EAAcrC,KAC9B,MAAM/H,EAAa,CAAC,EACpBA,EAAMoK,EAAO,SAAWiC,KAAKrM,MAAMigB,OAAOnd,QAAQ+f,GAAMA,EAAElkB,QAAUoJ,EAAEmb,OAAOvkB,QAAO,GACpF0N,KAAK+V,SAASpiB,EAAM,IACrBsM,EAAA,4BAEqB,CAAClC,EAAciB,KACnC,MAAM8X,GAAgBC,EAAAA,EAAAA,IAAqB,IAAIhlB,KAAKiN,IAE9CrL,EAAa,CAAC,EACpBA,EAAMoK,EAAO,OAAS+Y,EACtBnjB,EAAMoK,EAAO,mBAAoB,EACjCiC,KAAK+V,SAASpiB,GAAO,KACnBqM,KAAK+U,OAAO/U,KAAKrM,MAAMc,QAAQ,GAC/B,IAjTF,MAAMuiB,EAAM,IAAIjlB,KACd6hB,EAAS,GAEX,IAAK,IAAItP,GADS,IAAIvS,MAAOklB,cAAgB,GAClB3S,GAAQ0S,EAAIC,cAAe3S,IACpD,IAAK,IAAI8P,EAAQ,EAAGA,GAAS,MACvB9P,IAAS0S,EAAIC,eAAiB7C,EAAQ4C,EAAIE,WAAa,GAD5B9C,IAI/BR,EAAOxY,KAAK,CACV9I,MAAO8hB,EAAMlF,WAAWiI,SAAS,EAAG,KAAO,OAAS7S,EACpD/R,MAAO0f,EAAWmC,EAAQ,GAAK,IAAM9P,EAAK4K,WAAWkI,UAAU,KAKrEpX,KAAKrM,MAAQ,CACX+iB,aAAcW,mBAAmBC,KAAK,KACtC7iB,QAAS4iB,mBACTzD,OAAQA,EACR2D,UAAW3D,EAAOA,EAAOpjB,OAAS,IAClCgnB,QAAS5D,EAAOA,EAAOpjB,OAAS,GAMhCinB,SAASV,EAAAA,EAAAA,IAAqBW,EAAAA,EAAY,IAAI3lB,KAAQ,CAAE4lB,MAAO,EAAG/D,OAAQ,MAC1EgE,SAASb,EAAAA,EAAAA,IAAqB,IAAIhlB,MAClCohB,SAAS4D,EAAAA,EAAAA,IAAqBW,EAAAA,EAAiB,IAAI3lB,KAAQ,IAC3DshB,OAAO0D,EAAAA,EAAAA,IAAqB,IAAIhlB,MAChCikB,SAAS,EAEb,CAEAlW,MAAAA,GACE,GAAIE,KAAKrM,MAAMqiB,QACb,OACEtZ,EAAAA,EAAAA,KAAA,OACEiB,UAAU,gDACVpD,MAAO,CAAEC,UAAWuC,eAAegV,mBAAqB,IAAM,KAAMvU,SACrE,eAML,MAAMqa,EAAO,IAAI9lB,KAAKiO,KAAKrM,MAAM4jB,UAAUjlB,OACrC8c,EAAK,IAAIrd,KAAKiO,KAAKrM,MAAM6jB,QAAQllB,OACjCwlB,EAAe9X,KAAKrM,MAAMigB,OAC7Bpd,KAAK4d,GAAUA,EAAM9hB,QACrBmE,QAAQ2d,GAAU,IAAIriB,KAAKqiB,IAAUyD,GAAQ,IAAI9lB,KAAKqiB,IAAUhF,IAG7D2I,EADSpP,EAAAA,GAAMkK,QAAQC,GAA2B,MAAhBA,EAAE5a,YAChB1B,KAAKsc,IAC7B,MAAMkF,EAAwD,CAAE/f,OAAQ6a,EAAE7a,OAAQggB,KAAM,CAAC,GASzF,OARAnF,EAAE9T,KAAK4N,SAAQ,CAACrX,EAAQsB,KACtB,GAAU,IAANA,EACF,OAEF,MAAMmI,EAAO7B,EAAAA,GAAMiY,sBAAsB7f,GACnC0iB,EAAqB,IAAbnF,EAAEC,MAAMlc,GAAYic,EAAEC,MAAMlc,EAAI,GAAK,IACnDmhB,EAAIC,MAAMjZ,EAAKkY,WAAa,GAAGhI,WAAWiI,SAAS,EAAG,KAAO,OAASnY,EAAKiY,eAAiBgB,CAAI,IAE3FD,CAAG,IAGNpE,EAASkE,EAAathB,KACzB4d,GAAUnC,EAAW,IAAIlgB,KAAKqiB,GAAO8C,YAAc,IAAM,IAAInlB,KAAKqiB,GAAO6C,cAAc/H,WAAWkI,UAAU,KAEzGvD,EAAOkE,EAAWvhB,KAAK4R,IAC3B,MAAM8P,EAAiB,GACvB,IAAI1D,EAAQ,EAWZ,OAVAsD,EAAalL,SAASwH,IACpB,MAAM6D,EAAOvnB,KAAKN,MAA0B,IAApBgY,EAAM6P,KAAK7D,IAAgB,IAC9C+D,MAAMF,GAITC,EAAK9c,KAAK,QAHVoZ,GAASpM,EAAM6P,KAAK7D,GAAS,IAAM,EACnC8D,EAAK9c,MAAM6c,EAAO,EAAI,IAAM,IAAMA,EAAKrnB,QAAQ,GAAK,KAGtD,IAEF4jB,EAAsB,KAAbA,EAAQ,GACV,CAAEvc,OAAQmQ,EAAMnQ,OAAQ2b,OAAQsE,EAAM1D,OAAQA,EAAQ,EAAI,IAAM,IAAMA,EAAM5jB,QAAQ,GAAK,IAAK,IAGvG,OACE8M,EAAAA,EAAAA,MAAA,OAAKC,UAAU,wEAAuEH,SAAA,EACpFd,EAAAA,EAAAA,KAAA,QAAM0b,SAAUpY,KAAKqY,UAAW1a,UAAU,gBAAeH,UACvDd,EAAAA,EAAAA,KAAA,SAAOiB,UAAU,2BAA0BH,UACzCd,EAAAA,EAAAA,KAAA,SAAAc,UACEE,EAAAA,EAAAA,MAAA,MAAAF,SAAA,EACEd,EAAAA,EAAAA,KAAA,MAAAc,SAAI,cACJd,EAAAA,EAAAA,KAAA,MAAIhH,MAAM,OAAO6E,MAAO,CAAE+d,QAAS,SAAU9a,UAC3Cd,EAAAA,EAAAA,KAAA,SACEiB,UAAU,WACVI,KAAK,OACLzL,MAAO0N,KAAKrM,MAAM+iB,aAClB6B,SAAW7c,IACTsE,KAAK+V,SAAS,CAAEW,aAAchb,EAAEmb,OAAOvkB,OAAQ,EAEjDiI,MAAO,CAAE7E,MAAO,QAChB,cAAY,wCAGhBgH,EAAAA,EAAAA,KAAA,MAAAc,UACEd,EAAAA,EAAAA,KAAA,SACEiB,UAAU,qBACVI,KAAK,SACLzL,MAAM,SACN,cAAY,4DAQxBoK,EAAAA,EAAAA,KAACwV,EAAK,CAACzd,QAASuL,KAAKrM,MAAMc,QAAS0e,QAASnT,KAAKrM,MAAMwf,QAASE,MAAOrT,KAAKrM,MAAM0f,SAEnF3V,EAAAA,EAAAA,MAAA,QACEC,UAAU,cACVpD,MAAO,CAAE8B,SAAU,WAAYmc,IAAK,GAAIC,MAAO3G,EAAkB,EAAI,EAAGrS,SAAU,IAClF,cAAY,sCAAqCjC,SAAA,EAEjDd,EAAAA,EAAAA,KAAA,OAAKnC,MAAO,CAAE8B,SAAU,WAAY3G,MAAO,GAAIgjB,QAAS,gBAAiBlb,UACvEd,EAAAA,EAAAA,KAACic,EAAAA,EAAU,CACTlB,QAAS,IAAI1lB,KAAKiO,KAAKrM,MAAM8jB,SAC7BG,QAAS,IAAI7lB,KAAKiO,KAAKrM,MAAMikB,SAC7BtlB,MAAO,IAAIP,KAAKiO,KAAKrM,MAAMwf,SAC3BoF,SAAWK,IACT5Y,KAAK6Y,oBAAoB,QAAQ9B,EAAAA,EAAAA,IAAqB6B,GAAU,EAChEpb,UAEFd,EAAAA,EAAAA,KAAA,SAAOqB,KAAK,QAAQ0E,UAAQ,EAAC9E,UAAU,kBAAkBrL,MAAO0N,KAAKrM,MAAMwf,cAG9E,OACDzW,EAAAA,EAAAA,KAAA,OAAKnC,MAAO,CAAE8B,SAAU,WAAY3G,MAAO,GAAIgjB,QAAS,gBAAiBlb,UACvEd,EAAAA,EAAAA,KAACic,EAAAA,EAAU,CACTlB,QAAS,IAAI1lB,KAAKiO,KAAKrM,MAAM8jB,SAC7BG,QAAS,IAAI7lB,KAAKiO,KAAKrM,MAAMikB,SAC7BtlB,MAAO,IAAIP,KAAKiO,KAAKrM,MAAM0f,OAC3BkF,SAAWK,IACT5Y,KAAK6Y,oBAAoB,MAAM9B,EAAAA,EAAAA,IAAqB6B,GAAU,EAC9Dpb,UAEFd,EAAAA,EAAAA,KAAA,SAAOqB,KAAK,QAAQ0E,UAAQ,EAAC9E,UAAU,kBAAkBrL,MAAO0N,KAAKrM,MAAM0f,gBAKjF3V,EAAAA,EAAAA,MAAA,MAAIC,UAAU,2BAA2B,cAAY,mDAAkDH,SAAA,CAAC,8BAEtGd,EAAAA,EAAAA,KAAA,UACEiB,UAAU,YACVrL,MAAO0N,KAAKrM,MAAM4jB,UAAUjlB,MAC5BimB,SAAUvY,KAAK8Y,eAAeC,KAAK/Y,KAAM,QACzCzF,MAAO,CAAEmF,WAAY,UAAWlC,SAE/BwC,KAAKrM,MAAMigB,OAAOpd,KAAKwiB,IACtBtc,EAAAA,EAAAA,KAAA,UAA2BpK,MAAO0mB,EAAO1mB,MAAMkL,SAC5Cwb,EAAOzmB,OADGymB,EAAO1mB,WAIf,UAEToK,EAAAA,EAAAA,KAAA,UACEiB,UAAU,YACVrL,MAAO0N,KAAKrM,MAAM6jB,QAAQllB,MAC1BimB,SAAUvY,KAAK8Y,eAAeC,KAAK/Y,KAAM,MACzCzF,MAAO,CAAEmF,WAAY,UAAWlC,SAE/BwC,KAAKrM,MAAMigB,OAAOpd,KAAKwiB,IACtBtc,EAAAA,EAAAA,KAAA,UAA2BpK,MAAO0mB,EAAO1mB,MAAMkL,SAC5Cwb,EAAOzmB,OADGymB,EAAO1mB,eAM1BoK,EAAAA,EAAAA,KAAC6G,EAAK,CAACqQ,OAAQA,EAAQC,KAAMA,KAE7BnX,EAAAA,EAAAA,KAAA,WAGN,CAMAuc,iBAAAA,GACEjZ,KAAK+U,OAAO/U,KAAKrM,MAAMc,SAKvBkU,EAAAA,GAAMoQ,KAAK,oBAAqB/Y,KAAKuW,iBACrCvQ,SAASK,iBAAiB,kBAAmBrG,KAAKkZ,cACpD,CAEAC,oBAAAA,GACExQ,EAAAA,GAAMyQ,OAAO,oBAAqBpZ,KAAKuW,iBACvCvQ,SAASO,oBAAoB,kBAAmBvG,KAAKkZ,cACvD,E,6eCpZsD,IAGnDG,EAAQ,SAARA,GAAQ,OAARA,EAAAA,EAAQ,qBAARA,EAAAA,EAAQ,aAARA,EAAAA,EAAQ,iBAARA,CAAQ,EAARA,GAAQ,IAcN,SAASC,EAAQthB,GAAuE,IAAAuhB,EAAA,IAA3D,MAAExlB,EAAQ,aAAcuI,GAAiCtE,EAC3F,MAAMwhB,EAA+B,mBAAVzlB,EAAuBA,EAAMuI,EAAMhK,OAAsByB,EAC9E0lB,EAAgD,QAAxCF,EAAGF,EAASG,UAA4B,IAAAD,EAAAA,EAAIF,EAASK,QAEnE,OACEhd,EAAAA,EAAAA,KAACid,EAAAA,EAAS,IACJrd,EACJqB,UAAWc,IAAWnC,EAAMqB,UAAW,CACrC,gBAAiB8b,IAAaJ,EAASK,QACvC,eAAgBD,IAAaJ,EAASO,IACtC,iBAAkBH,IAAaJ,EAASQ,SAIhD,CAKO,MAAMC,WAAiD5d,EAAAA,UAW5D4D,MAAAA,GACE,MAAM,MAAE/L,KAAUuI,GAAU0D,KAAK1D,MAEjC,OAAOI,EAAAA,EAAAA,KAACqd,EAAAA,EAAW,CAACC,OAAOtd,EAAAA,EAAAA,KAAC4c,EAAQ,CAACvlB,MAAOA,OAAeuI,GAC7D,EACD2D,EAhBY6Z,GAAG,kBACWC,EAAAA,EAAYE,iBAAeha,EADzC6Z,GAAG,cAEOC,EAAAA,EAAYrb,aAAWuB,EAFjC6Z,GAAG,eAIQ,IACjBC,EAAAA,EAAY3a,aACf8a,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBC,WAAW,EACXC,mBAAmB,I,gBCvChB,SAASC,GAAQriB,GAAwE,IAAvE,MAAEzF,EAAK,SAAEiL,KAAalB,GAA+CtE,EAC5F,OACE0F,EAAAA,EAAAA,MAAA,UACMpB,EACJqB,UAAWc,IAAWnC,EAAMqB,UAAW,4BAA6B,CAClE,aAAcZ,eAAegV,qBAC5BvU,SAAA,EAEHd,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,yBAAwBH,UACrCd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,gDAA+CH,SAAEjL,MAElEiL,IAGP,C,gBClBO,MAAM8c,GAAsBpe,EAAAA,eAAoB,GAEhD,SAASqe,GAAaje,GAC3B,MAAOke,EAAiBC,GAAoBve,EAAAA,UAAe,GAE3D,OACEQ,EAAAA,EAAAA,KAAA,OAKEge,aAAcA,IAAMD,GAAiB,GACrCE,aAAcA,IAAMF,GAAiB,GAAOjd,UAE5Cd,EAAAA,EAAAA,KAAC4d,GAAoBtZ,SAAQ,CAAC1O,MAAOkoB,EAAgBhd,UACnDd,EAAAA,EAAAA,KAACke,GAAAA,EAAmB,CAACllB,MAAM,UAAW4G,OAI9C,C,8cCpB+C,IAE1Cue,GAAS,SAATA,GAAS,OAATA,EAAAA,EAAS,qBAATA,EAAAA,EAAS,aAATA,EAAAA,EAAS,iBAATA,CAAS,EAATA,IAAS,IAYP,MAAMC,WAAa5e,EAAAA,UAcxB4D,MAAAA,GACE,MAAM,MAAE/L,KAAUuI,GAAU0D,KAAK1D,MAC3Bye,EAAYF,GAAU9mB,GAE5B,OACE2I,EAAAA,EAAAA,KAACse,GAAAA,EAAY,IACP1e,EACJqB,UAAWc,IAAWnC,EAAMqB,UAAW,CACrC,kBAAmBod,IAAcF,GAAUnB,QAC3C,iBAAkBqB,IAAcF,GAAUjB,IAC1C,mBAAoBmB,IAAcF,GAAUhB,SAIpD,EACD5Z,GA7BY6a,GAAI,kBACUE,GAAAA,EAAaf,iBAAeha,GAD1C6a,GAAI,cAEME,GAAAA,EAAatc,aAAWuB,GAFlC6a,GAAI,eAIO,IACjBE,GAAAA,EAAa5b,aAChBrL,MAAO,UACPknB,KAAK,EACLC,WAAW,EACXd,mBAAmB,EACnBe,cAAc,EACd5c,OAAQ,O,gBCKL,SAAS6c,GAAUrW,GAA0C,IAAzC,OAAEsW,KAAW/e,GAA0ByI,EAGhE,IAFiB7I,EAAAA,WAAiBoe,IAEnB,OAAO,KAEtB,MAAM1mB,EAAIynB,EAAQ,GAAGznB,EAAI,EACnBC,EAAIwnB,EAAQ,GAAGxnB,EACrB,OAAO6I,EAAAA,EAAAA,KAACid,EAAAA,EAAS,IAAKrd,EAAO1I,EAAGA,EAAGC,EAAGA,EAAG6B,MAAO,EAAGiI,UAAU,gDAC/D,C,8bCxBO,SAAS2d,GAAUtjB,GAAwE,IAAAujB,EAAA,IAAvE,SAAEC,EAAQ,UAAEC,EAAS,MAAElpB,EAAK,QAAEmpB,EAAO,YAAE9jB,GAA8BI,EAC9F,OACE0F,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,OAAKiB,UAAWc,IAAW,sBAAuB,CAAE,SAAUgd,IAAaje,SAAEie,KAC7E/e,EAAAA,EAAAA,KAAA,OAAKiB,UAAWc,IAAW,CAAE,gCAAiC+c,IAAYhe,SAAEjL,KAC5EmK,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,uCAAsCH,SACN,QADM+d,EAClD3jB,aAAW,EAAXA,EAAc8jB,aAAO,EAAPA,EAASppB,MAAOopB,QAAAA,EAAW,CAAC,UAAE,IAAAH,EAAAA,EAAIG,aAAO,EAAPA,EAASppB,UAIlE,CAQA,SAASqpB,GAAY5W,GAA8F,IAAA6W,EAAA,IAA7F,QAAEF,EAAO,YAAEG,EAAW,YAAEjkB,KAAgB0E,GAAmDyI,EAC/G,MAAMyW,EAAWtf,EAAAA,WAAiBoe,IAElC,OACE5c,EAAAA,EAAAA,MAAA,OACEC,UAAWc,IACTnC,EAAMqB,UACN,mJACA,CAAE,aAAc6d,IAChBhe,SAAA,CAEDlB,EAAM/J,QACLmK,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,6DAA4DH,SAC9C,QAD8Coe,EACxEC,aAAW,EAAXA,EAAcvf,EAAM/J,cAAM,IAAAqpB,EAAAA,EAAItf,EAAM/J,SAIzCmK,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,sEAAqEH,SACjFtB,EAAAA,SAAe1F,IAAI8F,EAAMkB,UAAWK,IAAU,IAAAie,EAC7C,IAAK5f,EAAAA,eAAqB2B,IAAUA,EAAME,OAASud,GAAY,OAAOzd,EAEtE,MAAMke,EAAaL,aAAO,EAAPA,EAASroB,MAAMqoB,GAAYA,EAAQM,UAAYne,EAAMvB,MAAM0f,UAE9E,OAAO9f,EAAAA,aAAmB2B,EAAO,CAC/B6d,QAASK,EACTnkB,YAAoC,QAAzBkkB,EAAEje,EAAMvB,MAAM1E,mBAAW,IAAAkkB,EAAAA,EAAIlkB,GACrB,QAK/B,CAEO,MAAMqkB,WAAgB/f,EAAAA,UAY3B4D,MAAAA,GACE,MAAM,UAAEnC,EAAS,YAAEke,EAAW,YAAEjkB,EAAW,SAAE4F,KAAalB,GAAU0D,KAAK1D,MAEzE,OACEI,EAAAA,EAAAA,KAACwf,GAAAA,EAAe,IACV5f,EACJ6f,SACEzf,EAAAA,EAAAA,KAACif,GAAY,CAAChe,UAAWA,EAAWke,YAAaA,EAAajkB,YAAaA,EAAY4F,SACpFA,KAKX,EACDyC,GA1BYgc,GAAO,cACGC,GAAAA,EAAgBxd,aAAWuB,GADrCgc,GAAO,eAGI,IACjBC,GAAAA,EAAgB9c,aACnBgd,OAAQ,EACR/f,SAAU,CAAExI,EAAG,IACfumB,mBAAmB,EACnBiC,aAAc,CAAEC,QAAS,OAAQC,OAAQ,IACzCC,QAAQ9f,EAAAA,EAAAA,KAAC0e,GAAU,M,wCCtDlBqB,GAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,UAAlBA,EAAkB,aAAlBA,CAAkB,EAAlBA,IAAkB,IAKvB,SAASC,GAAsBpqB,EAAa0F,GAAoC,IAAlC,QAAEgkB,GAA8BhkB,EAC5E,MAAM2kB,GAAYC,EAAAA,EAAAA,IAAkBtqB,GACpC,OAAI0pB,IAAYS,GAAmBI,IAAYF,GAG7CjgB,EAAAA,EAAAA,KAACogB,EAAAA,EAAY,CAACxqB,MAAOA,EAAOyqB,aAAc,KAAKvf,SAC5Cmf,GAGP,CAEO,SAASK,GAAe1gB,GAC7B,MAAM,MAAE2G,GAAU/G,EAAAA,WAAiB0M,EAAAA,GAC7BqU,EAAW/gB,EAAAA,SAAc,KAC7B,MAAMghB,GAAYC,EAAAA,GAAAA,IAAmC,CACnDC,UAAW,6BAA6Bna,IACxCoa,eAAe,IAGjB,OAAOH,aAAS,EAATA,EAAW1mB,KAAKgN,IAAG,IAAWA,EAAKxE,MAAMse,EAAAA,EAAAA,IAAmB9Z,EAAIxE,SAAS,GAC/E,CAACiE,IAEJ,OAAKga,SAAAA,EAAUzsB,QAGbkM,EAAAA,EAAAA,KAAC2d,GAAQ,IAAK/d,EAAO/J,MAAM,aAAYiL,UACrCd,EAAAA,EAAAA,KAAC6d,GAAY,CAACvkB,OAAQ,IAAIwH,UACxBE,EAAAA,EAAAA,MAAC6f,EAAAA,EAAa,CAAC9nB,KAAMwnB,EAASzf,SAAA,EAC5Bd,EAAAA,EAAAA,KAAC0B,GAAAA,EAAa,KACd1B,EAAAA,EAAAA,KAACwC,GAAAA,GAAK,CACJ8c,QAAQ,OACR3iB,MAAM,OACN0E,KAAK,SACLyf,SAAS,2BACTtd,cAAgB5N,IAAUsM,EAAAA,GAAAA,IAAkB,CAAEtM,QAAOuM,UAAWF,GAAAA,GAAmBG,WAAW,IAC9FjJ,OAAQ,CAAC,UAAW,cAEtB6G,EAAAA,EAAAA,KAACmD,GAAAA,EAAK,CAAC4d,QAAQ,aACf/gB,EAAAA,EAAAA,KAACmD,GAAAA,EAAK,CACJ6d,UAAW,KACXD,QAAQ,WACRE,YAAY,QACZ9nB,OAAQkP,IAAwB,IAAtB6Y,EAASC,GAAQ9Y,EACzB,MAAM+Y,EAA0D,IAAjDptB,KAAKsB,IAAItB,KAAKoG,IAAI8mB,GAAUltB,KAAKoG,IAAI+mB,IACpD,MAAO,EAAEC,EAAQA,EAAO,KAG5BpgB,EAAAA,EAAAA,MAACue,GAAO,CACNte,UAAU,WACVke,YAAcvpB,IAAUsM,EAAAA,GAAAA,IAAkB,CAAEtM,QAAOuM,UAAW,cAAeC,WAAW,IACxFlH,YAAa8kB,GAAsBlf,SAAA,EAEnCd,EAAAA,EAAAA,KAAC4e,GAAU,CAAC/oB,MAAM,0BAA0BypB,QAASS,GAAmBI,OACxEngB,EAAAA,EAAAA,KAAC4e,GAAU,CAAC/oB,MAAM,OAAOypB,QAASS,GAAmBsB,YAGvDrhB,EAAAA,EAAAA,KAACoe,GAAI,CAACkB,QAASS,GAAmBI,IAAKY,QAAQ,aAC/C/gB,EAAAA,EAAAA,KAACod,GAAG,CACF2D,QAAQ,WACRzB,QAASS,GAAmBsB,MAC5B7D,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBnmB,MAAQzB,GAAoB,MAATA,EAAgB,UAAYA,EAAQ,EAAI,QAAU,eAvCjD,IA6ChC,C,wCC1Ee,SAAS0rB,GAAaC,IACnC,EAAAC,GAAA,GAAa,EAAG3tB,WAChB,IAAIyO,GAAO,EAAAoU,GAAA,GAAO6K,GAGlB,OAFAjf,EAAKmf,QAAQ,GACbnf,EAAKof,SAAS,EAAG,EAAG,EAAG,GAChBpf,CACT,C,+GCvBO,MAAMqf,GAAe,IACfC,GAAY,EACZC,GAAsD,CAAC,EAAG,EAAG,EAAG,GAChEC,GAAezhB,eAAewN,aAAe9X,KAAAA,KAAY,KAAOA,KAAAA,KAAY,KAC5EgsB,IAAa1hB,eAAewN,aAAe9X,KAAAA,KAAY,MACvDisB,GAAiBjsB,KAAAA,IAAW,KAC5BksB,GAAgBlsB,KAAAA,MAAa,KAC7BmsB,GAAe,CAC1Bnf,SAAU,GACVC,WAAY,IACZC,KAAM5C,eAAewN,aAAe9X,KAAAA,KAAY,KAAOA,KAAAA,KAAY,MAExDosB,GAAe,CAC1Bpf,SAAU,GACVC,WAAY,IACZC,KAAM5C,eAAewN,aAAe9X,KAAAA,KAAY,KAAOA,KAAAA,KAAY,MAExDqsB,GAAwB,CAAExC,QAAS,OAAQC,OAAQ,IACnDwC,GAAe,CAC1BpK,OAAQ,EACRpW,OAAQ,EACRoB,KAAM5C,eAAewN,aAAe9X,KAAAA,KAAY,KAAOA,KAAAA,KAAY,IACnEihB,QAAS,KAEEsL,GAAqB,CAAEtL,QAAS,GAEtC,IAAKuL,GAAO,SAAPA,GAAO,OAAPA,EAAO,UAAPA,EAAO,YAAPA,CAAO,MAKZ,MAAMC,GAAuC,CAClD,CAACD,GAAQE,KAAMR,GACf,CAACM,GAAQG,MAAOV,IAGLW,GAAuC,CAClD,CAACJ,GAAQE,KAAM,qBACf,CAACF,GAAQG,MAAO,wBC3BlB,SAASE,GAAgBtgB,GACvB,MAAMugB,EAAYvB,GAAahf,GACzBwgB,GAAUC,EAAAA,GAAAA,GAAWF,GAErBnL,EAAQmL,EAAUG,eAAe,QAAS,CAAEtL,MAAO,UACnDuL,EAAWJ,EAAUtgB,UACrBqF,EAAOib,EAAUtI,cAEvB,MAAO,GAAG7C,KAASuL,KADJH,EAAQvgB,cACmBqF,GAC5C,CAEA,SAASsb,GAAgBC,GAAsE,IAApDnE,EAA6CnrB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC1F,MAAMuvB,EAAaD,IAAYZ,GAAQE,IAAMzD,EAAQqE,oBAAsBrE,EAAQsE,qBAC7E1tB,EAAQutB,IAAYZ,GAAQE,IAAMzD,EAAQuE,cAAgBvE,EAAQwE,eACxE,MAAO,KAAItoB,EAAAA,GAAAA,IAAYtF,QAAAA,EAAS,OAAOwtB,QAAAA,EAAc,UAAyB,IAAfA,EAAmB,GAAK,MACzF,CAEA,SAASK,GAAenoB,GAQrB,IARsB,UACvBooB,EAAS,QACTP,EAAO,QACPnE,GAKD1jB,EACC,OACE0F,EAAAA,EAAAA,MAAA,OACEC,UAAWc,IAAW,0EAA2E,CAC/F,2BAA4B2hB,IAAcP,IACzCriB,SAAA,EAEHd,EAAAA,EAAAA,KAAA,QAAAc,SAAO6hB,GAAYQ,MACnBnjB,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,aAAapD,MAAO,CAAExG,MAAOmrB,GAAYW,IAAWriB,SACjEoiB,GAAgBC,EAASnE,OAIlC,CAEe,SAAS2E,GAAYtb,GAA6D,IAAAub,EAAA,IAA5D,SAAE9E,EAAQ,UAAE4E,EAAS,QAAE1E,EAAO,MAAEnpB,GAA0BwS,EAC7F,MAAMwb,EAAgB7E,SAAY,QAAL4E,EAAP5E,EAAU,UAAE,IAAA4E,GAAS,QAATA,EAAZA,EAAc5E,eAAO,IAAA4E,OAAA,EAArBA,EAAuBE,QAE7C,OAAKhF,GAGH9d,EAAAA,EAAAA,MAAA,OACEC,UAAWc,IACT,+HACA,CACEgiB,UAAkD,KAAvCF,aAAa,EAAbA,EAAeR,sBAAqE,KAAxCQ,aAAa,EAAbA,EAAeP,wBAG1EzlB,MAAO,CAAEmmB,WAAY,aAAeljB,SAAA,CAEnCjL,IACCmK,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,SAAQH,UACrBd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,sBAAqBH,SAAE8hB,GAAgB/sB,QAG3DmK,EAAAA,EAAAA,KAACyjB,GAAe,CAACC,UAAWA,EAAWP,QAASZ,GAAQG,KAAM1D,QAAS6E,KACvE7jB,EAAAA,EAAAA,KAACyjB,GAAe,CAACC,UAAWA,EAAWP,QAASZ,GAAQE,IAAKzD,QAAS6E,OAlBpD,IAqBxB,CCzEO,SAASI,GAAgB3oB,GAA8B,IAA7B,EAAEpE,EAAC,MAAE8B,KAAU4G,GAAYtE,EACtD4oB,EAAOhtB,EACX,MAAMtB,EAAQgK,EAAMof,QAAQpf,EAAM0f,SAC5B6E,EAAiD,IAAjCvkB,EAAMof,QAAQwE,gBAAwD,IAAhC5jB,EAAMof,QAAQuE,cAM1E,OALIY,IACEvkB,EAAMF,OAAS6iB,GAAQG,KAAMwB,GAAQlrB,EAAQ,EAC5CkrB,GAAQlrB,EAAQ,GAGT,IAAVpD,GAAgB3B,OAAO+F,SAASpE,IAMlCoL,EAAAA,EAAAA,MAAA,KAAAF,SAAA,EACEd,EAAAA,EAAAA,KAACid,EAAAA,EAAS,CACR/lB,EAAGitB,EAAgBD,EAAOlrB,EAAQ,EAAI9B,EACtCC,EAAGyI,EAAMwkB,WAAWjtB,EACpB6B,MAAOmrB,EAAwB,EAARnrB,EAAYA,EACnCM,OAAQsG,EAAMwkB,WAAW9qB,OACzB2J,KAAK,gBAENrD,EAAMF,OAAS6iB,GAAQG,OACtB1iB,EAAAA,EAAAA,KAACid,EAAAA,EAAS,IACJrd,EACJ1I,EAAGitB,EAAgBD,EAAOlrB,EAAQ,EAAI4oB,GAAY,EAAIsC,EAAOlrB,EAAQ4oB,GACrE5oB,MAAO4oB,KAGVhiB,EAAMF,OAAS6iB,GAAQE,MACtBziB,EAAAA,EAAAA,KAACid,EAAAA,EAAS,IAAKrd,EAAO1I,EAAGitB,EAAgBjtB,EAAI0qB,GAAY,EAAIsC,EAAMlrB,MAAO4oB,SApBvE5hB,EAAAA,EAAAA,KAACR,EAAAA,SAAc,GAwB1B,CCYA,SAAS6kB,GAAY/oB,GAA8D,IAA7D,mBAAEgpB,EAAkB,OAAE3F,KAAW/e,GAA0BtE,EAC/E,MAAMipB,EAAc3kB,EAAM5G,MAASsrB,EAC7BptB,EAAIynB,EAAQ,GAAGznB,EAAIqtB,EAAc,EACjCptB,EAAIwnB,EAAQ,GAAGxnB,EACrB,OACE6I,EAAAA,EAAAA,KAACid,EAAAA,EAAS,IAAKrd,EAAO1I,EAAGA,EAAGC,EAAGA,EAAG6B,MAAOurB,KAAkB3kB,EAAMkf,SAAWuD,GAAeC,IAE/F,CAEA,SAASkC,GAAmB5uB,GAC1B,IAAK3B,OAAO+F,SAASpE,GAAQ,MAAO,GAEpC,MAAM0M,GAAOC,EAAAA,GAAAA,IAAQ3M,GACrB,OAA2B,IAApB0M,EAAKkY,WAAmBlY,EAAKiY,cAAc/H,YAAare,EAAAA,GAAAA,GAAOmO,EAAM,MAC9E,CAEO,SAASmiB,GAAyBpc,GAAgD,IAAAqc,EAAA,IAA/C,UAAEzjB,GAA2CoH,EACrF,MAAM,MAAE9B,GAAU/G,EAAAA,WAAiB0M,EAAAA,IAC5B4S,EAAU6F,GAAenlB,EAAAA,UAAe,IACxColB,EAAWC,GAAgBrlB,EAAAA,SAA4B,KACvDkkB,EAAWoB,GAAgBtlB,EAAAA,SAA+B,MAE3D+gB,EAAW/gB,EAAAA,SAAc,KAC7B,MAAMzG,GAAO0nB,EAAAA,GAAAA,IAA2C,CACtDC,UAAW,qBAAqBna,IAChCoa,eAAe,IAGjB,MAAO,CACL5nB,OACAI,OAAQJ,SAAAA,EAAMjF,OACV,EACEyO,EAAAA,GAAAA,IAAQ+e,IAAa/e,EAAAA,GAAAA,IAAQxJ,EAAK,GAAGuJ,QAAQD,WAC7CE,EAAAA,GAAAA,KAAQwgB,EAAAA,GAAAA,IAAWxgB,EAAAA,GAAAA,IAAQxJ,EAAKA,EAAKjF,OAAS,GAAGwO,QAAQD,WAE3D,GACL,GACA,CAACkE,IAEEwe,EAA2BvlB,EAAAA,SAC/B,SAAAwlB,EAAA,OAAmB,QAAnBA,EAAMzE,EAASxnB,YAAI,IAAAisB,OAAA,EAAbA,EAAeC,MAAM/tB,GAAMA,EAAEosB,qBAAuB,GAAKpsB,EAAEmsB,oBAAsB,GAAE,GACzF,CAAC9C,IAGH/gB,EAAAA,WAAgB,KACd,MAAQ4Z,EAAG8L,IAAcjtB,EAAAA,EAAAA,KACnBsD,EAAS2pB,EAAUhL,MAAM,KAAK3T,GAgBhCwe,GAfJ7L,iBAAgC,IAAAiM,EAC9B,GAAkB,QAAdA,EAAC5E,EAASxnB,YAAI,IAAAosB,IAAbA,EAAerxB,OAAQ,OAC5B,MASMiF,ECrGL,SAA4B2S,EAAc8K,EAAkBE,GACjE,MAAM0O,EAA+B,GAE/BC,GAAgB9iB,EAAAA,GAAAA,IAAQ+e,IAAa/e,EAAAA,GAAAA,IAAQiU,KAAYnU,UACzDijB,GAAc/iB,EAAAA,GAAAA,KAAQwgB,EAAAA,GAAAA,IAAWxgB,EAAAA,GAAAA,IAAQmU,KAAUrU,UACzD,IAAK,IAAIkE,EAAQ,EAAGA,EAAQmF,EAAMpJ,KAAKxO,OAAQyS,IAAS,CACtD,MAAMgf,EAAuC,IAApB7Z,EAAMpJ,KAAKiE,GAC9Bif,EAAe9Z,EAAM2K,MAAM3K,EAAM+Z,eAAelf,IAElD8e,EAAgBE,GAAoBA,EAAmBD,GAE3DF,EAAY1mB,KAAK,CAAE4D,KAAMijB,EAAkBlP,MAAOmP,GACpD,CAEA,OAAOJ,CACT,CDsFmBM,OATOzZ,EAAAA,GAAMQ,IAAI,CAC5BlR,SACAwB,YAAY4oB,EAAAA,GAAAA,IAAcpqB,GAC1BC,UAAW4Q,EAAAA,GAAUvT,EAErB+sB,QAAS,CAAEC,eAAiBna,IAAWA,EAAMM,UAE9BuU,EAASxnB,KAAK,GAAGuJ,KACnBie,EAASxnB,KAAKwnB,EAASxnB,KAAKjF,OAAS,GAAIwO,MAExDuiB,EAAa9rB,EAAKe,KAAI,CAACgN,EAAKP,KAAK,IAAAuf,EAAA,MAAM,IAAKhf,EAAKgd,QAAsB,QAAfgC,EAAEvF,EAASxnB,YAAI,IAAA+sB,OAAA,EAAbA,EAAgBvf,GAAQ,IACpF,CAE8Bwf,EAAgB,GAC7C,CAACxF,EAAUwE,EAA0Bxe,IAExC,MAAMyf,EAAcxmB,EAAAA,SAClB,KAAM,CACJymB,IAAK,CACHlF,QAAS,cACTtD,WAAW,EACXH,MAAO2G,GACPzG,OAAQqE,GACRnE,mBAAmB,EACnBO,aAAcA,IAAM6G,EAAa,OAEnCoB,MAAO,CACL5G,QAAS,OACT3iB,MAAO,OACP0E,KAAM,SACNwB,GAAI,EACJC,KAAMqf,GACNxf,UAAU,EACVC,UAAU,EACVzJ,OAAQonB,EAASpnB,OACjBqK,cAAeghB,IAEjB2B,MAAO,CACLrjB,KAAMof,GACNvf,UAAU,EACVC,UAAU,EACVY,cAAgB5N,IAAkBsF,EAAAA,GAAAA,IAAYtF,OAGlD,CAAC2qB,EAASpnB,SAGZ,OAAkB,QAAdurB,EAACnE,EAASxnB,YAAI,IAAA2rB,GAAbA,EAAe5wB,QAAWixB,GAG7B/jB,EAAAA,EAAAA,MAAA,OAAKC,UAAWM,IAAW,uCAAwCN,GAAWH,SAAA,EAC5Ed,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,OAAMH,UACnBd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,sEAAqEH,SAAC,8BAIxFd,EAAAA,EAAAA,KAAA,OAKEge,aAAcA,IAAM2G,GAAY,GAChC1G,aAAcA,IAAM0G,GAAY,GAAO7jB,UAEvCd,EAAAA,EAAAA,KAACke,GAAAA,EAAmB,CAACllB,MAAM,OAAOM,OAAQqoB,GAAa7gB,UACrDE,EAAAA,EAAAA,MAAC6f,EAAAA,EAAa,CAAC9nB,KAAMwnB,EAASxnB,KAAMqtB,OAAQ,EAAGC,eAAgB,EAAEvlB,SAAA,EAC/Dd,EAAAA,EAAAA,KAAC0B,GAAAA,EAAa,CAACI,gBAAgB,MAAMH,UAAU,EAAOE,OAAQigB,MAC9D9hB,EAAAA,EAAAA,KAACwC,GAAAA,EAAK,IAAKwjB,EAAYE,MAAOI,QAAQ,YAAYC,MAAI,KACtDvmB,EAAAA,EAAAA,KAACwC,GAAAA,EAAK,IAAKwjB,EAAYE,SACvBlmB,EAAAA,EAAAA,KAACmD,GAAAA,EAAK,IAAK6iB,EAAYG,MAAOpF,QAAQ,iBACtC/gB,EAAAA,EAAAA,KAACmD,GAAAA,EAAK,IAAK6iB,EAAYG,MAAOpF,QAAQ,aAAaE,YAAY,QAAQ9nB,OAAQ,CAAC,UAAW,WAC3F6G,EAAAA,EAAAA,KAACuf,GAAAA,EAAO,CACNI,aAAcyC,GACdziB,SAAU,CAAExI,EAAG,GACfumB,mBAAmB,EACnBoC,QAAQ9f,EAAAA,EAAAA,KAACqkB,GAAY,CAACvF,SAAUA,EAAUwF,mBAAoB/D,EAASxnB,KAAKjF,SAC5E2rB,SAASzf,EAAAA,EAAAA,KAAC2jB,GAAY,CAAC7E,SAAUA,EAAU4E,UAAWA,OAExD1jB,EAAAA,EAAAA,KAACoe,GAAAA,EAAI,CACHrlB,KAAM6rB,EACNtF,QAAQ,QACRgH,QAAQ,YACRvF,QAAQ,aACRxC,KAAK,EACLC,WAAW,EACX3c,OAAQkgB,GACRrE,mBAAmB,EACnBe,cAAc,KAEhBze,EAAAA,EAAAA,KAACod,EAAAA,EAAG,IACE4I,EAAYC,IAChB3G,QAAQ,iBACR5f,KAAM6iB,GAAQG,KACdzf,KAAM+e,GACNhE,aAAcA,IAAM8G,EAAavC,GAAQG,SAE3C1iB,EAAAA,EAAAA,KAACod,EAAAA,EAAG,IACE4I,EAAYC,IAChB3G,QAAQ,gBACR5f,KAAM6iB,GAAQE,IACdxf,KAAMgf,GACNjE,aAAcA,IAAM8G,EAAavC,GAAQE,iBAtDW,IA6DlE,CElMO,SAAS+D,GAAUlrB,GAA2E,IAA1E,MAAEmrB,EAAK,KAAEnkB,EAAI,UAAEokB,EAAS,MAAEC,EAAK,UAAEC,EAAS,UAAEze,GAA4B7M,EACjG,MAAMurB,GAAapL,MAAMkL,IAAUA,EAAQ,EAAI,EAAI,EAC7CG,EAAWF,GAAa3yB,OAAO+F,SAAS4sB,GAE9C,OACE5lB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,cAAaH,SAAA,CACzB2lB,IAASzmB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,UAASH,SAAE2lB,KAElCnkB,GAAQokB,KACR1lB,EAAAA,EAAAA,MAAA,QAAMC,UAAU,mBAAkBH,SAAA,CAC/B4lB,QAAAA,GAAaK,EAAAA,GAAAA,IAAWzkB,EAAM,GAAI,UAClCA,IACCtB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,CACG,KACDd,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,MAAQ,KAAEimB,EAAAA,GAAAA,IAAWzkB,EAAM,GAAI,WAAW,aAMjFtB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,sBAAqBH,SAAA,EAClCd,EAAAA,EAAAA,KAAA,UAAQiB,UAAU,4BAA2BH,UAAEkmB,EAAAA,EAAAA,IAAaL,EAAO,CAAEM,aAAc,IAAKJ,iBACxF7mB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,6BAA4BH,UACzCE,EAAAA,EAAAA,MAACkmB,EAAAA,EAAiB,CAAApmB,SAAA,EAChBE,EAAAA,EAAAA,MAACof,EAAAA,EAAY,CAACxqB,MAAOgxB,EAAW3lB,UAAWM,IAAW,CAAE,gBAAiBulB,IAAYhmB,SAAA,EACnFd,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,UAASH,SAAC,mBACxBkmB,EAAAA,EAAAA,IAAaJ,EAAW,CAAEO,cAAc,EAAMN,kBAEjD7lB,EAAAA,EAAAA,MAACof,EAAAA,EAAY,CACXxqB,MAAOuS,EACPlH,UAAWM,IAAW,CAAE,gBAAiBulB,IACzCzG,cAAcrgB,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,cAAaH,SAAC,MAASA,SAAA,EAErDd,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,UAASH,SAAC,uBACxBkmB,EAAAA,EAAAA,IAAa7e,gBAO5B,CCtDA,MAAMif,GAAsB,CAAC,SAAU,UACjCC,GAA4B,IAAID,GAAqB,UAAW,aAW/D,SAASE,GAAsB7W,GAAmD,IAAA8W,EACvF,MAAMtW,GAAaC,EAAAA,EAAAA,IAAcT,aAAgB,EAAhBA,EAAkBlU,SAASirB,QAAS,CACnEpW,gBAAiB,CAAC,SAClBqW,eAAgBL,KAEZM,GAAaxW,EAAAA,EAAAA,IAAiC,QAApBqW,EAACtW,aAAU,EAAVA,EAAYvF,eAAO,IAAA6b,EAAAA,EAAI,KAAM,CAC5DnW,gBAAiB,CAAC,YAAa,YAAa,aAAc,aAC1DqW,eAAgBJ,KAGlB,OAAKK,EAEE,CACLC,UAAWD,EAAWC,UACtBC,UAAWF,EAAWE,UACtBC,SAAUH,EAAWG,SACrBC,SAAUJ,EAAWI,SACrBC,WAAYL,EAAWK,WACvBC,UAAWN,EAAWM,WARA,IAU1B,CCpBO,SAASC,KACd,MAAM,oBAAErZ,GAAwBpP,EAAAA,WAAiBiP,IAC3C,iBAAEgC,IAAqBO,EAAAA,EAAAA,MACvBjY,EAAOuuB,GAAsB7W,GAC7ByX,IAAYnvB,EAQlB,OANAyG,EAAAA,WAAgB,KACV0oB,GAAStZ,GAAoB,GAE1B,IAAMA,GAAoB,KAChC,CAACsZ,EAAStZ,KAEN5O,EAAAA,EAAAA,KAACmoB,GAAkB,CAACpvB,KAAMA,GACnC,CAiDO,MAAMqvB,IAAwBC,EAAAA,EAAAA,KAA4BC,EAAAA,EAAAA,KA1CjE,SAAuChtB,GAA+D,IAA9D,iBAAEmV,EAAgB,OAAE5R,GAAwCvD,EAClG,MAAM,oBAAEsT,GAAwBpP,EAAAA,WAAiBiP,GAC3C1V,EAAOuuB,GAAsB7W,GAqCnC,OA7BAjR,EAAAA,WAAgB,MACd0Z,iBACE,IAAK,MAAMxO,KAAe7L,EAAOtC,OAAQ,CACvC,MAAMgsB,EAAkBrzB,OAAOyV,OAAO,CAAC,EAAGD,GAE1C6d,EAAgBC,aAAe/X,SACxB8X,EAAgBprB,MACY,MAA/BorB,EAAgBvsB,cAClBusB,EAAgBvsB,aAAc,GAEhCyU,EAAiBlU,SAASgC,OAAOgqB,EACnC,CAEA,MAAMra,EAAQuC,EAAiBlU,SAASirB,QAElC9b,QAAcO,EAAAA,GAAMQ,IAAI,CAC5BlR,OAAQ2S,EAAM3S,OACdwB,WAAYmR,EAAMnR,WAClBvB,UAAW0S,EAAM1S,UACjBoqB,QAAS,CAAE6C,QAAS,KAGtBva,EAAM8K,iBAAiB,CAAEtN,UACzBkD,GACF,CAEA8Z,EAAyB,GACxB,CAACjY,EAAkB5R,EAAOtC,OAAQqS,KAE9B5O,EAAAA,EAAAA,KAACmoB,GAAkB,CAACpvB,KAAMA,GACnC,KAIO,SAASovB,GAAkB9f,GAAiD,IAAhD,KAAEtP,GAA4CsP,EAC/E,IAAKtP,EAAM,OAAO,KAElB,MAAM4vB,EAAW10B,OAAO+F,SAASjB,EAAK4uB,WAChCiB,EAAgB30B,OAAO+F,SAASjB,EAAKgvB,aAAehvB,EAAKgvB,aAAehvB,EAAK6uB,UAC7EC,EAAW9uB,EAAK8uB,UAAWtlB,EAAAA,GAAAA,IAAwB,IAAhBxJ,EAAK8uB,UAAmB,KAC3DC,GAAYD,GAAY9uB,EAAK+uB,UAAWf,EAAAA,GAAAA,IAAWhuB,EAAK+uB,SAAU,WAAY,gBAAkB,KAChGe,EAAY9vB,EAAKivB,WAAYzlB,EAAAA,GAAAA,IAAyB,IAAjBxJ,EAAKivB,WAAoB,KAEpE,IAAIc,EAMJ,OALIjB,GAAYgB,IAETC,ECtEM,SAAkBvH,EAAWwH,IAC1C,EAAAvH,GAAA,GAAa,EAAG3tB,WAChB,IAAIyO,GAAO,EAAAoU,GAAA,GAAO6K,GACdyH,GAAgB,EAAAtS,GAAA,GAAOqS,GAC3B,OAAOzmB,EAAKD,UAAY2mB,EAAc3mB,SACxC,CDgEQ2Y,CAAiB6N,EAAWhB,GAA6B,YACtC,gBAIvB7mB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,CACG6nB,IACC3oB,EAAAA,EAAAA,KAACwmB,GAAU,CACTC,MAAM,aACNE,MAAO5tB,EAAK6uB,UACZtlB,KAAMulB,EACNnB,UAAWoB,EACXlB,UAAW7tB,EAAK6uB,UAAY7uB,EAAK4uB,UACjCxf,UAAmD,KAAvCpP,EAAK6uB,UAAY7uB,EAAK4uB,UAAY,KAGjDiB,IACC5oB,EAAAA,EAAAA,KAACwmB,GAAU,CACTC,MAAO,GAAGqC,UACVnC,MAAO5tB,EAAKgvB,WACZzlB,KAAMumB,EACNnC,UAAWoC,EACXlC,UAAW7tB,EAAKgvB,WAAahvB,EAAK6uB,UAClCzf,UAAoD,KAAxCpP,EAAKgvB,WAAahvB,EAAK6uB,UAAY,OAKzD,C,omBElGe,MAAMqB,WAAiBxT,EAAAA,UAAyBC,WAAAA,GAAA,SAAA7hB,WAAA0P,GAAA,eAC1B2lB,EAAAA,EAAAA,aAAW,CAI9C3M,iBAAAA,GACEjZ,KAAK6lB,aACP,CAEAC,kBAAAA,GACE9lB,KAAK6lB,aACP,CAEAA,WAAAA,GAAc,IAAAE,EACZ,MAAM,KAAEtwB,EAAI,MAAE0tB,GAAUnjB,KAAK1D,MAC7B,GAAI7G,IAASuK,KAAKgmB,UAChB,OAEFhmB,KAAKgmB,UAAYvwB,EACjBuK,KAAKimB,OAAOlb,QAASmb,UAAY,GAEjC,MAAMC,GAAyC,IAA3BnmB,KAAK1D,MAAM6pB,YAEzBC,EACCjD,EAAQ,GAAK,GADdiD,EAEGpmB,KAAK1D,MAAM+pB,aAAe,GAF7BD,EAGID,EAAc,GAAK,GAHvBC,EAIE,GAEFE,EAAatmB,KAAK1D,MAAM5G,OAAS,IACjC6wB,EAAcvmB,KAAK1D,MAAMtG,QAAU,IACnCN,EAAQ4wB,EAAaF,EAAcA,EACnCpwB,EAASuwB,EAAcH,EAAaA,EAEpCxyB,EAAI+B,GAAAA,KAEPE,OAAOJ,EAAKe,KAAKjB,GAAMA,EAAE6G,QACzBoqB,WAAW,CAAC,EAAG9wB,IACf4iB,QAAQ,IAEX,IAAIxmB,EAAM6D,GAAAA,IAAOF,GAAOF,GAAWA,EAAEjD,QAEnCR,EADEA,EAAM,EACF6D,GAAAA,IAAOF,GAAOF,GAAW7E,KAAKoB,IAAIyD,EAAEjD,OAAQiD,EAAEjD,SAE9C,EAGR,MAAMuB,EAAI8B,GAAAA,MAEPC,MAAM,CAACI,EAAQ,IACfH,OAAO,CAAC/D,EAAK6D,GAAAA,IAAOF,GAAOF,GAAW7E,KAAKoG,IAAIvB,EAAEjD,WACjDwD,OACG2wB,EAAUzmB,KAAK1D,MAAMoqB,eAAiB1mB,KAAK1D,MAAMoqB,eAAiB7yB,EAAE8yB,aAEpEC,EAAMjxB,GAAAA,IACFqK,KAAKimB,OAAOlb,SACnB8b,SAAS,QAAS,IAClBC,OAAO,KACPC,KAAK,YAAa,aAAeX,EAAc,IAAMA,EAAa,KAE/DxD,EAAQjtB,GAAAA,IAAc/B,GACtBivB,EAAQltB,GAAAA,IAAa9B,GAAGmzB,MAAMhxB,EAAS,IAAM,GAAK,GAIxD4wB,EAAIE,OAAO,KAAKC,KAAK,QAAS,QAAQjkB,KAFbnN,GAAAA,IAAY9B,GAEmBozB,UAAUvxB,GAAOwxB,cAAc,GAAGP,WAAW,KAErGC,EACGE,OAAO,KACPC,KAAK,QAAS,eACdA,KAAK,YAAa,eAAiB/wB,EAAS,KAC5C8M,KAAK8f,GAERgE,EACGO,UAAU,gBACV5sB,MAAM,cAAe4rB,EAAc,MAAQ,UAC3CY,KAAK,KAAMZ,EAAc,QAAU,GACnCY,KAAK,KAAMZ,EAAc,QAAU,SACnCY,KAAK,YAAa,WAAaZ,GAAe,GAAK,GAAK,KAE3DS,EACGE,OAAO,KACPC,KAAK,QAAS,eACdA,KAAK,YAAa,aAAerxB,EAAQ,QACzCoN,KAAK+f,GAEJM,GACFyD,EACGE,OAAO,QACPC,KAAK,QAAS,mBACdA,KAAK,IAAK,GACVA,KAAK,KAAM,GACXA,KAAK,cAAe,SACpBK,KAAKjE,GAGV,MAAMkE,EAAa9xB,IAAW,IAAA+xB,EAC5B,IAAItxB,EAAStF,KAAKoG,IAAIjD,EAAS,QAARyzB,EAAC/xB,EAAEjD,aAAK,IAAAg1B,EAAAA,EAAI,GAAKzzB,EAAE,IAI1C,OAHI0B,EAAEjD,MAAQ,GAAKiD,EAAEjD,MAAQ,KAC3B0D,EAAStF,KAAKsB,IAAIgE,EAAQ,KAErBA,CAAM,EAETuxB,EAAavxB,GAAmBA,EAAS,GAClC4wB,EAAIO,UAAU,QAAQ1xB,KAAKA,GAErC+xB,QACAV,OAAO,QACPC,KAAK,SAAS,SAAUxxB,GACvB,MAAO,aAAeA,EAAEjD,MAAQ,EAAI,WAAa,WACnD,IACCy0B,KAAK,KAAMxxB,GAAW3B,EAAE2B,EAAE6G,QAC1B2qB,KAAK,KAAMxxB,GAAW1B,EAAEnD,KAAKsB,IAAI,EAAGuD,EAAEjD,UACtCy0B,KAAK,SAAUM,GACfN,KAAK,QAASnzB,EAAE6zB,aAChBV,KAAK,KAAoB,QAAdhB,EAAAhpB,sBAAc,IAAAgpB,GAAdA,EAAgBhU,mBAAqB,EAAI,GAEvD6U,EACGO,UAAU,cACV1xB,KAAKA,GACL+xB,QACAV,OAAO,QACPC,KAAK,QAAS,cACdA,KAAK,KAAMxxB,GAAW3B,EAAE2B,EAAE6G,MAASxI,EAAE6zB,YAAc,IACnDV,KAAK,KAAMxxB,IACV,MAAMS,EAASqxB,EAAU9xB,GACnBmyB,EAAUH,EAAUvxB,GAC1B,OAAIT,EAAEjD,MAAQ,EACLuB,EAAEnD,KAAKsB,IAAI,EAAGuD,EAAEjD,QAAU0D,GAAU0xB,EAAU,IAAM,GAEtD7zB,EAAEnD,KAAKsB,IAAI,EAAGuD,EAAEjD,SAAWo1B,GAAW,EAAI,GAAG,IAErDX,KAAK,QAASxxB,IAAawH,eAAewN,cAAgBgd,EAAUF,EAAU9xB,IAAM,QAAU,UAC9FwxB,KAAK,cAAe,UACpBA,KAAK,YAAa,QAClBK,MAAM7xB,GAAwB,OAAZA,EAAEjD,MAAiBm0B,EAAQlxB,EAAEjD,OAAS,KAE3D0N,KAAKimB,OAAOlb,QAASxQ,MAAM7E,MAAQ4wB,EAAa,KAChDtmB,KAAKimB,OAAOlb,QAASxQ,MAAMvE,OAASuwB,EAAc,IACpD,CAEAzmB,MAAAA,GACE,OAAOpD,EAAAA,EAAAA,KAAA,OAAK8W,IAAKxT,KAAKimB,OAAQtoB,UAAW,oBAAsBqC,KAAK1D,MAAMqB,WAAa,KACzF,EClKK,IAAKgqB,GAAkB,SAAlBA,GAAkB,OAAlBA,EAAkB,sBAAlBA,EAAkB,4BAAlBA,CAAkB,MAKlBC,GAAuB,SAAvBA,GAAuB,OAAvBA,EAAuB,gBAAvBA,EAAuB,sBAAvBA,CAAuB,MAK5B,MAEMC,GAAmB,CAC9B,CAACF,GAAmBG,YAAY,EAChC,CAACH,GAAmBI,eAAe,EACnCC,oBAAqBJ,GAAwBK,Q,8bCkB/C,MAAMtC,WAAiBxT,EAAAA,UAGrBC,WAAAA,CAAY9V,GACVwY,MAAMxY,GAAM2D,GAAA,sBACZD,KAAKimB,QAASL,EAAAA,EAAAA,YAChB,CAEA3M,iBAAAA,GACEjZ,KAAK6lB,aACP,CAEAC,kBAAAA,GACE9lB,KAAK6lB,aACP,CAEAA,WAAAA,GACE,MAAMpwB,EAAOuK,KAAK1D,MAAM7G,KAGlBC,EAAsB,EAAdD,EAAKjF,OAGboD,EAAI+B,GAAAA,KAEPE,OAAOJ,EAAKe,KAAKjB,GAAMA,EAAE6G,QACzBxG,MAAM,CAAC,EAAGF,IAEb,IAAI5D,EAAM6D,GAAAA,IAAOF,GAAOF,GAAWA,EAAEjD,QAEnCR,EADEA,EAAM,EACF6D,GAAAA,IAAOF,GAAOF,GAAW7E,KAAKoB,IAAIyD,EAAEjD,OAAQiD,EAAEjD,SAE9C,EAGR,MAAMuB,EAAI8B,GAAAA,MAEPC,MAAM,CAhBM,GAgBG,IACfC,OAAO,CAAC/D,EAAK6D,GAAAA,IAAOF,GAAOF,GAAW7E,KAAKoG,IAAIvB,EAAEjD,WACjDwD,OACAoyB,QAAQlyB,GAILmyB,EAFMxyB,GAAAA,IAAUqK,KAAKimB,OAAOlb,SAAS8b,SAAS,QAAS,IAE5CM,UAAU,QAAQ1xB,KAAKA,GACxC0yB,EACGX,QACAV,OAAO,QACPC,KAAK,SAAS,SAAUxxB,GACvB,MAAO,aAAeA,EAAEjD,MAAQ,EAAI,WAAa,WACnD,IACCy0B,KAAK,KAAK,SAAUxxB,GACnB,OAAO3B,EAAE2B,EAAE6G,KACb,IACC2qB,KAAK,KAAK,SAAUxxB,GACnB,OAAO1B,EAAEnD,KAAKsB,IAAI,EAAGuD,EAAEjD,OACzB,IACCy0B,KAAK,UAAU,SAAUxxB,GACxB,IAAIS,EAAStF,KAAKoG,IAAIjD,EAAE0B,EAAEjD,OAASuB,EAAE,IAIrC,OAHI0B,EAAEjD,MAAQ,GAAKiD,EAAEjD,MAAQ,KAC3B0D,EAAStF,KAAKsB,IAAIgE,EAAQ,KAErBA,CACT,IACC+wB,KAAK,QA7CS,GA8CjBoB,EACGC,aACArB,KAAK,SAAS,SAAUxxB,GACvB,MAAO,aAAeA,EAAEjD,MAAQ,EAAI,WAAa,WACnD,IACCy0B,KAAK,KAAK,SAAUxxB,GACnB,OAAO3B,EAAE2B,EAAE6G,KACb,IACC2qB,KAAK,KAAK,SAAUxxB,GACnB,OAAO1B,EAAEnD,KAAKsB,IAAI,EAAGuD,EAAEjD,OACzB,IACCy0B,KAAK,UAAU,SAAUxxB,GACxB,IAAIS,EAAStF,KAAKoG,IAAIjD,EAAE0B,EAAEjD,OAASuB,EAAE,IAIrC,OAHI0B,EAAEjD,MAAQ,GAAKiD,EAAEjD,MAAQ,KAC3B0D,EAAStF,KAAKsB,IAAIgE,EAAQ,KAErBA,CACT,IACC+wB,KAAK,QAhES,GAiEjBoB,EAAKE,OAAO5b,SAEZzM,KAAKimB,OAAOlb,QAASxQ,MAAM7E,MAAQA,EAAQ,KAC3CsK,KAAKimB,OAAOlb,QAASxQ,MAAMvE,OAASA,MACtC,CAEA8J,MAAAA,GACE,OAAOpD,EAAAA,EAAAA,KAAA,OAAK8W,IAAKxT,KAAKimB,OAAQtoB,UAAU,mBAC1C,EAGF,SAAS2qB,KACP,OACE5rB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,iCAAgCH,UAC7CE,EAAAA,EAAAA,MAAA,OAAKC,UAAU,yCAAwCH,SAAA,EACrDd,EAAAA,EAAAA,KAAC6rB,GAAAA,GAAI,CAACnsB,KAAK,OAAO1G,MAAM,KAAKiI,UAAU,2BACvCjB,EAAAA,EAAAA,KAAA,MAAIiB,UAAU,yCAAwCH,SAAC,oCACvDd,EAAAA,EAAAA,KAAA,KAAAc,SAAG,4KAIHd,EAAAA,EAAAA,KAAA,KACE2Q,KAAK,gFACLwJ,OAAO,SACPlZ,UAAU,WAAUH,SACrB,mBAMT,CAMA,MAAMgrB,WAAwBrW,EAAAA,UAAgCC,WAAAA,GAAA,SAAA7hB,WAAA0P,GAAA,aACpD,CACNwoB,OAAO,GACR,CAED3oB,MAAAA,GACE,OACEpD,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,UAASH,UACtBE,EAAAA,EAAAA,MAACgrB,GAAAA,EAAuB,CAACC,UAAU,QAAQC,YAAa,EAAEprB,SAAA,EACxDd,EAAAA,EAAAA,KAACgsB,GAAAA,EAAqB,CAACG,UAAW7oB,KAAK1D,MAAM7G,KAAKksB,MAAM/tB,GAAkB,OAAZA,EAAEtB,QAAgBkL,UAC9Ed,EAAAA,EAAAA,KAACipB,GAAQ,CAAClwB,KAAMuK,KAAK1D,MAAM7G,UAE7BiH,EAAAA,EAAAA,KAACgsB,GAAAA,EAAe,CACdI,QAAQ,EACRnrB,UAAWM,IAAW,6DAA8D,CAClF,SAAUlB,eAAeG,iBACxBM,SAEFT,eAAeG,gBACdR,EAAAA,EAAAA,KAACqsB,GAAW,CAACtzB,KAAMuK,KAAK1D,MAAM7G,KAAM0wB,aAAa,KAEjDzpB,EAAAA,EAAAA,KAAC4rB,GAAY,UAMzB,EAGF,MAAMU,GAAiB,IAEjBC,GAAoBA,IACnBlsB,eAAeG,eAI6C,OAA1DgsB,EAAAA,GAAAA,UAAiB,oBAAqBF,IAA0B,IAAM,IAHpEA,GAMLG,GAA+CnB,GAC/CA,IAAwBJ,GAAwBwB,UAC3C,IAIF,IAUT,SAASC,KAAsB,IAAAtD,EAC7B,MAAM,SAAE1lB,IAAaG,EAAAA,GAAAA,MACf8oB,EAAUptB,EAAAA,QAAanB,EAAAA,GAAAA,QAEtBpH,EAAOoiB,GAAY7Z,EAAAA,SAAgC,CACxDqtB,OAAQN,KACRO,MAAO,IACPC,SAAU,KACVh0B,KAAM,OAGFyC,EAAYixB,GAA4C9oB,EAAS2nB,sBAEjE,KAAEvyB,GAAS9B,EACXixB,EAAUnvB,IAASA,EAAKmG,OAAShK,OAAO83B,KAAKj0B,GAAMjF,OAAS,EAC5DuhB,EAAmC,QAAjBgU,EAAGhpB,sBAAc,IAAAgpB,OAAA,EAAdA,EAAgBhU,mBAkB3C7V,EAAAA,WAAgB,KAAM,IAAAytB,EAIpB,OAHAL,EAAQve,SAAUhQ,EAAAA,GAAAA,MACH,QAAf4uB,EAAAL,EAAQve,eAAO,IAAA4e,GAAfA,EAAiB1uB,SAEV,KAAM,IAAA2uB,EACI,QAAfA,EAAAN,EAAQve,eAAO,IAAA6e,GAAfA,EAAiB/tB,SAAS,CAC3B,GACA,IAEHK,EAAAA,WAAgB,KAzBD0Z,WACb,MAAM,OAAE2T,EAAM,MAAEC,GAAU71B,GACpB,EAAEmiB,IAAMnhB,EAAAA,GAAAA,OAEd,IACE,MAAMk1B,QAAiBC,MAAM,yBAAyBhU,QAAQyT,OAAYC,IAAQtxB,KAC5E6xB,QAAaF,EAASE,OAE5BhU,EAAS,IACJpiB,EACH81B,SAAUM,EAAKN,SACfh0B,KAAMs0B,EAAKnuB,MAAQmuB,EAAOA,EAAKt0B,MAEnC,CAAE,MAAO,GAaTsf,EAAQ,GAEP,CAACphB,EAAM61B,MAAO71B,EAAM41B,OAAQrxB,IAE/B,MAAM8xB,EAAmBA,CAACrtB,EAAYyqB,KAEpC1qB,EAAAA,EAAAA,KAAA,KACE2Q,KAAK,IACL1P,UAAWM,IAAW,WAAY,CAAE,YAAatK,EAAM61B,QAAU7sB,IACjEqT,QAAUtU,IACRA,EAAE6U,iBACFwF,EAAS,IACJpiB,EACH61B,MAAO7sB,GACP,EACFa,SAED4pB,IAIL,OAAa,OAAT3xB,EACK,MAIPiI,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,SAAOhH,MAAM,OAAO+e,YAAY,IAAI9W,UAAU,0BAAyBH,UACrEd,EAAAA,EAAAA,KAAA,SAAAc,UACEE,EAAAA,EAAAA,MAAA,MAAAF,SAAA,EACEE,EAAAA,EAAAA,MAAA,MAAInD,MAAOwC,eAAeG,eAAiB,CAAE+sB,YAAa,GAAM,CAAC,EAAEzsB,SAAA,CAChET,eAAeG,iBAEdQ,EAAAA,EAAAA,MAAA,UACEC,UAAWM,IAAW,CACpB,4BAA6B8T,EAC7B,YAAaA,IAEfzf,MAAOqB,EAAM41B,OACbhR,SAAW7c,IACTA,EAAE6U,iBACF,MAAMgZ,EAA4B,MAAnB7tB,EAAEmb,OAAOvkB,MAAgB,IAAM,IAC9CyjB,EAAS,IACJpiB,EACH41B,OAAQA,KAEVW,EAAAA,GAAAA,UAAS,oBAAqBX,EAAQP,IAAgB,EAAM,EAC5DxrB,SAAA,EAEFd,EAAAA,EAAAA,KAAA,UAAQpK,MAAM,IAAGkL,SAAC,aAClBd,EAAAA,EAAAA,KAAA,UAAQpK,MAAM,IAAGkL,SAAC,eAGrBT,eAAeG,iBAAkBR,EAAAA,EAAAA,KAAAqT,EAAAA,SAAA,CAAAvS,SAAE,SAEpCE,EAAAA,EAAAA,MAAA,QAAMC,UAAU,iBAAgBH,SAAA,CAC7BwsB,EAAiB,IAAK,oBAAoB,KAACttB,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,MAAS,IACnFwsB,EAAiB,IAAK,iBAAiB,KAACttB,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAC,MAAS,IAChFwsB,EAAiB,IAAK,oBAG3BttB,EAAAA,EAAAA,KAAA,MAAI0F,MAAM,QAAO5E,UACfd,EAAAA,EAAAA,KAACytB,GAAyB,aAKjCvF,IAAWloB,EAAAA,EAAAA,KAAC0tB,GAAe,CAAC30B,KAAM9B,EAAM8B,KAAMg0B,SAAU91B,EAAM81B,YAC7D7E,IACAloB,EAAAA,EAAAA,KAAA,SACEhH,MAAM,OACN+e,YAAY,IACZ,cAAY,yBACZ9W,UAAWM,IAAW,CACpB,qEAAsE8T,EACtE,+CAAgDA,EAChD,WAAYhV,eAAeG,iBAC1BM,UAEHd,EAAAA,EAAAA,KAAA,SAAAc,UACEd,EAAAA,EAAAA,KAAA,MAAIiB,UAAU,gFAA+EH,UAC3Fd,EAAAA,EAAAA,KAAA,MAAIiB,UAAWoU,EAAqB,GAAK,eAAevU,SAAC,0FASvE,CAUA,SAAS2sB,KACP,MAAM,SAAE9pB,EAAQ,YAAEC,IAAgBE,EAAAA,GAAAA,MAE5B6pB,EAAgBA,CAACC,EAA2Bh4B,KAChDgO,EAAY,IACPD,EACH,CAACiqB,GAAMh4B,GACP,EAGEi4B,EAAiBruB,EAAAA,SAAc,IACNmE,EAAS2nB,sBAAwBJ,GAAwBwB,UAG7E,aAGF,cACN,CAAC/oB,EAAS2nB,sBAEb,OACEtqB,EAAAA,EAAAA,MAAA,OAAKC,UAAU,sCAAqCH,SAAA,EAClDE,EAAAA,EAAAA,MAACH,GAAAA,EAAU,CAACzJ,KAAK,QAAQvB,MAAM,OAAOkL,UAAW+sB,EAAAA,GAAAA,WAA+B/5B,EAAT,OAAmB+M,SAAA,EACxFd,EAAAA,EAAAA,KAACyB,GAAAA,EAAgB,CACfD,OAAQmC,EAASsnB,GAAmBG,WACpC9X,QAASA,KACPqa,EAAc1C,GAAmBG,WAAYznB,EAASsnB,GAAmBG,WAAW,EACpFtqB,SAED+sB,KAEH7tB,EAAAA,EAAAA,KAACyB,GAAAA,EAAgB,CACfD,OAAQmC,EAASsnB,GAAmBI,cACpC/X,QAASA,KACPqa,EAAc1C,GAAmBI,cAAe1nB,EAASsnB,GAAmBI,cAAc,EAC1FvqB,SAED,GAAG+sB,YAIR7sB,EAAAA,EAAAA,MAACH,GAAAA,EAAU,CAACzJ,KAAK,QAAQvB,MAAM,YAAYkL,UAAW+sB,EAAAA,GAAAA,WAA+B/5B,EAAT,OAAmB+M,SAAA,EAC7Fd,EAAAA,EAAAA,KAACyB,GAAAA,EAAgB,CACfD,OAAQmC,EAAS2nB,sBAAwBJ,GAAwBK,OACjEjY,QAASA,KACPqa,EAAc,sBAAuBzC,GAAwBK,OAAO,EACpEzqB,SACH,YAGDd,EAAAA,EAAAA,KAACyB,GAAAA,EAAgB,CACfD,OAAQmC,EAAS2nB,sBAAwBJ,GAAwBwB,UACjEpZ,QAASA,KACPqa,EAAc,sBAAuBzC,GAAwBwB,UAAU,EACvE5rB,SACH,mBAMT,CAEA,SAASitB,GAAYl4B,GACnB,OAAQA,GACN,IAAK,kBACL,IAAK,gBACH,OAAO,EAGX,OAAO,CACT,CA2BA,SAASm4B,GAAen4B,GACtB,OAAQA,GACN,IAAK,kBACL,IAAK,gBACL,IAAK,wBACL,IAAK,kBACL,IAAK,eACL,IAAK,0BACL,IAAK,mBACL,IAAK,0BACL,IAAK,aACL,IAAK,uBACL,IAAK,eACL,IAAK,4BACL,IAAK,oBACL,IAAK,eACL,IAAK,+BACL,IAAK,iCACL,IAAK,iCACL,IAAK,iCACL,IAAK,qBACL,IAAK,0BACL,IAAK,sBACL,IAAK,0BACH,OAAO,EAGX,OAAO,CACT,CAIA,SAAS63B,GAAepyB,GAA2C,IAAA2yB,EAAA,IAA1C,KAAEl1B,EAAI,SAAEg0B,GAAgCzxB,EAC/D,MAAM,SAAEqI,IAAaG,EAAAA,GAAAA,MACfoqB,EAA6C,SAAjCn1B,aAAI,EAAJA,EAAO,mBAAmB,IACtCo1B,EAAap1B,EA5DrB,SAAmBA,EAAgCm1B,GACjD,MAAME,EAAc,CAAC,EAqBrB,OApBAl5B,OAAO83B,KAAKj0B,GAAMmX,SAAS0d,IACzBQ,EAAOR,GAAO70B,EAAK60B,GAChB9zB,KAAI,CAAClE,EAAO2Q,KACX,GAAIwnB,GAAYH,GAAM,CACpB,IAAIS,EAMJ,OAJEA,EADY,KAAVz4B,EACY,KAEAiiB,WAAWjiB,EAAM04B,QAAQ,KAAM,KAExC,CACL5uB,KAAM3G,EAAK,mBAAmBwN,GAC9B3Q,MAAOy4B,EAEX,CACA,OAAO,IAAI,IAEZE,MAAML,EAAY,EAAI,EAAE,IAGtBE,CACT,CAqC4BI,CAAUz1B,EAAMm1B,GAAa,KAEjDO,EAAUjvB,EAAAA,SACd,IACE2uB,EACIj5B,OAAOw5B,QAAQP,GAAYtmB,QAQzB,CAACC,EAAGO,KAAoB,IAAjBulB,EAAKr3B,GAAO8R,EACnB,IAAK0lB,GAAYH,GACf,OAAO9lB,EAET,MAAM2mB,EAAsE,GAC5E,IAAIE,EAA2B,KAGR,IAAIp4B,GAAQq4B,UAEpB1e,SAAQ2e,IAAe,IAAd,MAAEj5B,GAAOi5B,EAC/B,MAAMC,EAAgC,iBAAVl5B,EAC5B,GAAKk5B,GAA8B,OAAdH,GAAoC,IAAdA,EAEpC,CACL,MAAMzmB,EAAStS,EAAQ+4B,EACvBF,EAAQ/vB,KAAK,CAAEwJ,SAAQC,UAAYD,EAASlU,KAAKoG,IAAIu0B,GAAc,KACrE,MAJEF,EAAQ/vB,KAAK,CAAEwJ,OAAQ,KAAMC,UAAW,OAMtC2mB,IAAcH,EAAY/4B,EAAK,IAGrC,MAAMm5B,EAAkB,IAAIN,GAASG,UACrC,MAAO,IACF9mB,EACH,CAAC8lB,GAAM,CACL1lB,OAAQ6mB,EAAgBj1B,KAAIk1B,IAAA,IAAC,OAAE9mB,GAAQ8mB,EAAA,OAAK9mB,CAAM,IAClDC,UAAW4mB,EAAgBj1B,KAAIm1B,IAAA,IAAC,UAAE9mB,GAAW8mB,EAAA,OAAK9mB,CAAS,KAE9D,GACA,CAAC,GACJ,CAAC,GACP,CAACgmB,IAGGN,EAAiBruB,EAAAA,SAAc,IACNmE,EAAS2nB,sBAAwBJ,GAAwBwB,UAG7E,aAGF,cACN,CAAC/oB,EAAS2nB,sBAEb,IAAKvyB,IAASo1B,EAAY,OAAO,KAEjC,MAAM9Y,EAAmC,QAAjB4Y,EAAG5tB,sBAAc,IAAA4tB,OAAA,EAAdA,EAAgB5Y,mBACrC6Z,EAAY3tB,IAAW,YAAa,CACxC,yCAA0C8T,IAEtC8Z,GAAmB9Z,GAAsBtc,EAAK,iBAAmB,EAAI,EAE3E,OACEiI,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,SACEhH,MAAM,OACN+e,YAAY,IACZC,YAAY,IACZ,cAAY,yBACZ/W,UAAWM,IAAW,CACpB,qEAAsE8T,EACtE,+CAAgDA,EAChD,WAAYhV,eAAeG,iBAC1BM,UAEHd,EAAAA,EAAAA,KAAA,SAAAc,SACG5L,OAAO83B,KAAKj0B,GAAMe,KAAI,CAAC8zB,EAAKwB,KAC3B,MAAMC,IAAeZ,EAAQb,IAAQ70B,EAAK60B,GAAK3I,MAAMrvB,GAAUA,IAC/D,OACEoL,EAAAA,EAAAA,MAAA,MAEEC,UAAWM,IAAW,CACpB,gFAAiF8T,EACjF,iBAAkBA,GAAsB2Y,GAAeJ,GACvD,kBAAmBvY,GAAsB2Y,GAAeJ,GACxD,mBAAoBvY,IAAuB2Y,GAAeJ,GAC1D,YAA0B,IAAbwB,EACb,YAAaA,IAAaD,IACzBruB,SAAA,EAEHE,EAAAA,EAAAA,MAAA,MAAIC,UAAWiuB,EAAUpuB,SAAA,CACtB8sB,EACAyB,GAAc1rB,EAASsnB,GAAmBG,aACzCpqB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAE+sB,OAGnCwB,GAAc1rB,EAASsnB,GAAmBI,gBACzCrqB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAA,QAAMiB,UAAU,eAAcH,SAAE,GAAG+sB,eAIzC7tB,EAAAA,EAAAA,KAAA,MAAIiB,UAAWiuB,EAAWxpB,MAAM,SAAQ5E,SACrCitB,GAAYH,KAAQ5tB,EAAAA,EAAAA,KAAC8rB,GAAe,CAAC/yB,KAAMo1B,EAAWP,GAAKgB,cAE7D71B,EAAK60B,GAAK9zB,KAAI,CAAClE,EAAO2Q,KAAU,IAAA+oB,EAAAC,EAAAC,EAAAC,EAAAC,EAC/B,MAAMC,EAAczB,EAAY3nB,EAAQ,EAAIA,EACtCqpB,EAAkD,QAApCN,EAAe,QAAfC,EAAGd,EAAQb,UAAI,IAAA2B,OAAA,EAAZA,EAAcrnB,OAAOynB,UAAY,IAAAL,EAAAA,EAAI,KACtDO,EAAwD,QAAvCL,EAAe,QAAfC,EAAGhB,EAAQb,UAAI,IAAA6B,OAAA,EAAZA,EAActnB,UAAUwnB,UAAY,IAAAH,EAAAA,EAAI,KAClE,IAAKnvB,eAAeG,eAAgB,CAClC,GAAI4uB,IAAaD,GAA6B,IAAV5oB,EAClC,OACEvF,EAAAA,EAAAA,MAAA,MAEE0E,MAAM,QACNzE,UAAU,gDACV6uB,QAAS56B,OAAO83B,KAAKj0B,GAAMjF,OAAS,EACpCi8B,QAASh3B,EAAK60B,GAAK95B,OAAS,EAAEgN,SAAA,EAE9Bd,EAAAA,EAAAA,KAACP,GAAAA,GAAK,CACJC,KAAK,gBACLuB,UAAU,6DAEZjB,EAAAA,EAAAA,KAAC6rB,GAAAA,GAAI,CAACnsB,KAAK,OAAO1G,MAAM,KAAKiI,UAAU,2BACvCjB,EAAAA,EAAAA,KAAA,MAAIiB,UAAU,yCAAwCH,SAAC,oCACvDd,EAAAA,EAAAA,KAAA,KAAGiB,UAAU,wCAAuCH,SAAC,4KAKrDd,EAAAA,EAAAA,KAAA,KACE2Q,KAAK,gFACLwJ,OAAO,SACPlZ,UAAU,WAAUH,SACrB,iBArBIyF,GA2BX,GACEA,EAAQ,IACN8O,GAA8B,oBAARuY,GACb,oBAARA,GAAqC,kBAARA,GAEhC,OAAO,IAEX,CAEA,OACE5sB,EAAAA,EAAAA,MAAA,MAAgB0E,MAAM,QAAQzE,UAAWiuB,EAAUpuB,SAAA,CAChDlL,EACAy5B,GAAc1rB,EAASsnB,GAAmBG,aACzCpqB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACogB,EAAAA,EAAY,CAACxqB,MAAOg6B,EAAgBvP,aAAc,KAAKvf,UACrD2C,EAAAA,EAAAA,IAAkBmsB,EAAgB,CAAE3I,aAAc,WAIxDoI,GAAc1rB,EAASsnB,GAAmBI,gBACzCrqB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAACogB,EAAAA,EAAY,CACXxqB,MAAOi6B,EACPxP,aAAoC,OAAtBwP,EAA6B,IAAM,KAAK/uB,SAExB,QAFwB4uB,EAErDG,aAAiB,EAAjBA,EAAmB37B,QAAQ,UAAE,IAAAw7B,EAAAA,EAAI,WAjBjCnpB,EAqBJ,MA9FJqnB,EAiGF,SAKb5tB,EAAAA,EAAAA,KAAA,SAAOiB,UAAU,0BAA0BjI,MAAM,OAAO+e,YAAY,IAAGjX,UACrEd,EAAAA,EAAAA,KAAA,SAAAc,UACEd,EAAAA,EAAAA,KAAA,MAAAc,UACEE,EAAAA,EAAAA,MAAA,MAAI0E,MAAM,QAAO5E,SAAA,CAAC,uBAAqBisB,aAMnD,CAEA,SAlVA,WACE,OACE/sB,EAAAA,EAAAA,KAAC+D,GAAAA,GAA8B,CAACE,gBAAiBknB,GAAkBnnB,UDjVpC,+BCiVmElD,UAChGd,EAAAA,EAAAA,KAAC2sB,GAAmB,KAG1B,EClVMqD,IAAclC,EAAAA,GAAAA,MACd/c,GAAYhW,OAAOsF,eAAeG,eAEjC,SAASyvB,GAAiB30B,GAAmC,IAAlC,sBAAE40B,GAA8B50B,EAChE,MAAM,MAAEiL,EAAK,OAAEhL,EAAM,OAAE4Q,GAAW3M,EAAAA,WAAiB0M,EAAAA,GAEnD,OACElL,EAAAA,EAAAA,MAAA,OACEC,UAAWc,IAAW,gDAAiD,CACrE,6BAA8BiuB,KAC7BlvB,SAAA,EAEHd,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,YACfjB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,8BAA6BH,UAC1Cd,EAAAA,EAAAA,KAACmwB,EAAAA,GAAgB,CACfpvB,SAAUivB,GAAc,UAAY,OACpC54B,KAAK,SACL2Z,UAAWA,GACXqf,sBAAuBz0B,EAAAA,GAA2BsS,eAGtDjO,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,+CAA8CH,UAC3Dd,EAAAA,EAAAA,KAACqwB,EAAAA,GAAuB,CACtBj5B,KAAK,SACLk5B,WAAY/pB,EACZwK,UAAW1Q,eAAeG,eAC1B+vB,sBAAsB,EACtBC,kBAAmBN,EACnBO,yBAAuB,OAG3BzwB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,0BAAyBH,UACtCd,EAAAA,EAAAA,KAACsB,GAAAA,GAAM,CACLP,SAAUivB,QAAcj8B,EAAY,OACpC28B,YAAY,QACZt5B,KAAK,SACL6J,UAAU,mBACV,cAAY,wBACZ,aAAYsF,EACZ,cAAahL,EACb,iBAAgB4Q,EAAOrL,SACxB,cAMT,C,gBCrDA,SAAS6vB,GAAYC,EAAiBr6B,GACpC,OAAOA,EAAOuD,KAAI,CAAClE,EAAO2Q,KAAU,CAAG7G,KAAMkxB,EAAUrqB,EAAO3Q,YAAUg5B,SAC1E,CAcA,SAASiC,GAAOv1B,GAUC,IAVA,KACfsM,EAAI,KACJ7O,EAAI,MACJ0tB,EAAK,iBACLqK,EAAmB,EAAC,iBACpBC,EAAmB,EAAC,WACpBC,EAAa,EAAC,WACdC,EAAa,EAAC,gBACdC,EAAkB,GAAE,gBACpBC,EAAkB,IACL71B,EACb,MAAMpC,EAAQlF,KAAKsB,OAAOyD,EAAKe,KAAKlE,GAAU5B,KAAKoG,IAAIxE,KAAQmE,OAAO9F,SAChEm9B,EAAUp9B,KAAKoG,IAAIlB,IAAU,IAC7ByD,EAAQy0B,EAAUH,EAAaD,EAC/Bz6B,EAASwC,EAAKe,KAAKlE,IACvB,MAAMy7B,GAAU39B,EAAAA,GAAAA,IAAMiJ,EAAQ/G,EAAOw7B,EAAUL,EAAmBD,GAClE,OAAgB,MAATl7B,GAAiB3B,OAAOwnB,MAAM4V,GAAW,KAAOA,CAAO,IAGhE,OACErxB,EAAAA,EAAAA,KAACipB,GAAQ,CACPxC,MAAOA,EAAQ,KAAO2K,EAAUD,EAAkBD,GAClDn4B,KAAM43B,GAAY/oB,EAAMrR,GACxByzB,eAAiBp0B,IAAUlC,EAAAA,GAAAA,IAAMkC,EAAOw7B,EAAUL,EAAmBD,GACrE93B,MAAO,IACPM,OAAQ,IACRqwB,YAAa,GACb1oB,UAAU,SAGhB,CAEe,SAASqwB,KACtB,MAAM,MAAE/qB,GAAU/G,EAAAA,WAAiB0M,EAAAA,GAE7BsU,EAAYhhB,EAAAA,SAChB,KACEihB,EAAAA,GAAAA,IAA8D,CAC5DC,UAAW,gBAAgBna,IAC3Boa,eAAe,KAEnB,CAACpa,IAGH,OAAKia,GAGHxf,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAA,MAAI0F,MAAM,SAAQ5E,UAChBd,EAAAA,EAAAA,KAAC6wB,GAAO,CAACpK,MAAM,MAAM7e,KAAM4Y,EAAU5Y,KAAM7O,KAAMynB,EAAUjqB,OAAO,QAEpEyJ,EAAAA,EAAAA,KAAA,MAAI0F,MAAM,SAAQ5E,UAChBd,EAAAA,EAAAA,KAAC6wB,GAAO,CACNpK,MAAM,QACN7e,KAAM4Y,EAAU5Y,KAChB7O,KAAMynB,EAAUjqB,OAAO,GACvBw6B,iBAAkB,EAClBE,WAAY,KACZC,gBAAgB,SAChBC,gBAAgB,cAGpBnxB,EAAAA,EAAAA,KAAA,MAAI0F,MAAM,SAAQ5E,UAChBd,EAAAA,EAAAA,KAAC6wB,GAAO,CACNpK,MAAM,qBACN7e,KAAM4Y,EAAU5Y,KAChB7O,KAAMynB,EAAUjqB,OAAO,GACvBw6B,iBAAkB,EAClBE,WAAY,KACZC,gBAAgB,QAChBC,gBAAgB,eA1BD,IA+BzB,C,gBClGO,MAAMI,GAAyB,CACpCC,SAAUA,IAAM,6EAChBC,SAAU,uBCGZ,SAASC,KAGP,OACE1xB,EAAAA,EAAAA,KAAA,OAAKiB,UAAU,sCAAqCH,SACjDqO,MAAMgM,KAAKhM,MAAM,IAAIrV,KAAI,CAAC63B,EAAGprB,KAC5BvG,EAAAA,EAAAA,KAAA,OAAiBiB,UAJrB,yIAI4CH,UACtCd,EAAAA,EAAAA,KAACgU,EAAAA,EAAO,KADAzN,MAMlB,CAYA,UAAeqrB,EAAAA,GAAAA,KAVf,WACE,MAAOC,IAAqB5e,EAAAA,EAAAA,GAAe,IACtCse,GACHpe,kBAAkB,EAClB2e,cAAe,SAEXC,EAAuBF,aAAiB,EAAjBA,EAAmBG,YAChD,OAAOD,GAAuB/xB,EAAAA,EAAAA,KAAC+xB,EAAoB,KAAM/xB,EAAAA,EAAAA,KAAC0xB,GAAe,GAC3E,ICXMO,GAAe3oB,SAAS4oB,iBAAiB,0BACzCC,GAAc7oB,SAAS4oB,iBAAiB,wBAExCE,GAAoB9oB,SAAS4oB,iBAAiB,+BAC9CG,GAAmB/oB,SAAS4oB,iBAAiB,6BAE7CI,GAA4BhpB,SAAS4oB,iBAAiB,eAEtDK,GAA2BjpB,SAAS4oB,iBAAiB,gBAErDM,GAAmBlpB,SAAS4oB,iBAAiB,eAE7CO,GAAsBnpB,SAAS4oB,iBAAiB,0BAE/C,SAASQ,GAAqBp3B,GAAgE,IAA/D,sBAAE40B,GAA2D50B,EACjG,MAAM0T,EAAUxP,EAAAA,WAAiB0M,EAAAA,GAE3BymB,EAAsBrpB,SAASspB,cAAc,2BAA2B5jB,EAAQzT,UAChFs3B,EAAqBvpB,SAASspB,cAAc,yBAAyB5jB,EAAQzT,UAC7Eu3B,IAAUD,KAAwBF,EAExC,OACE3xB,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,CACqB,IAAlBkO,EAAQzI,QAAgBxL,OAAOgO,qBAC9B/I,EAAAA,EAAAA,KAAC6O,EAAW,CAACC,eAAgBmjB,GAAcljB,MAAOojB,GAAavjB,qBAAqB,EAAM9N,UACxFd,EAAAA,EAAAA,KAACR,EAAAA,SAAc,CAAChJ,SAAU,KAAKsK,SAC5BkO,EAAQ3C,OAASqI,EAAAA,GAAUC,aAAe3F,EAAQ1C,UAAYsI,EAAAA,GAAaE,eAC1E9U,EAAAA,EAAAA,KAACioB,GAAuB,KAExBjoB,EAAAA,EAAAA,KAACooB,GAAqB,CAACvpB,OAAQ9D,OAAOuS,yBAM9CtN,EAAAA,EAAAA,KAAC6O,EAAW,CAACC,eAAgBsjB,GAAmBrjB,MAAOsjB,GAAkBzjB,qBAAqB,EAAM9N,UAClGd,EAAAA,EAAAA,KAACsU,EAAe,MAGjBtF,EAAQ3C,OAASqI,EAAAA,GAAUC,cAC1B3T,EAAAA,EAAAA,MAACxB,EAAAA,SAAc,CAAChJ,SAAU,KAAKsK,SAAA,CACV,IAAlBkO,EAAQzI,QAAevG,EAAAA,EAAAA,KAACgN,GAAAA,EAAU,IAElCgC,EAAQzI,MAAQ,IACfvG,EAAAA,EAAAA,KAAC6O,EAAW,CACVE,MAAOujB,GAEP/rB,MAAOyI,EAAQzI,MAAQ,EAAEzF,UAEzBd,EAAAA,EAAAA,KAACiwB,GAAiB,CAACC,sBAAuBA,SAMjDlhB,EAAQ1C,UAAYsI,EAAAA,GAAaC,aAAe9Z,OAAO4f,oBAAwC,IAAlB3L,EAAQzI,QAAevG,EAAAA,EAAAA,KAACkY,EAAI,IAEzG4a,IACC9yB,EAAAA,EAAAA,KAAC6O,EAAW,CAACC,eAAgB6jB,EAAqB5jB,MAAO8jB,EAAmB/xB,UAC1EE,EAAAA,EAAAA,MAAAqS,EAAAA,SAAA,CAAAvS,SAAA,EACEd,EAAAA,EAAAA,KAAC+yB,GAAW,KACZ/yB,EAAAA,EAAAA,KAACsgB,GAAc,CAACrf,UAAU,eAKhCjB,EAAAA,EAAAA,KAAC6O,EAAW,CACVE,MAAOwjB,GAEPhsB,MAAOusB,EAAQ9jB,EAAQzI,MAAQ,OAAIxS,EAAU+M,UAE7Cd,EAAAA,EAAAA,KAACsxB,GAAiB,OAGpBtxB,EAAAA,EAAAA,KAAC6O,EAAW,CAACE,MAAOyjB,GAAiB1xB,UACnCd,EAAAA,EAAAA,KAACgzB,GAAU,OAGbhzB,EAAAA,EAAAA,KAAC6O,EAAW,CAACE,MAAO0jB,GAAoB3xB,UACtCd,EAAAA,EAAAA,KAACykB,GAAyB,CAACxjB,UAAU,aAI7C,C,gBC9FA,MAAMgyB,GAAuC,uCACvCC,GAAqC,wBACrCC,GAA0B,6BCEjB,SAASC,MACtBxqB,EAAAA,EAAAA,KCPApJ,EAAAA,WAAgB,KACd,MAAM6zB,EAAgB/pB,SAAS4oB,iBAAoC,6BAEnE,SAASoB,EAAqBC,GAC5BA,EAAG1f,iBAEH,MAAM2f,EAASD,EAAGE,cACZC,EAAsBF,EAAOG,uBAEnCD,SAAAA,EAAqBxB,iBAAiB,YAAYhiB,SAAQ,CAAC0jB,EAAQrtB,EAAO4Q,KACpEyc,EAAOhkB,UAAUikB,SAAS,YAC5BD,EAAOhkB,UAAUG,OAAO,WAG1B6jB,EAAOhkB,UAAUG,OAAO,UAEpBxJ,IAAU4Q,EAAKrjB,OAAS,GAC1B8/B,EAAOhkB,UAAUC,IAAI,UACvB,IAGF2jB,EAAO5jB,UAAUC,IAAI,UACrB9U,OAAO0Y,MAAQ1Y,OAAO0Y,KAAK,QAAS,QAAS,CAAEC,eAAgB,kBACjE,CAIA,OAFA2f,EAAcnjB,SAASsjB,GAAWA,EAAO7pB,iBAAiB,QAAS2pB,KAE5D,KACLD,EAAcnjB,SAASsjB,GAAWA,EAAO3pB,oBAAoB,QAASypB,IAAsB,CAC7F,GACA,IDpBH,MAAOv8B,IAASyV,EAAAA,EAAAA,MACVzU,EAAUhB,EAAM0V,IAAIC,EAAAA,GAAWqF,QAASmI,MAAM,MAC9C,sBAAEgW,GDNH,WACL,MAAMl1B,GAAW6N,EAAAA,GAAAA,OACX,EAAE4E,EAAC,GAAEqmB,IAAO77B,EAAAA,EAAAA,GAAkB+C,EAAS8N,QACvCirB,EAAmBv0B,EAAAA,QAAa,IAC/B0wB,EAAuB8D,GAA4Bx0B,EAAAA,UAAe,GAiEzE,OA/DAA,EAAAA,WAAgB,KACd,MAAMy0B,EAAsB3qB,SAAS4qB,uBAAuBhB,IACtDiB,EAAsB7qB,SAAS4qB,uBAAuBjB,IACtDmB,EAAkB,IAAIC,gBAqD5B,OAnDIN,EAAiB1lB,UACf4lB,EAAoBngC,OAAS,GAAGkgC,GAAyB,GAE7D5G,MAAMpyB,EAASC,SAAWD,EAAS8N,OAAQ,CAAEwrB,OAAQF,EAAgBE,SAClEC,MAAMpH,GAAaA,EAASzC,SAC5B6J,MAAM7J,IACL,MAAM8J,GAAa,IAAIC,WAAYC,gBAAgBhK,EAAM,aAGzD,GAAIuJ,EAAoBngC,OAAS,EAAG,CAClC,MAAM6gC,EAA0BxlB,MAAMgM,KAAK8Y,GACrCW,EAA6BzlB,MAAMgM,KACvCqZ,EAAWN,uBAAuBhB,MAGhC0B,aAA0B,EAA1BA,EAA4B9gC,UAAW6gC,EAAwB7gC,OACjE6gC,EAAwBzkB,SAAQ,CAACP,EAASpJ,KACxCoJ,EAAQklB,OAAS,IAAMb,GAAyB,GAChDrkB,EAAQmlB,IAAMF,EAA2BruB,GAAOuuB,GAAG,IAGrDd,GAAyB,EAE7B,CAGA,MAAMe,EAAwC5lB,MAAMgM,KAAKgZ,GACnDa,EAA2C7lB,MAAMgM,KACrDqZ,EAAWN,uBAAuBjB,MAGhC+B,aAAwC,EAAxCA,EAA0ClhC,UAAWihC,EAAsCjhC,QAC7FihC,EAAsC7kB,SAAQ,CAACP,EAASpJ,KACtDoJ,EAAQ6Z,UAAYwL,EAAyCzuB,GAAOijB,SAAS,IAKjF,MAAMyL,EAAkCT,EAAWpqB,eAAe+oB,IAC9D8B,SAAAA,EAAiCzgB,QAAQ0gB,uBAC3C70B,eAAe80B,eAAiBF,EAAgCzgB,QAAQ0gB,qBAC1E,IAEDE,OAAOC,IACNrB,GAAyB,GACR,eAAbqB,EAAI31B,MACN41B,OAAOC,iBAAiBF,EAC1B,KAGNtB,EAAiB1lB,SAAU,EACpB,KACL+lB,EAAgBoB,OAAO,CACxB,GAGA,CAAC/nB,EAAGqmB,IAEA,CAAE5D,wBACX,CChEoCuF,GAElC,OAAO19B,EAAQ+B,KAAI,CAACyB,EAAQgL,KAC1BvG,EAAAA,EAAAA,KAACuM,EAAAA,EAAoB,CAAchR,OAAQA,EAAQgL,MAAOA,EAAMzF,UAC9Dd,EAAAA,EAAAA,KAAC0yB,GAAqB,CAACxC,sBAAuBA,KADrB30B,IAI/B,C,qGEVO,SAASqS,EACd8nB,GAKA,IADAjoB,EAAC5Z,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGuY,EAAAA,GAAUvT,EAEd,MAAM,YAAEwQ,GAAgBC,SAASqsB,MAC3B,UAAEn5B,EAAS,YAAEC,EAAW,UAAEC,GAAcg5B,EAAan5B,OAAO,GAC5Dq5B,EAAgBvsB,EAAc,GACpC,IAAIrQ,EAAQ,IACRmD,EAAW,EACXC,EAAY,EACZy5B,EAAmB,EACvB,MAAMC,EACJJ,EAAah6B,6BAA8Bq6B,EAAAA,EAAAA,IAAyBL,EAAah6B,4BAEnF,OAAQ+R,GACN,KAAKrB,EAAAA,GAAU4pB,GACbH,EAAmB,EACnB15B,EAAW,GACPK,GAAaC,GAAe4M,EAAc,QAC5CjN,EAAY,GAEd,MACF,KAAKgQ,EAAAA,GAAU6pB,GACbJ,EAAmB,EACnB,MACF,KAAKzpB,EAAAA,GAAU8pB,GACbL,EAAmB,EACfr5B,GAAaC,GAAe4M,GAAe,OAC7ClN,EAAW,GAEb,MACF,KAAKiQ,EAAAA,GAAU+pB,GACbN,EAAmB,EACnB15B,EAAW,EACXC,EAAYiN,GAAe,KAAO,EAAI,EACtC,MACF,KAAK+C,EAAAA,GAAUgqB,IACbp9B,EAAQ,KACRoD,EAAY,EACZ,MACF,KAAKgQ,EAAAA,GAAUiqB,IACf,KAAKjqB,EAAAA,GAAUkqB,IACbt9B,EAAQ,KACR,MACF,KAAKoT,EAAAA,GAAUoM,EACbxf,EAAQ,KACR,MACF,KAAKoT,EAAAA,GAAUmqB,GACf,KAAKnqB,EAAAA,GAAUoqB,GACbx9B,EAAQ,KACR,MACF,KAAKoT,EAAAA,GAAUvT,EACbG,EAAQ,KACR,MACF,KAAKoT,EAAAA,GAAUqqB,EACf,KAAKrqB,EAAAA,GAAU0N,EACb9gB,EAAQ,IAIZ,OAAQyU,GACN,KAAKrB,EAAAA,GAAU4pB,GACf,KAAK5pB,EAAAA,GAAU6pB,GACf,KAAK7pB,EAAAA,GAAU8pB,GACf,KAAK9pB,EAAAA,GAAU+pB,GACb,MAAMnQ,EAAc,CAClB6P,mBACAa,mBAAoBv6B,EAAW,EAAIC,EACnCu6B,eAAgBl6B,EAChBm6B,aAAcp6B,GAEhBxD,GAAQ69B,EAAAA,EAAAA,IAAuB,IAC1B7Q,EACH8Q,SAAUlB,EACVmB,cAAer6B,IACds6B,qBAuBP,OAlBIlB,IAAsB98B,EAAQ,MAG9B48B,GAAiB58B,IACnBA,EAAQhF,KAAKsB,IAAI,IAAKsgC,GAClBnoB,IAAMrB,EAAAA,GAAUvT,IAClBsD,EAAW,EACXC,EAAY,EACZpD,EAAQ,OAKR08B,EAAalrB,MAAQsrB,KACvB35B,EAAWu5B,EAAav5B,SACxBC,EAAYs5B,EAAat5B,WAGpB,CACLpD,QACAmD,WACAC,YAEJ,CAEO,SAASiR,IAA2B,IAAAka,EAAA0P,EACzC,MAAM,WAAEvuB,IAAeO,EAAAA,EAAAA,MACjB,iBAAEwH,IAAqBO,EAAAA,EAAAA,MACvBkmB,EAAsB13B,EAAAA,SAAc,SAAA23B,EAAA,OAAyC,QAAzCA,EAAM1mB,aAAgB,EAAhBA,EAAkBlU,SAASgd,MAAM,UAAE,IAAA4d,EAAAA,EAAI,IAAI,GAAE,CAAC1mB,IACxFQ,GAAaC,EAAAA,EAAAA,IAAcgmB,EAAqB,CAAE9lB,gBAAiB,CAAC,WACpE1F,GAAQwF,EAAAA,EAAAA,IAAiC,QAApBqW,EAACtW,aAAU,EAAVA,EAAYvF,eAAO,IAAA6b,EAAAA,EAAI,KAAM,CAAEnW,gBAAiB,CAAC,SAAU,YAAa,gBAC9FgmB,EAAS3mB,SAAsB,QAANwmB,EAAhBxmB,EAAkBjG,YAAI,IAAAysB,OAAA,EAAtBA,EAAwBh3B,GAEvCT,EAAAA,WAAgB,KACd,MAAMmE,EAAYyzB,EAAsC,KAA7B3mB,aAAgB,EAAhBA,EAAkB9M,SACvCnI,EAAYkQ,aAAK,EAALA,EAAOlQ,UACzB,GAAIiV,GAAoBjV,GAAamI,EAAU,CAC7C,MAAM,MAAE3K,EAAK,SAAEmD,EAAQ,UAAEC,GAAcwR,EAAyB6C,EAAiB4mB,WAAY77B,GACvF87B,EAAcj6B,KAAKC,MAAMD,KAAKkD,UAAUoD,IAC9C2zB,EAAYC,cAAcC,OAAOr7B,SAAWA,EAC5Cm7B,EAAYG,kBAAkBD,OAAOr7B,SAAWA,EAChDm7B,EAAYC,cAAcC,OAAOp7B,UAAYA,EAC7Ck7B,EAAYG,kBAAkBD,OAAOp7B,UAAYA,EACjDqU,EAAiBuI,iBAAiB,CAAEhgB,QAAO2K,SAAU2zB,GACvD,IAGC,CAAC5rB,aAAK,EAALA,EAAOlP,UAAWkP,aAAK,EAALA,EAAOjP,YAAaiP,aAAK,EAALA,EAAOlQ,UAAW47B,EAAQ1uB,GACtE,C,mDC5IA,MAAMgvB,GAAuB,IAAAC,eAAc,MAErCC,EAAe,CACnBC,UAAU,EACV34B,MAAO,MAET,MAAMoR,UAAsB,EAAAmF,UAC1B,WAAAC,CAAY9V,GACVwY,MAAMxY,GACN0D,KAAKw0B,mBAAqBx0B,KAAKw0B,mBAAmBzb,KAAK/Y,MACvDA,KAAKrM,MAAQ2gC,CACf,CACA,+BAAOG,CAAyB74B,GAC9B,MAAO,CACL24B,UAAU,EACV34B,QAEJ,CACA,kBAAA44B,GACE,MAAM,MACJ54B,GACEoE,KAAKrM,MACT,GAAc,OAAViI,EAAgB,CAElB,IADA,IAAI84B,EAAqBC,EAChBC,EAAOrkC,UAAUC,OAAQqkC,EAAO,IAAIhpB,MAAM+oB,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQvkC,UAAUukC,GAEsC,QAA9DJ,GAAuBC,EAAc30B,KAAK1D,OAAOy4B,eAA6C,IAAxBL,GAA0CA,EAAoB5xB,KAAK6xB,EAAa,CACrJE,OACAG,OAAQ,mBAEVh1B,KAAK+V,SAASue,EAChB,CACF,CACA,iBAAAW,CAAkBr5B,EAAO2R,GACvB,IAAI2nB,EAAqBC,EACuC,QAA/DD,GAAuBC,EAAen1B,KAAK1D,OAAO2Q,eAA6C,IAAxBioB,GAA0CA,EAAoBpyB,KAAKqyB,EAAcv5B,EAAO2R,EAClK,CACA,kBAAAuY,CAAmBsP,EAAWC,GAC5B,MAAM,SACJd,GACEv0B,KAAKrM,OACH,UACJ2hC,GACEt1B,KAAK1D,MAQP,IAAIi5B,EAAsBC,EADxBjB,GAAgC,OAApBc,EAAUz5B,OA8C9B,WACE,IAAIzG,EAAI5E,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GACxE6E,EAAI7E,UAAUC,OAAS,QAAsBC,IAAjBF,UAAU,GAAmBA,UAAU,GAAK,GAC5E,OAAO4E,EAAE3E,SAAW4E,EAAE5E,QAAU2E,EAAEwsB,MAAK,CAAC3e,EAAMC,KAAWrR,OAAO6jC,GAAGzyB,EAAM5N,EAAE6N,KAC7E,CAlDgDyyB,CAAgBN,EAAUE,UAAWA,KAEd,QAAhEC,GAAwBC,EAAex1B,KAAK1D,OAAOy4B,eAA8C,IAAzBQ,GAA2CA,EAAqBzyB,KAAK0yB,EAAc,CAC1JG,KAAML,EACN3wB,KAAMywB,EAAUE,UAChBN,OAAQ,SAEVh1B,KAAK+V,SAASue,GAElB,CACA,MAAAx0B,GACE,MAAM,SACJtC,EAAQ,eACRo4B,EAAc,kBACdC,EAAiB,SACjB3iC,GACE8M,KAAK1D,OACH,SACJi4B,EAAQ,MACR34B,GACEoE,KAAKrM,MACT,IAAImiC,EAAgBt4B,EACpB,GAAI+2B,EAAU,CACZ,MAAMj4B,EAAQ,CACZV,QACA44B,mBAAoBx0B,KAAKw0B,oBAE3B,GAA8B,mBAAnBoB,EACTE,EAAgBF,EAAet5B,QAC1B,GAAIu5B,EACTC,GAAgB,IAAAC,eAAcF,EAAmBv5B,OAC5C,IAAiB,OAAbpJ,KAAqB,IAAA8iC,gBAAe9iC,GAG7C,MAAM0I,EAFNk6B,EAAgB5iC,CAGlB,CACF,CACA,OAAO,IAAA6iC,eAAc3B,EAAqBpzB,SAAU,CAClD1O,MAAO,CACLiiC,WACA34B,QACA44B,mBAAoBx0B,KAAKw0B,qBAE1BsB,EACL,E","sources":["webpack://@finviz/website/./js/app/backtest/utils.tsx","webpack://@finviz/website/./js/app/bubbles/selects.ts","webpack://@finviz/website/./js/app/bubbles/utils.ts","webpack://@finviz/website/./js/app/shared/chartLayoutConfig.ts","webpack://@finviz/website/./js/app/shared/components/Ads.tsx","webpack://@finviz/website/./js/app/shared/getInitChartConfig.ts","webpack://@finviz/website/./js/main/components/ChipSwitch.tsx","webpack://@finviz/website/./js/main/components/chart/CartesianGrid.tsx","webpack://@finviz/website/./js/main/components/chart/XAxis.tsx","webpack://@finviz/website/./js/main/components/chart/YAxis.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableContext.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTableRow.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsTable.tsx","webpack://@finviz/website/./js/main/components/financials-table/FinancialsWidget.tsx","webpack://@finviz/website/./js/main/components/financials-table/utils.ts","webpack://@finviz/website/./js/main/hooks/use-check-non-idea-chart-missing-config.ts","webpack://@finviz/website/./js/main/hooks/use-window-size.tsx","webpack://@finviz/website/./js/main/modules/charts/util.ts","webpack://@finviz/website/./js/main/modules/quote/QuoteContext.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteChart.tsx","webpack://@finviz/website/./js/main/modules/quote/components/Portal.tsx","webpack://@finviz/website/./js/main/hooks/useToggleStaticElement.ts","webpack://@finviz/website/./js/main/modules/quote/components/Navigation/QuoteLinksWrapper.tsx","webpack://@finviz/website/./js/main/modules/quote/hooks/use-chart-timeframe-path-watch.ts","webpack://@finviz/website/./js/main/modules/quote/components/Navigation/QuoteLinkComponent.tsx","webpack://@finviz/website/./js/main/modules/quote/components/Navigation/CreateAlertLink.tsx","webpack://@finviz/website/./js/main/modules/quote/components/Navigation/SaveToPortfolioLink.tsx","webpack://@finviz/website/./js/main/modules/quote/Navigation.tsx","webpack://@finviz/website/./js/main/modules/quote/components/ComparePerformance.tsx","webpack://@finviz/website/./js/main/components/chart/Bar.tsx","webpack://@finviz/website/./js/main/components/chart/ChartBox.tsx","webpack://@finviz/website/./js/main/components/chart/ChartWrapper.tsx","webpack://@finviz/website/./js/main/components/chart/Line.tsx","webpack://@finviz/website/./js/main/components/chart/Cursor.tsx","webpack://@finviz/website/./js/main/components/chart/Tooltip.tsx","webpack://@finviz/website/./js/main/modules/quote/components/FundFlowsChart.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/startOfMonth/index.js","webpack://@finviz/website/./js/main/modules/quote/components/InsiderTradingChart/constants.ts","webpack://@finviz/website/./js/main/modules/quote/components/InsiderTradingChart/ChartTooltip.tsx","webpack://@finviz/website/./js/main/modules/quote/components/InsiderTradingChart/InsiderVolumeBar.tsx","webpack://@finviz/website/./js/main/modules/quote/components/InsiderTradingChart/InsiderTradingVolumeChart.tsx","webpack://@finviz/website/./js/main/modules/quote/components/InsiderTradingChart/utils.ts","webpack://@finviz/website/./js/main/modules/quote/components/QuotePrice.tsx","webpack://@finviz/website/./js/main/modules/quote/components/Price/hooks.ts","webpack://@finviz/website/./js/main/modules/quote/components/Price/QuoteHeader.tsx","webpack://@finviz/website/../node_modules/date-fns/esm/isBefore/index.js","webpack://@finviz/website/./js/main/modules/quote/components/barChart.tsx","webpack://@finviz/website/./js/main/modules/quote/components/Statements/constants.ts","webpack://@finviz/website/./js/main/modules/quote/components/Statements/statements.tsx","webpack://@finviz/website/./js/main/modules/quote/components/StaticChartHeader.tsx","webpack://@finviz/website/./js/main/modules/quote/components/fundamentalCharts.tsx","webpack://@finviz/website/./js/main/modules/quote/etf-holdings/async-modules.ts","webpack://@finviz/website/./js/main/modules/quote/etf-holdings/index.tsx","webpack://@finviz/website/./js/main/modules/quote/PortalComponents.tsx","webpack://@finviz/website/./js/main/modules/quote/hooks/use-stock-detail-updater.tsx","webpack://@finviz/website/./js/main/modules/quote/components/QuoteSharedWrapper.tsx","webpack://@finviz/website/./js/main/modules/quote/hooks/useToggleRatings.ts","webpack://@finviz/website/./js/main/modules/quote/hooks/use-chart-layout-width-watch.ts","webpack://@finviz/website/../node_modules/react-error-boundary/dist/react-error-boundary.esm.js"],"sourcesContent":["export function round(n: number, places: number = 2) {\r\n return (+(Math.round(Number(n + 'e+' + places)) + 'e-' + places)).toFixed(places)\r\n}\r\n\r\nexport const format = {\r\n totalReturn: (totalReturn: number | string) => round(Number(totalReturn) * 100) + '%',\r\n maxDrawdown: (maxDrawdown: number | string) => round(Number(maxDrawdown) * 100) + '%',\r\n sharpeRatio: (sharpeRatio: number) => round(sharpeRatio),\r\n calmarRatio: (calmarRatio: number) => round(calmarRatio),\r\n CAGR: (CAGR: number) => round(CAGR * 100) + '%',\r\n cagr: (CAGR: number) => round(CAGR * 100) + '%',\r\n volatility: (volatility: number) => round(volatility * 100) + '%',\r\n numberOfTrades: (numberOfTrades: any) => numberOfTrades,\r\n positiveDays: (positiveDays: any) => positiveDays,\r\n negativeDays: (negativeDays: any) => negativeDays,\r\n bestMonth: (bestMonth: number) => round(bestMonth * 100) + '%',\r\n worstMonth: (worstMonth: number) => round(worstMonth * 100) + '%',\r\n}\r\n\r\nexport const figureSpace = ' '\r\n\r\nexport const BACKTEST_MIN_MAX_DATES = Object.freeze({\r\n min: new Date(1996, 5, 3),\r\n max: new Date(2023, 0, 31),\r\n})\r\n","import { SelectItem } from '../../main/components'\r\n\r\nexport type BubbleSelectOption = SelectItem & { format?: string }\r\n\r\nexport const ETF_MARKET_CAP_LABEL = 'Assets under management'\r\nexport const MARKET_CAP_VALUE = 'marketCap'\r\nexport const ETF_SECTOR_VALUE = 'financial'\r\nexport const ETF_INDUSTRY_IDS = [\r\n 'exchangetradedfund',\r\n 'closedendfunddebt',\r\n 'closedendfundequity',\r\n 'closedendfundforeign',\r\n]\r\n\r\nvar xys = [\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'ticker', label: 'Ticker' },\r\n { value: 'order', label: 'Order' },\r\n { value: MARKET_CAP_VALUE, label: 'Market Capitalization' },\r\n { value: 'dividendYield', label: 'Dividend Yield', format: '%' },\r\n { value: 'payoutRatio', label: 'Payout Ratio', format: '%' },\r\n { value: 'employees', label: 'Employees' },\r\n { value: 'income', label: 'Income' },\r\n { value: 'sales', label: 'Sales' },\r\n { value: 'epsQoQ', label: 'EPS growth Q/Q', format: '%' },\r\n { value: 'epsYoY', label: 'EPS growth this Y/Y', format: '%' },\r\n { value: 'epsYoY1', label: 'EPS growth next Y/Y', format: '%' },\r\n { value: 'eps5Years', label: 'EPS growth past 5 years', format: '%' },\r\n { value: 'estLTGrowth', label: 'EPS growth long term est.', format: '%' },\r\n { value: 'salesQoQ', label: 'Sales growth Q/Q', format: '%' },\r\n { value: 'sales5Years', label: 'Sales growth past 5 years', format: '%' },\r\n { value: 'PE', label: 'P/E' },\r\n { value: 'forwardPE', label: 'Forward P/E' },\r\n { value: 'PEG', label: 'PEG' },\r\n { value: 'PS', label: 'P/S' },\r\n { value: 'PB', label: 'P/B' },\r\n { value: 'PC', label: 'P/C' },\r\n { value: 'PFCF', label: 'P/FCF' },\r\n { value: 'roi', label: 'ROI' },\r\n { value: 'roe', label: 'ROE' },\r\n { value: 'roa', label: 'ROA' },\r\n { value: 'grossMargin', label: 'Gross Margin', format: '%' },\r\n { value: 'operMargin', label: 'Operating Margin', format: '%' },\r\n { value: 'netMargin', label: 'Profit Margin', format: '%' },\r\n { value: 'curRatio', label: 'Current Ratio' },\r\n { value: 'quickRatio', label: 'Quick Ratio' },\r\n { value: 'ltdebtEq', label: 'Long Term Debt to Equity' },\r\n { value: 'debtEq', label: 'Total Debt to Equity' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'changeOpen', label: 'Change from Open', format: '%' },\r\n { value: 'gap', label: 'Gap', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'volatility1w', label: 'Weekly Volatility', format: '%' },\r\n { value: 'volatility4w', label: 'Monthly Volatlity', format: '%' },\r\n { value: 'beta', label: 'Beta' },\r\n { value: 'low52w', label: '52-Week Low', format: '%' },\r\n { value: 'high52w', label: '52-Week High', format: '%' },\r\n { value: 'sma20', label: 'Simple Moving Average 20', format: '%' },\r\n { value: 'sma50', label: 'Simple Moving Average 50', format: '%' },\r\n { value: 'sma200', label: 'Simple Moving Average 200', format: '%' },\r\n { value: 'rsi', label: 'Relative Strength Index 14' },\r\n { value: 'insiderOwn', label: 'Insider Ownership', format: '%' },\r\n { value: 'insiderTrans', label: 'Insider Transactions', format: '%' },\r\n { value: 'instOwn', label: 'Institutional Ownership', format: '%' },\r\n { value: 'instTrans', label: 'Institutional Transactions', format: '%' },\r\n { value: 'shortInterestShare', label: 'Short Interest Share', format: '%' },\r\n { value: 'shortInterestRatio', label: 'Short Interest Ratio' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n { value: 'targetPrice', label: 'Target Price', format: '%' },\r\n]\r\n\r\nvar sizes = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n]\r\n\r\nvar colors = [\r\n { value: 'const', label: 'Constant' },\r\n { value: 'sector', label: 'Sector' },\r\n { value: 'industry', label: 'Industry' },\r\n { value: 'country', label: 'Country' },\r\n { value: 'marketCap', label: 'Market Capitalization' },\r\n { value: 'lastChange', label: 'Change', format: '%' },\r\n { value: 'perf1w', label: '1 Week Performance', format: '%' },\r\n { value: 'perf4w', label: '1 Month Performance', format: '%' },\r\n { value: 'perf13w', label: '3 Month Performance', format: '%' },\r\n { value: 'perf26w', label: '6 Month Performance', format: '%' },\r\n { value: 'perf52w', label: '1 Year Performance', format: '%' },\r\n { value: 'perfYtd', label: 'Year To Date Performance', format: '%' },\r\n { value: 'lastVolume', label: 'Volume' },\r\n { value: 'lastVolumeUsd', label: 'Volume USD' },\r\n { value: 'averageVolume', label: 'Average Volume' },\r\n { value: 'averageVolumeUsd', label: 'Average Volume USD' },\r\n { value: 'relativeVolume', label: 'Relative Volume' },\r\n { value: 'consRecom', label: 'Analyst Recommendation' },\r\n]\r\n\r\nvar indexes = [\r\n { value: 'any', label: 'Any' },\r\n { value: 'sp500', label: 'S&P 500' },\r\n { value: 'ndx', label: 'NASDAQ 100' },\r\n { value: 'dji', label: 'DJIA' },\r\n { value: 'rut', label: 'RUSSELL 2000' },\r\n]\r\n\r\nvar sectors = [\r\n { value: '', label: 'Any' },\r\n { value: 'basicmaterials', label: 'Basic Materials' },\r\n { value: 'communicationservices', label: 'Communication Services' },\r\n { value: 'consumercyclical', label: 'Consumer Cyclical' },\r\n { value: 'consumerdefensive', label: 'Consumer Defensive' },\r\n { value: 'energy', label: 'Energy' },\r\n { value: ETF_SECTOR_VALUE, label: 'Financial' },\r\n { value: 'healthcare', label: 'Healthcare' },\r\n { value: 'industrials', label: 'Industrials' },\r\n { value: 'realestate', label: 'Real Estate' },\r\n { value: 'technology', label: 'Technology' },\r\n { value: 'utilities', label: 'Utilities' },\r\n]\r\n\r\nvar industries = [\r\n { value: '', label: 'Any' },\r\n { value: 'stocksonly', label: 'Stocks only (ex-Funds)' },\r\n { value: 'exchangetradedfund', label: 'Exchange Traded Fund' },\r\n { value: 'advertisingagencies', label: 'Advertising Agencies' },\r\n { value: 'aerospacedefense', label: 'Aerospace & Defense' },\r\n { value: 'agriculturalinputs', label: 'Agricultural Inputs' },\r\n { value: 'airlines', label: 'Airlines' },\r\n { value: 'airportsairservices', label: 'Airports & Air Services' },\r\n { value: 'aluminum', label: 'Aluminum' },\r\n { value: 'apparelmanufacturing', label: 'Apparel Manufacturing' },\r\n { value: 'apparelretail', label: 'Apparel Retail' },\r\n { value: 'assetmanagement', label: 'Asset Management' },\r\n { value: 'automanufacturers', label: 'Auto Manufacturers' },\r\n { value: 'autoparts', label: 'Auto Parts' },\r\n { value: 'autotruckdealerships', label: 'Auto & Truck Dealerships' },\r\n { value: 'banksdiversified', label: 'Banks - Diversified' },\r\n { value: 'banksregional', label: 'Banks - Regional' },\r\n { value: 'beveragesbrewers', label: 'Beverages - Brewers' },\r\n { value: 'beveragesnonalcoholic', label: 'Beverages - Non-Alcoholic' },\r\n { value: 'beverageswineriesdistilleries', label: 'Beverages - Wineries & Distilleries' },\r\n { value: 'biotechnology', label: 'Biotechnology' },\r\n { value: 'broadcasting', label: 'Broadcasting' },\r\n { value: 'buildingmaterials', label: 'Building Materials' },\r\n { value: 'buildingproductsequipment', label: 'Building Products & Equipment' },\r\n { value: 'businessequipmentsupplies', label: 'Business Equipment & Supplies' },\r\n { value: 'capitalmarkets', label: 'Capital Markets' },\r\n { value: 'chemicals', label: 'Chemicals' },\r\n { value: 'closedendfunddebt', label: 'Closed-End Fund - Debt' },\r\n { value: 'closedendfundequity', label: 'Closed-End Fund - Equity' },\r\n { value: 'closedendfundforeign', label: 'Closed-End Fund - Foreign' },\r\n { value: 'cokingcoal', label: 'Coking Coal' },\r\n { value: 'communicationequipment', label: 'Communication Equipment' },\r\n { value: 'computerhardware', label: 'Computer Hardware' },\r\n { value: 'confectioners', label: 'Confectioners' },\r\n { value: 'conglomerates', label: 'Conglomerates' },\r\n { value: 'consultingservices', label: 'Consulting Services' },\r\n { value: 'consumerelectronics', label: 'Consumer Electronics' },\r\n { value: 'copper', label: 'Copper' },\r\n { value: 'creditservices', label: 'Credit Services' },\r\n { value: 'departmentstores', label: 'Department Stores' },\r\n { value: 'diagnosticsresearch', label: 'Diagnostics & Research' },\r\n { value: 'discountstores', label: 'Discount Stores' },\r\n { value: 'drugmanufacturersgeneral', label: 'Drug Manufacturers - General' },\r\n { value: 'drugmanufacturersspecialtygeneric', label: 'Drug Manufacturers - Specialty & Generic' },\r\n { value: 'educationtrainingservices', label: 'Education & Training Services' },\r\n { value: 'electricalequipmentparts', label: 'Electrical Equipment & Parts' },\r\n { value: 'electroniccomponents', label: 'Electronic Components' },\r\n { value: 'electronicgamingmultimedia', label: 'Electronic Gaming & Multimedia' },\r\n { value: 'electronicscomputerdistribution', label: 'Electronics & Computer Distribution' },\r\n { value: 'engineeringconstruction', label: 'Engineering & Construction' },\r\n { value: 'entertainment', label: 'Entertainment' },\r\n { value: 'farmheavyconstructionmachinery', label: 'Farm & Heavy Construction Machinery' },\r\n { value: 'farmproducts', label: 'Farm Products' },\r\n { value: 'financialconglomerates', label: 'Financial Conglomerates' },\r\n { value: 'financialdatastockexchanges', label: 'Financial Data & Stock Exchanges' },\r\n { value: 'fooddistribution', label: 'Food Distribution' },\r\n { value: 'footwearaccessories', label: 'Footwear & Accessories' },\r\n { value: 'furnishingsfixturesappliances', label: 'Furnishings, Fixtures & Appliances' },\r\n { value: 'gambling', label: 'Gambling' },\r\n { value: 'gold', label: 'Gold' },\r\n { value: 'grocerystores', label: 'Grocery Stores' },\r\n { value: 'healthcareplans', label: 'Healthcare Plans' },\r\n { value: 'healthinformationservices', label: 'Health Information Services' },\r\n { value: 'homeimprovementretail', label: 'Home Improvement Retail' },\r\n { value: 'householdpersonalproducts', label: 'Household & Personal Products' },\r\n { value: 'industrialdistribution', label: 'Industrial Distribution' },\r\n { value: 'informationtechnologyservices', label: 'Information Technology Services' },\r\n { value: 'infrastructureoperations', label: 'Infrastructure Operations' },\r\n { value: 'insurancebrokers', label: 'Insurance Brokers' },\r\n { value: 'insurancediversified', label: 'Insurance - Diversified' },\r\n { value: 'insurancelife', label: 'Insurance - Life' },\r\n { value: 'insurancepropertycasualty', label: 'Insurance - Property & Casualty' },\r\n { value: 'insurancereinsurance', label: 'Insurance - Reinsurance' },\r\n { value: 'insurancespecialty', label: 'Insurance - Specialty' },\r\n { value: 'integratedfreightlogistics', label: 'Integrated Freight & Logistics' },\r\n { value: 'internetcontentinformation', label: 'Internet Content & Information' },\r\n { value: 'internetretail', label: 'Internet Retail' },\r\n { value: 'leisure', label: 'Leisure' },\r\n { value: 'lodging', label: 'Lodging' },\r\n { value: 'lumberwoodproduction', label: 'Lumber & Wood Production' },\r\n { value: 'luxurygoods', label: 'Luxury Goods' },\r\n { value: 'marineshipping', label: 'Marine Shipping' },\r\n { value: 'medicalcarefacilities', label: 'Medical Care Facilities' },\r\n { value: 'medicaldevices', label: 'Medical Devices' },\r\n { value: 'medicaldistribution', label: 'Medical Distribution' },\r\n { value: 'medicalinstrumentssupplies', label: 'Medical Instruments & Supplies' },\r\n { value: 'metalfabrication', label: 'Metal Fabrication' },\r\n { value: 'mortgagefinance', label: 'Mortgage Finance' },\r\n { value: 'oilgasdrilling', label: 'Oil & Gas Drilling' },\r\n { value: 'oilgasep', label: 'Oil & Gas E&P' },\r\n { value: 'oilgasequipmentservices', label: 'Oil & Gas Equipment & Services' },\r\n { value: 'oilgasintegrated', label: 'Oil & Gas Integrated' },\r\n { value: 'oilgasmidstream', label: 'Oil & Gas Midstream' },\r\n { value: 'oilgasrefiningmarketing', label: 'Oil & Gas Refining & Marketing' },\r\n { value: 'otherindustrialmetalsmining', label: 'Other Industrial Metals & Mining' },\r\n { value: 'otherpreciousmetalsmining', label: 'Other Precious Metals & Mining' },\r\n { value: 'packagedfoods', label: 'Packaged Foods' },\r\n { value: 'packagingcontainers', label: 'Packaging & Containers' },\r\n { value: 'paperpaperproducts', label: 'Paper & Paper Products' },\r\n { value: 'personalservices', label: 'Personal Services' },\r\n { value: 'pharmaceuticalretailers', label: 'Pharmaceutical Retailers' },\r\n { value: 'pollutiontreatmentcontrols', label: 'Pollution & Treatment Controls' },\r\n { value: 'publishing', label: 'Publishing' },\r\n { value: 'railroads', label: 'Railroads' },\r\n { value: 'realestatedevelopment', label: 'Real Estate - Development' },\r\n { value: 'realestatediversified', label: 'Real Estate - Diversified' },\r\n { value: 'realestateservices', label: 'Real Estate Services' },\r\n { value: 'recreationalvehicles', label: 'Recreational Vehicles' },\r\n { value: 'reitdiversified', label: 'REIT - Diversified' },\r\n { value: 'reithealthcarefacilities', label: 'REIT - Healthcare Facilities' },\r\n { value: 'reithotelmotel', label: 'REIT - Hotel & Motel' },\r\n { value: 'reitindustrial', label: 'REIT - Industrial' },\r\n { value: 'reitmortgage', label: 'REIT - Mortgage' },\r\n { value: 'reitoffice', label: 'REIT - Office' },\r\n { value: 'reitresidential', label: 'REIT - Residential' },\r\n { value: 'reitretail', label: 'REIT - Retail' },\r\n { value: 'reitspecialty', label: 'REIT - Specialty' },\r\n { value: 'rentalleasingservices', label: 'Rental & Leasing Services' },\r\n { value: 'residentialconstruction', label: 'Residential Construction' },\r\n { value: 'resortscasinos', label: 'Resorts & Casinos' },\r\n { value: 'restaurants', label: 'Restaurants' },\r\n { value: 'scientifictechnicalinstruments', label: 'Scientific & Technical Instruments' },\r\n { value: 'securityprotectionservices', label: 'Security & Protection Services' },\r\n { value: 'semiconductorequipmentmaterials', label: 'Semiconductor Equipment & Materials' },\r\n { value: 'semiconductors', label: 'Semiconductors' },\r\n { value: 'shellcompanies', label: 'Shell Companies' },\r\n { value: 'silver', label: 'Silver' },\r\n { value: 'softwareapplication', label: 'Software - Application' },\r\n { value: 'softwareinfrastructure', label: 'Software - Infrastructure' },\r\n { value: 'solar', label: 'Solar' },\r\n { value: 'specialtybusinessservices', label: 'Specialty Business Services' },\r\n { value: 'specialtychemicals', label: 'Specialty Chemicals' },\r\n { value: 'specialtyindustrialmachinery', label: 'Specialty Industrial Machinery' },\r\n { value: 'specialtyretail', label: 'Specialty Retail' },\r\n { value: 'staffingemploymentservices', label: 'Staffing & Employment Services' },\r\n { value: 'steel', label: 'Steel' },\r\n { value: 'telecomservices', label: 'Telecom Services' },\r\n { value: 'textilemanufacturing', label: 'Textile Manufacturing' },\r\n { value: 'thermalcoal', label: 'Thermal Coal' },\r\n { value: 'tobacco', label: 'Tobacco' },\r\n { value: 'toolsaccessories', label: 'Tools & Accessories' },\r\n { value: 'travelservices', label: 'Travel Services' },\r\n { value: 'trucking', label: 'Trucking' },\r\n { value: 'uranium', label: 'Uranium' },\r\n { value: 'utilitiesdiversified', label: 'Utilities - Diversified' },\r\n { value: 'utilitiesindependentpowerproducers', label: 'Utilities - Independent Power Producers' },\r\n { value: 'utilitiesregulatedelectric', label: 'Utilities - Regulated Electric' },\r\n { value: 'utilitiesregulatedgas', label: 'Utilities - Regulated Gas' },\r\n { value: 'utilitiesregulatedwater', label: 'Utilities - Regulated Water' },\r\n { value: 'utilitiesrenewable', label: 'Utilities - Renewable' },\r\n { value: 'wastemanagement', label: 'Waste Management' },\r\n]\r\n\r\nvar marketCaps = [\r\n { value: '', label: 'Any' },\r\n { value: 'mega', label: 'Mega ($200bln and more)' },\r\n { value: 'large', label: 'Large ($10bln to $200bln)' },\r\n { value: 'mid', label: 'Mid ($2bln to $10bln)' },\r\n { value: 'small', label: 'Small ($300mln to $2bln)' },\r\n { value: 'micro', label: 'Micro ($50mln to $300mln)' },\r\n { value: 'nano', label: 'Nano (under $50mln)' },\r\n { value: 'largeover', label: '+Large (over $10bln)' },\r\n { value: 'midover', label: '+Mid (over $2bln)' },\r\n { value: 'smallover', label: '+Small (over $300mln)' },\r\n { value: 'microover', label: '+Micro (over $50mln)' },\r\n { value: 'largeunder', label: '-Large (under $200bln)' },\r\n { value: 'midunder', label: '-Mid (under $10bln)' },\r\n { value: 'smallunder', label: '-Small (under $2bln)' },\r\n { value: 'microunder', label: '-Micro (under $300mln)' },\r\n]\r\n\r\nvar averageVolumes = [\r\n { value: '', label: 'Any' },\r\n { value: 'u50', label: 'Under 50K' },\r\n { value: 'u100', label: 'Under 100K' },\r\n { value: 'u500', label: 'Under 500K' },\r\n { value: 'u750', label: 'Under 750K' },\r\n { value: 'u1000', label: 'Under 1M' },\r\n { value: 'o50', label: 'Over 50K' },\r\n { value: 'o100', label: 'Over 100K' },\r\n { value: 'o200', label: 'Over 200K' },\r\n { value: 'o300', label: 'Over 300K' },\r\n { value: 'o400', label: 'Over 400K' },\r\n { value: 'o500', label: 'Over 500K' },\r\n { value: 'o750', label: 'Over 750K' },\r\n { value: 'o1000', label: 'Over 1M' },\r\n { value: 'o2000', label: 'Over 2M' },\r\n { value: '100to500', label: '100K to 500K' },\r\n { value: '100to1000', label: '100K to 1M' },\r\n { value: '500to1000', label: '500K to 1M' },\r\n { value: '500to10000', label: '500K to 10M' },\r\n]\r\n\r\nexport { xys, sizes, colors, indexes, sectors, industries, marketCaps, averageVolumes }\r\n","import * as d3 from 'd3'\r\n\r\nimport { ScaleId } from '../maps/types'\r\nimport { decodeQueryString as decode, encodeQueryString } from '../queryString'\r\nimport { GradientDefinition, bubbleGradients } from '../shared/gradients'\r\nimport {\r\n BubbleSelectOption,\r\n averageVolumes,\r\n colors,\r\n indexes,\r\n industries,\r\n marketCaps,\r\n sectors,\r\n sizes,\r\n xys,\r\n} from './selects'\r\nimport { BubbleNode } from './types'\r\n\r\nconst DEFAULT_COLOR_SCALE = [\r\n '#ff4146',\r\n '#ea580c',\r\n '#ff9300',\r\n '#84cc16',\r\n '#34aa00',\r\n '#00d16d',\r\n '#14b8a6',\r\n '#18a3e0',\r\n '#5963d1',\r\n '#4f46e5',\r\n '#9425c2',\r\n '#c026d3',\r\n '#ff80ff',\r\n '#ff5888',\r\n '#ffe100',\r\n]\r\n\r\nfunction getValueWithFallback(values: BubbleSelectOption[], value: string | undefined, fallback: string) {\r\n const v = values.find((v) => v.value === value)\r\n\r\n return v?.value ?? fallback\r\n}\r\n\r\nfunction getDefaultValues(query: Record = {}, extendedFilters: boolean = false) {\r\n let state: Record = {\r\n x: getValueWithFallback(xys, query.x, 'sector'),\r\n y: getValueWithFallback(xys, query.y, 'lastChange'),\r\n size: getValueWithFallback(sizes, query.size, 'marketCap'),\r\n color: getValueWithFallback(colors, query.color, 'sector'),\r\n idx: getValueWithFallback(indexes, query.idx, 'sp500'),\r\n rangeX: query.rangeX ?? '',\r\n rangeY: query.rangeY ?? '',\r\n }\r\n\r\n if (extendedFilters) {\r\n state = {\r\n ...state,\r\n sec: getValueWithFallback(sectors, query.sec, ''),\r\n ind: getValueWithFallback(industries, query.ind, ''),\r\n cap: getValueWithFallback(marketCaps, query.cap, ''),\r\n sh_avgvol: getValueWithFallback(averageVolumes, query.sh_avgvol, ''),\r\n tickers: query.tickers ?? '',\r\n excludeTickers: query.excludeTickers ?? '',\r\n }\r\n }\r\n\r\n return state\r\n}\r\n\r\nfunction decodeQueryString(extendedFilters?: boolean) {\r\n return getDefaultValues(decode(), extendedFilters)\r\n}\r\n\r\nvar percentile = function (arr: number[], excelPercentile: number) {\r\n var sequence = arr.concat().sort(function (a, b) {\r\n return a - b\r\n })\r\n var N = sequence.length\r\n var n = (N - 1) * excelPercentile + 1\r\n\r\n if (n === 1) {\r\n return sequence[0]\r\n } else if (n === N) {\r\n return sequence[N - 1]\r\n } else {\r\n var k = ~~n\r\n var d = n - k\r\n return sequence[k - 1] + d * (sequence[k] - sequence[k - 1])\r\n }\r\n}\r\n\r\nvar getXScale = function (data: BubbleNode[], width: number) {\r\n var x = d3\r\n .scaleLinear()\r\n .range([0, width])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.x) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n x.domain([x.domain()[0] * 0.9, x.domain()[0] * 1.1]).nice(10)\r\n }\r\n return x\r\n}\r\n\r\nvar getYScale = function (data: BubbleNode[], height: number) {\r\n var y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.y) as [number, number])\r\n .nice(10)\r\n if (data.length === 1) {\r\n y.domain([y.domain()[0] * 0.9, y.domain()[0] * 1.1]).nice(10)\r\n }\r\n return y\r\n}\r\n\r\nvar _colorScales: Record = {}\r\nfunction getColorScale(data: BubbleNode[], colorOption: string, colorScale = DEFAULT_COLOR_SCALE) {\r\n if (_colorScales[colorOption]) {\r\n return _colorScales[colorOption]\r\n }\r\n\r\n let c: any\r\n let colors: number[]\r\n let min: number\r\n let max: number\r\n let gradient: GradientDefinition\r\n let linearScale: d3.ScaleLinear\r\n switch (colorOption) {\r\n case 'exchange':\r\n case 'sector':\r\n case 'industry':\r\n case 'country':\r\n c = d3.scaleOrdinal().range(colorScale)\r\n break\r\n case 'marketCap':\r\n case 'averageVolume':\r\n case 'relativeVolume':\r\n case 'lastVolume':\r\n case 'averageVolumeUsd':\r\n case 'lastVolumeUsd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n gradient = bubbleGradients['_relvol']\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'lastChange':\r\n case 'perf1w':\r\n case 'perf4w':\r\n case 'perf13w':\r\n case 'perf26w':\r\n case 'perf52w':\r\n case 'perfYtd':\r\n colors = data.map((d) => Number(d.color)).filter(Number.isFinite)\r\n\r\n min = percentile(colors, 0.05)\r\n max = percentile(colors, 0.95)\r\n max = Math.max(Math.abs(min), Math.abs(max))\r\n min = -max\r\n\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d > max) d = max\r\n if (d < min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'consRecom':\r\n min = 5\r\n max = 1\r\n gradient = bubbleGradients[ScaleId.DayPerf]\r\n linearScale = d3\r\n .scaleLinear()\r\n .domain([min, max])\r\n .range([0, gradient.colors.length - 1])\r\n c = (d?: number) => {\r\n if (typeof d === 'undefined' || d === null) {\r\n return gradient.nullColor\r\n }\r\n if (d < max) d = max\r\n if (d > min) d = min\r\n var i = Math.round(linearScale(d))\r\n return gradient.colors[i]\r\n }\r\n c.domain = () => [min, max]\r\n break\r\n case 'const':\r\n default:\r\n c = function () {\r\n return '#18a3e0'\r\n }\r\n c.domain = () => ['Constant']\r\n break\r\n }\r\n\r\n if (data.length > 0) {\r\n _colorScales[colorOption] = c\r\n }\r\n return c\r\n}\r\n\r\nvar getSizeScale = function (data: BubbleNode[]) {\r\n var r = d3\r\n .scaleSqrt()\r\n .range([0, 40])\r\n .domain(d3.extent(data, (d: BubbleNode) => d.size) as [number, number])\r\n .nice(10)\r\n\r\n if (r.domain()[0] === 1 && r.domain()[1] === 1) {\r\n r.domain([0, 50])\r\n }\r\n return r\r\n}\r\n\r\nvar getScales = function (\r\n data: BubbleNode[],\r\n width: number,\r\n height: number,\r\n colorOption: string,\r\n colorScale?: string[]\r\n) {\r\n return {\r\n x: getXScale(data, width),\r\n y: getYScale(data, height),\r\n r: getSizeScale(data),\r\n c: getColorScale(data, colorOption, colorScale),\r\n }\r\n}\r\n\r\nfunction generatePresetUrl(presetConfig: Record, baseQuery?: URLSearchParams) {\r\n const query = encodeQueryString({ ...Object.fromEntries(baseQuery ?? []), ...presetConfig })\r\n\r\n return `${window.location.pathname}?${query}`\r\n}\r\n\r\nfunction formatValue(value: number | string, format?: string, finiteFormatting?: boolean) {\r\n if (finiteFormatting && !Number.isFinite(value)) {\r\n return '—'\r\n }\r\n\r\n if (typeof value === 'number') {\r\n const absValue = Math.abs(value)\r\n\r\n if (absValue < 1000) {\r\n value = value.toFixed(2)\r\n } else if (absValue < 1000 * 1000) {\r\n value = (value / 1000).toFixed(2) + 'K'\r\n } else if (absValue < 1000 * 1000 * 1000) {\r\n value = (value / 1000000).toFixed(2) + 'M'\r\n } else {\r\n value = (value / 1000000000).toFixed(2) + 'B'\r\n }\r\n }\r\n\r\n if (format === '%') {\r\n value += '%'\r\n }\r\n\r\n return value\r\n}\r\n\r\nexport {\r\n getDefaultValues,\r\n encodeQueryString,\r\n decodeQueryString,\r\n percentile,\r\n getXScale,\r\n getYScale,\r\n getColorScale,\r\n getSizeScale,\r\n getScales,\r\n generatePresetUrl,\r\n formatValue,\r\n}\r\n","import { SpecificChartFunctionality } from '../../main/constants'\r\nimport { ChartConfigChartPaneElement, Instrument, LayoutType, ScaleType, TIMEFRAME, Theme } from '../charts-lib'\r\nimport { getParsedCookies } from './cookie'\r\n\r\ninterface PaneElementProps extends ChartConfigChartPaneElement {\r\n label?: string\r\n fromDate?: string\r\n toDate?: string\r\n min?: number\r\n tickers: string[]\r\n}\r\n\r\ninterface StaticChartConfigProps {\r\n width?: number\r\n height?: number\r\n ticker: string\r\n timeframe: TIMEFRAME\r\n paneElements: PaneElementProps[]\r\n specificChartFunctionality?: SpecificChartFunctionality\r\n colorsOverride?: Array\r\n theme?: Theme\r\n colors?: ReturnType\r\n refreshData?: boolean\r\n}\r\n\r\nexport function getStaticChartConfig({\r\n width = 800,\r\n height = 400,\r\n ticker,\r\n timeframe,\r\n paneElements,\r\n specificChartFunctionality = SpecificChartFunctionality.default,\r\n colorsOverride,\r\n theme,\r\n colors = getCustomColorsFromCookies(),\r\n refreshData = false,\r\n}: StaticChartConfigProps) {\r\n return {\r\n layout: LayoutType['1h1v'],\r\n width,\r\n height,\r\n barWidth: 1,\r\n barMargin: 0,\r\n scrollable: false,\r\n editable: false,\r\n specificChartFunctionality,\r\n colorsOverride,\r\n theme,\r\n colors,\r\n charts: [\r\n {\r\n width: 0,\r\n premarket: false,\r\n aftermarket: false,\r\n dateRange: null,\r\n height,\r\n timeframe,\r\n scale: ScaleType.Linear,\r\n ticker: ticker,\r\n leftOffset: 0,\r\n instrument: Instrument.Stock,\r\n refreshData,\r\n stretch: true,\r\n panes: [\r\n {\r\n height,\r\n elements: paneElements,\r\n },\r\n ],\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function getCustomColorsFromCookies() {\r\n try {\r\n return JSON.parse(getParsedCookies('customColors') as string)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport * as tracking from '../tracking'\r\n\r\nexport const IC_PUBLISHER_ID = 'df0d0d52-cc7f-11e8-82a5-0abbb61c4a6a'\r\n\r\nenum AdTagName {\r\n IC_TickerInContent = 'IC_D_3x3',\r\n IC_MapsLeftRail = 'IC_D_125x125',\r\n IC_Statements = 'IC_D_300x60',\r\n IC_Groups = 'IC_D_300x250',\r\n}\r\n\r\nconst tagDefinition = {\r\n [AdTagName.IC_TickerInContent]: { placements: 3, style: { width: 970, minHeight: 250 } },\r\n [AdTagName.IC_MapsLeftRail]: { placements: 2, style: { width: 125, minHeight: 125 } },\r\n [AdTagName.IC_Statements]: { placements: 1, style: { width: 300, minHeight: 60 } },\r\n [AdTagName.IC_Groups]: { placements: 1, style: { width: 336, minHeight: 280 } },\r\n}\r\n\r\nconst hasInvestingChannelAds = tracking.getAdsProvider() === tracking.AdsProvider.InvestingChannel\r\n\r\n/**\r\n * Get create/destroy methods to control ads insertion\r\n */\r\nexport function getInvestingChannelPage() {\r\n var page: ICPageReturn\r\n\r\n function create() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n let config = window['FINVIZ_IC_UAT_CONFIG'] ?? {}\r\n page = window.InvestingChannel?.UAT.Run(IC_PUBLISHER_ID, config)\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n function destroy() {\r\n try {\r\n if (hasInvestingChannelAds) {\r\n window.InvestingChannelQueue?.push(() => {\r\n page?.destroy()\r\n })\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n return { create, destroy }\r\n}\r\n\r\n/**\r\n * Hook which recreates ads on deps change (SPA navigation,…)\r\n */\r\nexport function useInvestingChannelAds(deps: unknown[] = []) {\r\n React.useLayoutEffect(() => {\r\n const page = getInvestingChannelPage()\r\n\r\n page.create()\r\n\r\n return () => page.destroy()\r\n // eslint cannot statically check the dependencies and complains about it\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps)\r\n\r\n return hasInvestingChannelAds\r\n}\r\n\r\ninterface AdTagProps extends Omit, 'name'> {\r\n /**\r\n * Name of the ad tag\r\n */\r\n name: keyof typeof AdTagName\r\n\r\n /**\r\n * Manually set the placement position for this tag\r\n *\r\n * @default 1\r\n */\r\n position?: number\r\n\r\n /**\r\n * Additional class names for the wrapper div\r\n */\r\n className?: string\r\n}\r\n\r\nexport function AdTag({ name, position = 1, ...props }: AdTagProps) {\r\n const tagName = AdTagName[name]\r\n const tagProps = tagDefinition[tagName]\r\n const placementName = `${tagName}_${Math.min(Math.max(position, 1), tagProps.placements)}`\r\n\r\n if (!hasInvestingChannelAds) return null\r\n\r\n return
\r\n}\r\n","import { type RootChartConfigObject, Utils, convertTa } from '../charts-lib'\r\n\r\nexport function getInitChartConfig(initialConfig: RootChartConfigObject, initialTA = FinvizSettings.TA) {\r\n const config: RootChartConfigObject = JSON.parse(JSON.stringify(initialConfig))\r\n\r\n config.scrollable = false\r\n if (FinvizSettings.hasUserPremium) {\r\n config.scrollable = config.editable || !Utils.isMobile()\r\n }\r\n\r\n if (initialTA) {\r\n const COTs = FinvizSettings.COTs\r\n convertTa.mergeChartAndTAConfig(config, initialTA, COTs ? { COTs } : undefined)\r\n }\r\n\r\n return config\r\n}\r\n","import classnames from 'classnames'\r\nimport * as React from 'react'\r\n\r\nimport { Button, ButtonComponentProps, ButtonProps } from './button'\r\nimport { Paragraph } from './typography'\r\n\r\ninterface Props {\r\n children: (React.ReactElement | null)[]\r\n label?: string\r\n size?: ButtonProps['size']\r\n rounding?: ButtonProps['rounding']\r\n}\r\n\r\nexport function ChipSwitch({ children, label, size, rounding }: Props) {\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n\r\n {React.Children.map(children, (child: React.ReactElement | null) => {\r\n if (React.isValidElement(child) && child.type === Button) {\r\n return React.cloneElement(child, {\r\n size,\r\n rounding,\r\n theme: child.props.theme ?? 'chipTransparent',\r\n className: classnames(child.props.className, {\r\n // @todo - these style should be applied globally onto all chipTransparent buttons\r\n '!text-gray-600 dark:!text-gray-400': !child.props.active,\r\n '!text-gray-800 dark:!text-white': child.props.active,\r\n }),\r\n })\r\n }\r\n\r\n return child\r\n })}\r\n
\r\n )\r\n}\r\n\r\nexport const ChipSwitchButton = Button\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { CartesianGrid as RechartsCartesianGrid } from 'recharts'\r\n\r\nexport function CartesianGrid({\r\n vertical = false,\r\n ...props\r\n}: React.PropsWithoutRef>) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nCartesianGrid.displayName = RechartsCartesianGrid.displayName\r\n","import { format } from 'date-fns'\r\nimport { XAxis as RechartsXAxis } from 'recharts'\r\n\r\nimport { getDate } from '../../../app/header/utils'\r\n\r\nexport const DATE_FORMAT_MMMdd = 'MMM dd'\r\n\r\nconst TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 400, // Different from YAxis\r\n fill: '',\r\n}\r\n\r\nexport function dateAxisFormatter({\r\n value,\r\n outFormat,\r\n parseAsNY = true,\r\n}: {\r\n value: any\r\n outFormat: string\r\n parseAsNY?: boolean\r\n}) {\r\n if (!Number.isFinite(new Date(value).getTime())) return ''\r\n\r\n const date = parseAsNY ? getDate(value) : new Date(value)\r\n return format(date, outFormat)\r\n}\r\n\r\nexport class XAxis extends RechartsXAxis {\r\n static defaultProps = {\r\n ...RechartsXAxis.defaultProps,\r\n className: 'fill-gray-500 dark:fill-gray-300',\r\n tickLine: false,\r\n axisLine: false,\r\n dy: 5,\r\n tick: TICK_STYLE,\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { YAxis as RechartsYAxis } from 'recharts'\r\n\r\nimport { shortFormatNumber } from '../../util'\r\n\r\nconst TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 500, // Different from XAxis\r\n fill: '',\r\n}\r\n\r\nexport function getYAxisLabel(label: string, offset?: number) {\r\n return {\r\n value: label,\r\n ...TICK_STYLE,\r\n angle: -90,\r\n dx: offset,\r\n style: { textAnchor: 'middle' },\r\n }\r\n}\r\n\r\nexport class YAxis extends React.Component<\r\n Omit, 'tickCount'> & { tickCount?: number | null }\r\n> {\r\n static displayName = RechartsYAxis.displayName\r\n\r\n static defaultProps = {\r\n ...RechartsYAxis.defaultProps,\r\n className: 'fill-gray-500 dark:fill-gray-300',\r\n tickLine: false,\r\n axisLine: false,\r\n tick: TICK_STYLE,\r\n tickFormatter: shortFormatNumber,\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { getCookie } from '../../../app/shared/cookie'\r\nimport { setCookieRequest } from '../../services/api'\r\n\r\n/*\r\n * Context.\r\n */\r\nexport type FinancialsTableSettingsType = Record\r\n\r\nexport type FinancialsTableScrollInfo = {\r\n yPosition: number\r\n}\r\n\r\nexport interface FinancialsTableContextProps {\r\n settings: T\r\n setSettings: (settings: T) => void\r\n scrollInfo?: FinancialsTableScrollInfo\r\n}\r\n\r\nexport const FinancialsTableContext = React.createContext>({\r\n settings: {},\r\n setSettings: () => null,\r\n scrollInfo: undefined,\r\n})\r\n\r\n/*\r\n * Hook.\r\n */\r\n\r\nexport function useFinancialsTableContext() {\r\n return React.useContext(FinancialsTableContext) as FinancialsTableContextProps\r\n}\r\n\r\n/*\r\n * Component.\r\n */\r\n\r\ninterface Props {\r\n children: React.ReactNode\r\n defaultSettings: FinancialsTableSettingsType\r\n cookieKey: string\r\n}\r\n\r\nexport const FinancialsTableContextProvider = ({ children, cookieKey, defaultSettings }: Props) => {\r\n const [scrollInfo, setScrollInfo] = React.useState()\r\n const [settings, setSettings] = React.useState(() => {\r\n const cookieValue = decodeURIComponent(getCookie(cookieKey))\r\n if (cookieValue.length === 0) return defaultSettings\r\n\r\n try {\r\n return { ...defaultSettings, ...JSON.parse(cookieValue) } as FinancialsTableSettingsType\r\n } catch {\r\n return defaultSettings\r\n }\r\n })\r\n\r\n const handleSetSettingsChange = (settings: FinancialsTableSettingsType) => {\r\n setScrollInfo({ yPosition: window.scrollY })\r\n setSettings(settings)\r\n setCookieRequest(cookieKey, JSON.stringify(settings))\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\n\r\nimport { TableAlign, TableBody, TableCell, TableRow } from '../Table'\r\nimport { Checkbox } from '../checkbox'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableRowProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n data: RowDataType\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n isFirst: boolean\r\n isLast: boolean\r\n}\r\n\r\nexport default function FinancialsTableRow<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n data,\r\n columns,\r\n subColumns,\r\n onVisibilityChange,\r\n isFirst,\r\n isLast,\r\n}: FinancialsTableRowProps) {\r\n const { id, label, labelElement, labelColumnClassName, isSelected, color, subData, isLabelColumnSticky } = data\r\n\r\n return (\r\n {\r\n onVisibilityChange(id, !isSelected)\r\n }}\r\n >\r\n \r\n \r\n {label}}\r\n className=\"cursor-pointer\"\r\n color={color}\r\n size=\"none\"\r\n />\r\n \r\n\r\n {columns.map((column) => (\r\n \r\n {column.renderColumn(data)}\r\n \r\n ))}\r\n \r\n {subData?.map((item, index, array) => (\r\n \r\n \r\n {item.label}\r\n \r\n {subColumns?.[item.id].map((column) => (\r\n \r\n {column.renderColumn(item as SubColumnDefinition)}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport React from 'react'\r\n\r\nimport { Table } from '../Table'\r\nimport FinancialsTableRow from './FinancialsTableRow'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsTableProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport default function FinancialsTable<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n data,\r\n isTableFixed = true,\r\n onVisibilityChange,\r\n}: FinancialsTableProps) {\r\n return (\r\n \r\n {tableHead}\r\n {data.map((row, index) => (\r\n \r\n ))}\r\n {tableFooter}\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { TableStickyColumnWrapper } from '../Table/TableStickyColumnWrapper'\r\nimport FinancialsTable from './FinancialsTable'\r\nimport {\r\n FinancialsColumnDefinition,\r\n FinancialsRowDataType,\r\n FinancialsSubColumnDefinition,\r\n FinancialsSubRowDataType,\r\n} from './types'\r\n\r\ntype FinancialsWidgetProps<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n> = {\r\n children: React.ReactNode\r\n header?: React.ReactNode\r\n tableHead?: React.ReactNode\r\n tableFooter?: React.ReactNode\r\n data: RowDataType[]\r\n columns: ColumnDefinition[]\r\n hasStickyColumnWrapper?: boolean\r\n subColumns?: Record[]>\r\n isTableFixed?: boolean\r\n onVisibilityChange: (area: string, visibility: boolean) => void\r\n}\r\n\r\nexport function FinancialsWidget<\r\n RowDataType extends FinancialsRowDataType,\r\n ColumnDefinition extends FinancialsColumnDefinition,\r\n SubColumnDefinition extends FinancialsSubRowDataType,\r\n>({\r\n children,\r\n tableHead,\r\n tableFooter,\r\n columns,\r\n subColumns,\r\n header,\r\n data,\r\n isTableFixed,\r\n hasStickyColumnWrapper,\r\n onVisibilityChange,\r\n}: FinancialsWidgetProps) {\r\n const financialsTable = (\r\n \r\n )\r\n return (\r\n
\r\n
\r\n {header}\r\n {children}\r\n
\r\n {hasStickyColumnWrapper ? (\r\n \r\n {financialsTable}\r\n \r\n ) : (\r\n financialsTable\r\n )}\r\n
\r\n )\r\n}\r\n","import { FinancialsRowValue } from './types'\r\n\r\nexport function getYoYData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce<{\r\n change: Record\r\n changePct: Record\r\n }>(\r\n (acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let change: number | null = null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n change = value - prev\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n change: {\r\n ...acc.change,\r\n [year]: change,\r\n },\r\n changePct: {\r\n ...acc.changePct,\r\n [year]: changePct,\r\n },\r\n }\r\n },\r\n { change: {}, changePct: {} }\r\n )\r\n}\r\n\r\nexport function getMoMPercentageData(data: T[]) {\r\n const sortedData = [...data].sort((a, b) => Number.parseInt(a.year) - Number.parseInt(b.year))\r\n return sortedData.reduce>((acc, { year, value }, i) => {\r\n const prev = sortedData[i - 1]?.value ?? null\r\n let changePct: number | null = null\r\n\r\n if (value !== null && prev !== null && value !== 0 && prev !== 0) {\r\n changePct = ((value - prev) / Math.abs(prev)) * 100\r\n }\r\n\r\n return {\r\n ...acc,\r\n [year]: changePct,\r\n }\r\n }, {})\r\n}\r\n\r\nexport function getIsCompact(numOfCols: number, barWidth: number) {\r\n // ~1400 is max container width\r\n const maxContainerWidth = Math.min(window.innerWidth, 1400)\r\n\r\n const barsWindowWidthRatio = (barWidth * numOfCols) / maxContainerWidth\r\n return barsWindowWidthRatio > 0.65\r\n}\r\n\r\nexport function getHeatmapClassNames(value: number | null = null) {\r\n if (value === null || value === 0) return 'bg-neutral text-neutral'\r\n\r\n // Negative\r\n if (value < -80) return 'bg-danger-5 text-danger-5'\r\n if (value < -60) return 'bg-danger-4 text-danger-4'\r\n if (value < -40) return 'bg-danger-3 text-danger-3'\r\n if (value < -20) return 'bg-danger-2 text-danger-2'\r\n if (value < 0) return 'bg-danger-1 text-danger-1'\r\n\r\n // Positive\r\n if (value > 80) return 'bg-success-5 text-success-5'\r\n if (value > 60) return 'bg-success-4 text-success-4'\r\n if (value > 40) return 'bg-success-3 text-success-3'\r\n if (value > 20) return 'bg-success-2 text-success-2'\r\n if (value > 0) return 'bg-success-1 text-success-1'\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../app/queryString'\r\n\r\nexport function useCheckNonIdeaChartMissingConfig() {\r\n const location = useLocation()\r\n\r\n React.useEffect(() => {\r\n // Navigation (back/forward) from nonexisting idea page doesn't fully reload the page\r\n // So if we're on non idea page and have still isIdeaNotFoundPage flag we want to reload the page\r\n const { i } = decodeQueryString(location.search)\r\n if (!i && window.isIdeaNotFoundPage) {\r\n window.location.reload()\r\n }\r\n }, [location.search])\r\n}\r\n","import throttle from 'lodash.throttle'\r\nimport * as React from 'react'\r\n\r\ninterface Props {\r\n throttleWaitInMs?: number\r\n isWatching?: boolean\r\n}\r\n\r\nexport function useWindowSize({ throttleWaitInMs = 300, isWatching = true }: Props = {}) {\r\n const [size, setSize] = React.useState({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (!isWatching) return\r\n\r\n const handleResize = throttle(() => {\r\n setSize({\r\n clientWidth: document.documentElement.clientWidth,\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n })\r\n }, throttleWaitInMs)\r\n\r\n window.addEventListener('resize', handleResize)\r\n\r\n return () => {\r\n handleResize.cancel()\r\n window.removeEventListener('resize', handleResize)\r\n }\r\n }, [throttleWaitInMs, isWatching])\r\n\r\n return size\r\n}\r\n","import Quote from 'finviz-charts/app/models/quote'\r\n\r\nimport { convertTa } from '../../../app/charts-lib'\r\nimport { ObjectHash } from '../../components/types'\r\nimport { getInstrumentForTicker } from '../../util'\r\n\r\nconst PADDING = 2 // Border widths\r\n\r\nexport function getChartsDimensions(chartElementId: string) {\r\n const containerElement = document.getElementById(chartElementId)\r\n\r\n const box = containerElement?.getBoundingClientRect()\r\n\r\n return {\r\n width: Math.max((box?.width ?? 0) - PADDING, 0),\r\n height: Math.max((box?.height ?? 0) - PADDING, 0),\r\n }\r\n}\r\n\r\nexport function getChartConfig(idea: any, chartElementId: string) {\r\n const chartsDimensions = getChartsDimensions(chartElementId)\r\n\r\n if (idea) {\r\n const chartConfig = Object.assign({}, FinvizChartsSettings.ideaChart, {\r\n colors: FinvizChartsSettings.colors,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n scrollable: true,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n })\r\n for (let i = 0; i < chartConfig.charts.length; i++) {\r\n if (!chartConfig.charts[i].instrument) {\r\n chartConfig.charts[i].instrument = 'stock'\r\n }\r\n }\r\n\r\n return chartConfig\r\n }\r\n\r\n return {\r\n newCharts: true,\r\n width: chartsDimensions.width,\r\n height: chartsDimensions.height,\r\n barWidth: 3,\r\n barMargin: 1,\r\n scrollable: true,\r\n alignChartsToRight: true,\r\n theme: FinvizChartsSettings.theme,\r\n colors: FinvizChartsSettings.colors,\r\n editors: ['layout', 'settings', 'publish', 'tools'],\r\n layout: FinvizChartsSettings.layout,\r\n charts: FinvizChartsSettings.tickers.map(function (ticker: string, index: number) {\r\n return {\r\n timeframe: FinvizChartsSettings.periods[index],\r\n dateRange: FinvizChartsSettings.ranges[index],\r\n scale: FinvizChartsSettings.taConfig.scale || 'linear',\r\n ticker: ticker,\r\n instrument: getInstrumentForTicker(ticker),\r\n premarket: FinvizChartsSettings.taConfig.premarket,\r\n aftermarket: FinvizChartsSettings.taConfig.aftermarket,\r\n hasChartEvents: FinvizChartsSettings.taConfig.hasChartEvents,\r\n refreshData: true,\r\n panes: convertTa.getPanes(FinvizChartsSettings.taConfig),\r\n }\r\n }),\r\n }\r\n}\r\n\r\nexport const initIdeaQuotes = (quotes: Array, ideaChart: ObjectHash) => {\r\n const hasPatterns = JSON.stringify(ideaChart).includes('patterns')\r\n\r\n for (let i = 0; i < quotes.length; i++) {\r\n const quote = quotes[i]\r\n\r\n if (quote.timeframe === 'i1' || quote.timeframe === 'i3' || quote.timeframe === 'i5' || quote.timeframe === 'i15') {\r\n if (!quote.hasOwnProperty('drawMinutesPerDay')) {\r\n quote.drawMinutesPerDay = quote.timeframe === 'i15' ? 390 : 420\r\n }\r\n\r\n if (!quote.hasOwnProperty('marketStartMinutes')) {\r\n quote.marketStartMinutes = quote.timeframe === 'i15' ? 570 : 540\r\n }\r\n\r\n if (!quote.hasOwnProperty('premarketLengthMinutes')) {\r\n quote.premarketLengthMinutes = quote.timeframe === 'i15' ? 0 : 30\r\n }\r\n\r\n if (!quote.hasOwnProperty('aftermarketLengthMinutes')) {\r\n quote.aftermarketLengthMinutes = 0\r\n }\r\n }\r\n\r\n if (!quote.hasOwnProperty('hasPatterns')) {\r\n quote.hasPatterns = hasPatterns\r\n }\r\n\r\n quote.ideaID = ideaChart.idea.id\r\n\r\n Quote.create(quote)\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { useSearchParams } from 'react-router-dom'\r\n\r\nimport { TIMEFRAME } from '../../../app/charts-lib'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\nimport { getQuoteSubview, getQuoteView } from './utils'\r\n\r\nexport const QuoteContext = React.createContext<{\r\n index: number\r\n ticker: string\r\n period: TIMEFRAME\r\n view: QuoteView | null\r\n subview: QuoteSubview | null\r\n}>({ index: -1, ticker: '', period: TIMEFRAME.d, view: null, subview: null })\r\n\r\nexport function QuoteContextProvider({\r\n ticker,\r\n index,\r\n children,\r\n}: React.PropsWithChildren<{ ticker: string; index: number }>) {\r\n const [query] = useSearchParams()\r\n const type = query.get(QuoteQuery.Type) as QuoteView | QuoteSubview\r\n const period = query.get(QuoteQuery.Period) as TIMEFRAME\r\n const contextValue = React.useMemo(\r\n () => ({ index, ticker, period, view: getQuoteView(type), subview: getQuoteSubview(type) }),\r\n [index, period, ticker, type]\r\n )\r\n\r\n return {children}\r\n}\r\n","import { CHART_ELEMENT_ID } from 'finviz-charts/app/constants/common'\r\nimport * as React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport {\r\n ChartLayoutWithGlobalState,\r\n FREE_DATE_RANGES,\r\n Quote,\r\n RootChartConfigObject,\r\n Theme,\r\n} from '../../../../app/charts-lib'\r\nimport { decodeQueryString } from '../../../../app/queryString'\r\nimport { getInitChartConfig } from '../../../../app/shared/getInitChartConfig'\r\nimport { SpecificChartFunctionality, TIMEFRAME } from '../../../constants'\r\nimport { initIdeaQuotes } from '../../charts/util'\r\nimport { getChartLayoutSizeConfig, useChartLayoutWidthWatch } from '../hooks/use-chart-layout-width-watch'\r\n\r\nexport function QuoteChart({\r\n configOverride,\r\n TAOverride,\r\n}: {\r\n configOverride?: Partial\r\n TAOverride?: any\r\n}) {\r\n const chartEl = React.useRef(document.getElementById(CHART_ELEMENT_ID))\r\n useChartLayoutWidthWatch()\r\n\r\n const config = React.useMemo(() => {\r\n let chartConfig = window.globalChartConfig\r\n\r\n if (!chartConfig) return\r\n\r\n if (chartConfig.ideaQuotes) {\r\n // Load idea quote data\r\n initIdeaQuotes(chartConfig.ideaQuotes, chartConfig)\r\n } else {\r\n // Create Quote from inlined data so we don’t have to fetch it\r\n if (chartConfig.quoteData) Quote.create(chartConfig.quoteData)\r\n chartConfig = getInitChartConfig(chartConfig, TAOverride)\r\n }\r\n\r\n const { p = FinvizSettings.defaultPeriod } = decodeQueryString()\r\n const sizeConfig = getChartLayoutSizeConfig(chartConfig, p as TIMEFRAME)\r\n\r\n return {\r\n ...chartConfig,\r\n ...sizeConfig,\r\n theme: FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light,\r\n specificChartFunctionality: SpecificChartFunctionality.quotePage,\r\n charts: chartConfig.charts.map((chart) => ({\r\n ...chart,\r\n dateRange:\r\n FinvizSettings.hasUserPremium || FREE_DATE_RANGES.includes(chart.dateRange ?? '') ? chart.dateRange : null,\r\n })),\r\n ...configOverride,\r\n }\r\n }, [TAOverride, configOverride])\r\n\r\n if (!config || !chartEl.current) return null\r\n\r\n return ReactDOM.createPortal(, chartEl.current)\r\n}\r\n","import * as React from 'react'\r\nimport * as ReactDOM from 'react-dom'\r\nimport { ErrorBoundary } from 'react-error-boundary'\r\n\r\nimport { useToggleStaticElements } from '../../../hooks/useToggleStaticElement'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ntype AnyElement = Element | Element[] | NodeListOf\r\n\r\ninterface PortalContextProps {\r\n /**\r\n * The root element this component will get rendered into\r\n */\r\n rootElement?: HTMLElement\r\n\r\n /**\r\n * Static (server rendered) element associated with this component.\r\n * Hide this element when the component gets rendered\r\n */\r\n staticElement?: HTMLElement\r\n\r\n toggleStaticElement: (isEnabled?: boolean) => void\r\n}\r\n\r\nexport const QuotePortalContext = React.createContext({\r\n rootElement: undefined,\r\n staticElement: undefined,\r\n toggleStaticElement: () => {},\r\n})\r\n\r\n/**\r\n * Portal component props\r\n */\r\ninterface QuotePortalProps {\r\n /**\r\n * Override the ticker index from context if you need to skip the first ticker\r\n */\r\n index?: number\r\n\r\n /**\r\n * Server rendered elements to replace with react components\r\n */\r\n staticElements?: AnyElement\r\n\r\n /**\r\n * Immediately replace the static element with react children.\r\n * Turn this off if the child component is suspended\r\n *\r\n * @default true (if root exists)\r\n */\r\n toggleStaticElement?: boolean\r\n\r\n /**\r\n * Elements to render the react components into\r\n */\r\n roots: AnyElement\r\n\r\n /**\r\n * Intentionally restricted to JSX element so that we don’t have to check children is valid react element\r\n */\r\n children: JSX.Element\r\n}\r\n\r\nexport function QuotePortal({ index, toggleStaticElement, staticElements, roots, children }: QuotePortalProps) {\r\n // We might need to offset the index if we want to skip the first ticker (eg. static image chart)\r\n const context = React.useContext(QuoteContext)\r\n const elementIndex = index ?? context.index\r\n\r\n // Get the root and associated static html element, get them by index if array\r\n const staticElement =\r\n staticElements instanceof NodeList || Array.isArray(staticElements) ? staticElements[elementIndex] : staticElements\r\n const rootElement = roots instanceof NodeList || Array.isArray(roots) ? roots[elementIndex] : roots\r\n\r\n /**\r\n * Set up element switching. We might want to hold off if we’re passing a suspendable component.\r\n * We can’t catch the promise here, it might have already been caught down the tree\r\n * and we want to avoid hiding the server-rendered element before the react content is ready\r\n */\r\n const [isEnabled, setIsEnabled] = React.useState(toggleStaticElement ?? (!!staticElement && !!rootElement))\r\n useToggleStaticElements(staticElement, rootElement, isEnabled)\r\n\r\n const portalContextValue = React.useMemo(\r\n () => ({\r\n // Cast here to make it easier to pass any `Element`s as props\r\n rootElement: rootElement as HTMLElement,\r\n staticElement: staticElement as HTMLElement,\r\n // A way to get notified when children get rendered, because they could be suspended and waiting for requests\r\n toggleStaticElement: (enabled?: boolean) => setIsEnabled((prevValue) => enabled ?? !prevValue),\r\n }),\r\n [rootElement, staticElement]\r\n )\r\n\r\n if (!rootElement) return null\r\n\r\n return (\r\n setIsEnabled(false)}>\r\n \r\n {ReactDOM.createPortal(children, rootElement)}\r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\ntype QuerySelectorReturn = Element | null\r\ntype AnyElement = QuerySelectorReturn | QuerySelectorReturn[] | NodeListOf\r\n\r\nexport function useToggleStaticElements(elementToHide?: AnyElement, elementToShow: AnyElement = [], enabled = true) {\r\n React.useEffect(() => {\r\n if (!elementToHide) return\r\n\r\n const hideElement = (element?: QuerySelectorReturn) => element?.classList.add('hidden')\r\n const showElement = (element?: QuerySelectorReturn) => element?.classList.remove('hidden')\r\n const toggleElements = (element: AnyElement | undefined, toggleFn: typeof hideElement) => {\r\n if (element instanceof NodeList || Array.isArray(element)) {\r\n element.forEach(toggleFn)\r\n } else {\r\n toggleFn(element)\r\n }\r\n }\r\n\r\n toggleElements(elementToHide, enabled ? hideElement : showElement)\r\n toggleElements(elementToShow, enabled ? showElement : hideElement)\r\n\r\n return () => {\r\n toggleElements(elementToHide, showElement)\r\n toggleElements(elementToShow, hideElement)\r\n }\r\n }, [elementToHide, elementToShow, enabled])\r\n}\r\n","import React from 'react'\r\n\r\nimport { useChartTimeframePathWatch } from '../../hooks/use-chart-timeframe-path-watch'\r\nimport { QuotePortalContext } from '../Portal'\r\n\r\nexport type QuoteLinksContextType = ReturnType\r\n\r\nfunction getDefaultContextValue() {\r\n const urlObject = new URL(window.location.href)\r\n\r\n return {\r\n chartLayoutModel: null,\r\n location: urlObject,\r\n }\r\n}\r\n\r\nexport const QuoteLinksContext = React.createContext(getDefaultContextValue())\r\n\r\nexport function QuoteLinksWrapper({ children }: React.PropsWithChildren) {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const info = useChartTimeframePathWatch()\r\n\r\n React.useEffect(() => toggleStaticElement(), [toggleStaticElement])\r\n\r\n return {children}\r\n}\r\n","import { useChartModelCustomDateRangeValues } from 'finviz-charts/app/controllers/chart-controls/use-chart-model-custom-date-range-values'\r\nimport { useChartLayoutGlobalModelAsync, useModelState } from 'finviz-charts/app/lib-export'\r\n\r\nexport function useChartTimeframePathWatch() {\r\n const isPremium = window.FinvizSettings.hasUserPremium\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const chartModel = useModelState(chartLayoutModel?.activeChart ?? null, {\r\n watchProperties: ['timeframe', 'dateRange'],\r\n })\r\n const { generateChartLayoutRouterPath } = useChartModelCustomDateRangeValues({\r\n chartModel,\r\n isPremium,\r\n })\r\n\r\n if (!chartModel)\r\n return {\r\n location: new URL(`${window.location.pathname}${window.location.search}`, window.location.origin),\r\n chartLayoutModel,\r\n }\r\n\r\n const location = generateChartLayoutRouterPath({\r\n ticker: chartModel?.ticker,\r\n timeframe: chartModel?.timeframe,\r\n dateRange: chartModel?.dateRange,\r\n })\r\n\r\n return { location: new URL(`${location.pathname}${location.search}`, window.location.origin), chartLayoutModel }\r\n}\r\n","import classNames from 'classnames'\r\nimport React from 'react'\r\nimport { Link, LinkProps, To } from 'react-router-dom'\r\n\r\nimport { getElitePageLink, getNavigationLinkUrl } from '../../../../util'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from '../../types'\r\nimport { QuoteLinksContext, QuoteLinksContextType } from './QuoteLinksWrapper'\r\n\r\nconst isPremium = FinvizSettings.hasUserPremium\r\n\r\ninterface SharedNavigationLinkProps {\r\n /**\r\n * Mark as only available to elite users. When se to `true`, free users will be\r\n * redirected to elite landing when clicking the link\r\n */\r\n isEliteOnly?: boolean\r\n\r\n /**\r\n * Used together with isEliteOnly to set the correct utm campaign param\r\n */\r\n utmCampaign?: string\r\n}\r\n\r\ninterface NavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n /**\r\n * Keys to preserve from the current URL query. Runs first when manipulating the URL\r\n *\r\n * @default [Ticker, Type, Period, DateRange]\r\n */\r\n preserveQueryKeys?: Array\r\n\r\n /**\r\n * Keys to omit from the current URL query. Runs after `preserveQueryKeys`\r\n */\r\n removeQueryKeys?: Array\r\n\r\n /**\r\n * Additional values to set to the URL query after preserving/removing\r\n *\r\n * @default { Type: props.view }\r\n */\r\n additionalQueryValues?: Partial>\r\n\r\n /**\r\n * The view the component links to\r\n */\r\n view: QuoteView | QuoteSubview\r\n\r\n getLink?: never\r\n}\r\n\r\ninterface CustomNavigationLinkProps extends SharedNavigationLinkProps, Omit {\r\n view?: never\r\n preserveQueryKeys?: never\r\n removeQueryKeys?: never\r\n additionalQueryValues?: never\r\n\r\n /**\r\n * Custom function to get the link\r\n */\r\n getLink: (context: QuoteLinksContextType) => To\r\n}\r\n\r\nexport function NavigationLink({\r\n isEliteOnly,\r\n utmCampaign,\r\n view,\r\n getLink,\r\n reloadDocument = true,\r\n preserveQueryKeys = [QuoteQuery.Ticker, QuoteQuery.Type, QuoteQuery.Period, QuoteQuery.DateRange],\r\n removeQueryKeys,\r\n additionalQueryValues,\r\n ...props\r\n}: React.PropsWithChildren) {\r\n const quoteContext = React.useContext(QuoteContext)\r\n const linkContext = React.useContext(QuoteLinksContext)\r\n\r\n const linkUrl = React.useMemo(() => {\r\n if (isEliteOnly && !isPremium) return getElitePageLink(utmCampaign)\r\n if (typeof getLink === 'function') return getLink(linkContext)\r\n\r\n return getNavigationLinkUrl(\r\n linkContext.location,\r\n preserveQueryKeys,\r\n removeQueryKeys,\r\n additionalQueryValues ?? { [QuoteQuery.Type]: view }\r\n ).toString()\r\n }, [isEliteOnly, utmCampaign, getLink, linkContext, preserveQueryKeys, removeQueryKeys, additionalQueryValues, view])\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../../components/dialog'\r\nimport { Spinner } from '../../../../components/spinner'\r\nimport { useAsyncModule } from '../../../../services/async-modules-utils'\r\nimport { createAlertAsyncModule } from '../../../create-alert/async-modules'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function CreateAlertLink() {\r\n const { ticker } = React.useContext(QuoteContext)\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [createAlertModule] = useAsyncModule({\r\n ...createAlertAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const CreateAlert = createAlertModule?.CreateAlert\r\n\r\n return (\r\n <>\r\n `/create_alert.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.hasUserPremium) return\r\n window.gtag?.('event', 'click', { event_category: 'create-alert' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Set Alert\r\n \r\n \r\n {CreateAlert ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import React from 'react'\r\n\r\nimport { Dialog, useDialogState } from '../../../../components/dialog'\r\nimport { Spinner } from '../../../../components/spinner'\r\nimport { useAsyncModule } from '../../../../services/async-modules-utils'\r\nimport { saveToPortfolioAsyncModule } from '../../../save-to-portfolio/async-modules'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport { NavigationLink } from './QuoteLinkComponent'\r\n\r\nexport function SaveToPortfolioLink() {\r\n const { ticker } = React.useContext(QuoteContext)\r\n const dialog = useDialogState()\r\n const isVisible = dialog.useState('open')\r\n\r\n const [saveToPortfolioModule] = useAsyncModule({\r\n ...saveToPortfolioAsyncModule,\r\n shouldLoadModule: isVisible,\r\n })\r\n const SaveToPortfolio = saveToPortfolioModule?.SaveToPortfolio\r\n\r\n return (\r\n <>\r\n `/save_to_portfolio.ashx?t=${ticker}`}\r\n onClick={(e) => {\r\n if (!FinvizSettings.email.length) return\r\n window.gtag?.('event', 'click', { event_category: 'save-to-portfolio' })\r\n if (e.ctrlKey || e.metaKey) return\r\n e.preventDefault() // needed to prevent opening parent link\r\n dialog.show()\r\n }}\r\n >\r\n Add to Portfolio\r\n \r\n \r\n {SaveToPortfolio ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { CreateAlertLink } from './components/Navigation/CreateAlertLink'\r\nimport { NavigationLink } from './components/Navigation/QuoteLinkComponent'\r\nimport { QuoteLinksWrapper } from './components/Navigation/QuoteLinksWrapper'\r\nimport { SaveToPortfolioLink } from './components/Navigation/SaveToPortfolioLink'\r\nimport { QuotePortalContext } from './components/Portal'\r\nimport { QuoteQuery, QuoteSubview, QuoteView } from './types'\r\n\r\nexport function QuoteNavigation() {\r\n const { rootElement } = React.useContext(QuotePortalContext)\r\n const hasShortInterest = rootElement!.dataset.shortinterest === 'true'\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n Chart\r\n Stock Detail\r\n \r\n \r\n\r\n \r\n Compare\r\n Compare Perf.\r\n \r\n \r\n\r\n {hasShortInterest && (\r\n <>\r\n Short Interest\r\n \r\n \r\n )}\r\n\r\n Financials\r\n \r\n\r\n {FinvizSettings.hasTrafficPageEnabled && (\r\n <>\r\n Traffic\r\n \r\n \r\n )}\r\n\r\n \r\n Options\r\n \r\n \r\n\r\n \r\n Filings\r\n Latest Filings\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n","/* global FinvizQuoteTickers */\r\nimport classnames from 'classnames'\r\nimport * as dateFns from 'date-fns'\r\nimport React, { ChangeEvent, Component, FormEvent } from 'react'\r\n\r\nimport {\r\n ChartElementType,\r\n ChartLayout,\r\n Instrument,\r\n Quote,\r\n QuoteFetchType,\r\n TIMEFRAME,\r\n Theme,\r\n Utils,\r\n} from '../../../../app/charts-lib'\r\nimport { decodeQueryString } from '../../../../app/queryString'\r\nimport { getStaticChartConfig } from '../../../../app/shared/chartLayoutConfig'\r\nimport { getSanitizedTicker } from '../../../../app/shared/ticker-sanitizer'\r\nimport { formatDateToStringUS } from '../../../../app/shared/utils'\r\nimport { DatePicker } from '../../../components/date-picker'\r\nimport { SpecificChartFunctionality } from '../../../constants'\r\n\r\nconst redesignEnabled = !!FinvizSettings.hasRedesignEnabled\r\n\r\nconst colorScaleClass = function (value: number) {\r\n if (value < 0) {\r\n return 'color-text is-negative'\r\n } else if (value > 0) {\r\n return 'color-text is-positive'\r\n }\r\n return ''\r\n}\r\n\r\nconst monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n\r\nconst arraysEqual = function (arr1: unknown[], arr2: unknown[]) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\ninterface ChartProps {\r\n tickers: string[]\r\n fromDay: string\r\n toDay: string\r\n}\r\n\r\nclass Chart extends Component {\r\n containerRef = React.createRef()\r\n\r\n shouldComponentUpdate(nextProps: ChartProps) {\r\n return !arraysEqual(this.props.tickers, nextProps.tickers)\r\n }\r\n\r\n render() {\r\n const theme = FinvizSettings.hasDarkTheme ? Theme.dark : Theme.light\r\n const tickerQuote = Quote.select((q) => q.close.length > 0 && this.props.tickers.includes(q.ticker))\r\n const chartConfig = getStaticChartConfig({\r\n ticker: tickerQuote[0]?.ticker ?? '',\r\n timeframe: TIMEFRAME.d,\r\n paneElements: [\r\n {\r\n type: ChartElementType.PerfChart,\r\n tickers: this.props.tickers,\r\n fromDate: this.props.fromDay,\r\n toDate: this.props.toDay,\r\n overlays: [],\r\n },\r\n ],\r\n width: 1000,\r\n height: 450,\r\n refreshData: false,\r\n specificChartFunctionality: SpecificChartFunctionality.quotePerf,\r\n theme,\r\n })\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\ninterface TableProps {\r\n months: string[]\r\n rows: Array<{\r\n ticker: string\r\n months: string[]\r\n total: string\r\n }>\r\n}\r\n\r\n// mozno vyfarbovat tabulku?\r\nclass Table extends Component {\r\n render() {\r\n const { months, rows } = this.props\r\n const groupsCount = Math.ceil(months.length / 12)\r\n const tdClasses = classnames('text-center', {\r\n 'body-table-nw font-bold': !redesignEnabled,\r\n })\r\n\r\n const trs = []\r\n for (let g = 0; g < groupsCount; g++) {\r\n trs.push(\r\n \r\n \r\n {months.splice(0, 12).map((month) => (\r\n \r\n {month}\r\n \r\n ))}\r\n {g === groupsCount - 1 && Total}\r\n \r\n )\r\n rows.forEach((row, i) => {\r\n trs.push(\r\n \r\n {row.ticker}\r\n {row.months.splice(0, 12).map((col, monthIndex) => (\r\n \r\n {col}\r\n \r\n ))}\r\n {g === groupsCount - 1 && (\r\n \r\n {row.total}\r\n \r\n )}\r\n \r\n )\r\n })\r\n }\r\n\r\n return (\r\n \r\n {trs}\r\n \r\n )\r\n }\r\n}\r\n\r\ninterface PerfState {\r\n tickersInput: string\r\n tickers: string[]\r\n months: Array<{\r\n value: string\r\n label: string\r\n }>\r\n fromMonth: {\r\n value: string\r\n label: string\r\n }\r\n toMonth: {\r\n value: string\r\n label: string\r\n }\r\n minDate: string\r\n maxDate: string\r\n fromDay: string\r\n toDay: string\r\n loading: boolean\r\n}\r\n\r\nexport class Perf extends Component {\r\n constructor(props: any) {\r\n super(props)\r\n const now = new Date(),\r\n months = []\r\n const startYear = new Date().getFullYear() - 36 // We have 37.25 years of data in DB, so leaving some offset\r\n for (let year = startYear; year <= now.getFullYear(); year++) {\r\n for (let month = 1; month <= 12; month++) {\r\n if (year === now.getFullYear() && month > now.getMonth() + 1) {\r\n break\r\n }\r\n months.push({\r\n value: month.toString().padStart(2, '0') + '/01/' + year,\r\n label: monthNames[month - 1] + ' ' + year.toString().substring(2),\r\n })\r\n }\r\n }\r\n\r\n this.state = {\r\n tickersInput: FinvizQuoteTickers.join(','),\r\n tickers: FinvizQuoteTickers,\r\n months: months,\r\n fromMonth: months[months.length - 12],\r\n toMonth: months[months.length - 1],\r\n /**\r\n * DB_BARS_LIMIT - code below is dependent on amount of data we store for specific timeframes\r\n * Search DB_BARS_LIMIT in the project to find other places with such code.\r\n */\r\n // 2510 bars = ±10 years\r\n minDate: formatDateToStringUS(dateFns.sub(new Date(), { years: 9, months: 11 })),\r\n maxDate: formatDateToStringUS(new Date()),\r\n fromDay: formatDateToStringUS(dateFns.subYears(new Date(), 1)),\r\n toDay: formatDateToStringUS(new Date()),\r\n loading: true,\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n Loading...\r\n
\r\n )\r\n }\r\n\r\n const from = new Date(this.state.fromMonth.value)\r\n const to = new Date(this.state.toMonth.value)\r\n const monthsToShow = this.state.months\r\n .map((month) => month.value)\r\n .filter((month) => new Date(month) >= from && new Date(month) <= to)\r\n\r\n const quotes = Quote.select((q: any) => q.timeframe === 'm')\r\n const quotesPerf = quotes.map((q: any) => {\r\n const obj: { ticker: string; perf: Record } = { ticker: q.ticker, perf: {} }\r\n q.date.forEach((d: any, i: number) => {\r\n if (i === 0) {\r\n return\r\n }\r\n const date = Utils.dateFromUnixTimestamp(d)\r\n const perf = (q.close[i] * 100) / q.close[i - 1] - 100\r\n obj.perf[(date.getMonth() + 1).toString().padStart(2, '0') + '/01/' + date.getFullYear()] = perf\r\n })\r\n return obj\r\n })\r\n\r\n const months = monthsToShow.map(\r\n (month) => monthNames[new Date(month).getMonth()] + ' ' + new Date(month).getFullYear().toString().substring(2)\r\n )\r\n const rows = quotesPerf.map((quote: any) => {\r\n const cols: string[] = []\r\n let total = 1\r\n monthsToShow.forEach((month) => {\r\n const perf = Math.round(quote.perf[month] * 100) / 100\r\n if (!isNaN(perf)) {\r\n total *= quote.perf[month] / 100 + 1\r\n cols.push((perf > 0 ? '+' : '') + perf.toFixed(2) + '%')\r\n } else {\r\n cols.push('N/A')\r\n }\r\n })\r\n total = (total - 1) * 100\r\n return { ticker: quote.ticker, months: cols, total: (total > 0 ? '+' : '') + total.toFixed(2) + '%' }\r\n })\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Tickers:\r\n {\r\n this.setState({ tickersInput: e.target.value })\r\n }}\r\n style={{ width: '100%' }}\r\n data-testid=\"quote-compare-perf-tickers-input\"\r\n />\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {\r\n this._onDatePickerChange('from', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n {' - '}\r\n
\r\n {\r\n this._onDatePickerChange('to', formatDateToStringUS(newValue))\r\n }}\r\n >\r\n \r\n \r\n
\r\n \r\n\r\n

\r\n Monthly performance from  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n   to  \r\n \r\n {this.state.months.map((option) => (\r\n \r\n ))}\r\n \r\n

\r\n \r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n refetchQuotes = () => {\r\n this._fetch(this.state.tickers, false)\r\n }\r\n\r\n componentDidMount() {\r\n this._fetch(this.state.tickers)\r\n\r\n // We have to listen to these events to synchrnously update quote data, if we do after awaiting Quote.getAll in _fetch\r\n // there's a visual glitch because it rerenders with new data from the server (there's a complete refetch after 15 requests with no new data)\r\n // and then it rerenders again after updateQuoteData\r\n Quote.bind('refetch newerData', this.updateQuoteData)\r\n document.addEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n componentWillUnmount() {\r\n Quote.unbind('refetch newerData', this.updateQuoteData)\r\n document.removeEventListener('quoteFetchEvent', this.refetchQuotes)\r\n }\r\n\r\n updateQuoteData = () => {\r\n const { fromDay, toDay } = this.state\r\n\r\n if (!fromDay || !toDay) {\r\n return\r\n }\r\n\r\n const dailyQuotes = Quote.select((q: any) => q.timeframe === 'd')\r\n const fromDate = new Date(fromDay + ' 00:00')\r\n const toDate = new Date(toDay + ' 23:59')\r\n dailyQuotes.forEach((q: any) => {\r\n const o = [],\r\n h = [],\r\n l = [],\r\n c = [],\r\n d = [],\r\n v = []\r\n for (let i = 0; i < q.close.length; i++) {\r\n const date = Utils.dateFromUnixTimestamp(q.date[i])\r\n if (fromDate <= date && date <= toDate) {\r\n o.push(q.open[i])\r\n h.push(q.high[i])\r\n l.push(q.low[i])\r\n c.push(q.close[i])\r\n d.push(q.date[i])\r\n v.push(q.volume[i])\r\n }\r\n }\r\n // Clear cache so we'll recalculate values after updating quote data on next line\r\n // Cache invalidates only on quote.fetchedAt change and in this case we mutate quote values and don't change fetchedAt (which is correct)\r\n // Updating quote this way should be an edge case and that's why we have to clear the cache manually\r\n q.clearCachedData()\r\n q.updateAttributes({\r\n open: o,\r\n high: h,\r\n low: l,\r\n close: c,\r\n date: d,\r\n volume: v,\r\n })\r\n })\r\n\r\n // This is to rerender perf table on quote update\r\n this.forceUpdate()\r\n }\r\n\r\n _fetch = async (tickers: string[], isRefetch = true) => {\r\n const { t } = decodeQueryString<{ t: string; p?: TIMEFRAME }>()\r\n if (isRefetch) {\r\n this.setState({ loading: true })\r\n }\r\n\r\n Quote.all().forEach(async (quote) => {\r\n if (quote.ticker === t && quote.timeframe === 'd' && !isRefetch) {\r\n // We don't want to trigger main ticker quote newer data fetch because it's done in withQuotePolling which also triggers this function\r\n // by emmiting quoteFetchEvent\r\n return\r\n }\r\n if (tickers.includes(quote.ticker)) {\r\n await quote.fetchData({ fetchType: isRefetch ? QuoteFetchType.Refetch : QuoteFetchType.NewerData })\r\n this.updateQuoteData()\r\n } else {\r\n quote.destroy()\r\n }\r\n })\r\n\r\n if (isRefetch) {\r\n const d = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.d, instrument: Instrument.Stock }))\r\n const m = tickers.map((ticker) => ({ ticker: ticker, timeframe: TIMEFRAME.m, instrument: Instrument.Stock }))\r\n await Quote.getAll(d.concat(m))\r\n\r\n this.setState({ loading: false })\r\n }\r\n\r\n this.updateQuoteData()\r\n }\r\n\r\n _onSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n const tickersInput = getSanitizedTicker(this.state.tickersInput, true)\r\n const tickers = tickersInput.split(',')\r\n this.setState({ tickers, tickersInput }, () => {\r\n this._fetch(tickers)\r\n })\r\n }\r\n\r\n _onMonthChange = (type: string, e: ChangeEvent) => {\r\n const state: any = {}\r\n state[type + 'Month'] = this.state.months.filter((m) => m.value === e.target.value)[0]\r\n this.setState(state)\r\n }\r\n\r\n _onDatePickerChange = (type: string, date: any) => {\r\n const formattedDate = formatDateToStringUS(new Date(date))\r\n\r\n const state: any = {}\r\n state[type + 'Day'] = formattedDate\r\n state[type + 'DatePickerOpen'] = false\r\n this.setState(state, () => {\r\n this._fetch(this.state.tickers)\r\n })\r\n }\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Bar as RechartsBar, Rectangle } from 'recharts'\r\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar'\r\n\r\nenum BarColor {\r\n neutral,\r\n red,\r\n green,\r\n}\r\n\r\ntype BarColorType = keyof typeof BarColor\r\n\r\ninterface ColorProps {\r\n color?: BarColorType | ((value: ValueType | null) => BarColorType)\r\n}\r\n\r\ntype BarInnerProps = ColorProps & Omit\r\n\r\nexport function BarInner({ color = 'neutral', ...props }: BarInnerProps) {\r\n const colorResult = typeof color === 'function' ? color(props.value as ValueType) : color\r\n const barColor = BarColor[colorResult as BarColorType] ?? BarColor.neutral\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\ntype BarProps = ColorProps &\r\n React.PropsWithoutRef, 'color'>>\r\n\r\nexport class Bar extends React.Component> {\r\n static getComposedData = RechartsBar.getComposedData\r\n static displayName = RechartsBar.displayName\r\n\r\n static defaultProps = {\r\n ...RechartsBar.defaultProps,\r\n radius: [2, 2, 0, 0],\r\n activeBar: false,\r\n isAnimationActive: false,\r\n }\r\n\r\n render() {\r\n const { color, ...props } = this.props\r\n\r\n return } {...props} />\r\n }\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\n\r\ninterface ChartBoxProps extends Omit, 'label'> {\r\n label?: React.ReactNode\r\n}\r\n\r\nexport function ChartBox({ label, children, ...props }: React.PropsWithChildren) {\r\n return (\r\n \r\n
\r\n {label}\r\n
\r\n {children}\r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { ResponsiveContainer } from 'recharts'\r\n\r\nexport const ChartWrapperContext = React.createContext(true)\r\n\r\nexport function ChartWrapper(props: React.PropsWithChildren>) {\r\n const [isTooltipActive, setTooltipActive] = React.useState(false)\r\n\r\n return (\r\n setTooltipActive(true)}\r\n onMouseLeave={() => setTooltipActive(false)}\r\n >\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Line as RechartsLine } from 'recharts'\r\n\r\nenum LineColor {\r\n neutral,\r\n red,\r\n green,\r\n}\r\n\r\ntype LineColorType = keyof typeof LineColor\r\n\r\ninterface LineProps extends React.PropsWithoutRef> {\r\n color?: LineColorType\r\n}\r\n\r\nexport class Line extends React.Component {\r\n static getComposedData = RechartsLine.getComposedData\r\n static displayName = RechartsLine.displayName\r\n\r\n static defaultProps = {\r\n ...RechartsLine.defaultProps,\r\n color: 'neutral',\r\n dot: false,\r\n activeDot: false,\r\n isAnimationActive: false,\r\n connectNulls: false,\r\n stroke: null,\r\n }\r\n\r\n render() {\r\n const { color, ...props } = this.props\r\n const lineColor = LineColor[color as LineColorType]\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { Rectangle, RectangleProps } from 'recharts'\r\n\r\nimport { ChartWrapperContext } from './ChartWrapper'\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n points?: [{ x: number; y: number }]\r\n}\r\n\r\nexport function CursorBar({\r\n numberOfDatapoints,\r\n points,\r\n ...props\r\n}: CustomCursorProps & { numberOfDatapoints: number }) {\r\n const isActive = React.useContext(ChartWrapperContext)\r\n\r\n if (!isActive) return null\r\n\r\n const cursorWidth = props.width! / numberOfDatapoints\r\n const x = points![0].x - cursorWidth / 2\r\n const y = points![0].y\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport function CursorLine({ points, ...props }: CustomCursorProps) {\r\n const isActive = React.useContext(ChartWrapperContext)\r\n\r\n if (!isActive) return null\r\n\r\n const x = points![0].x - 1\r\n const y = points![0].y\r\n return \r\n}\r\n","import classNames from 'classnames'\r\nimport * as React from 'react'\r\nimport { Tooltip as RechartsTooltip } from 'recharts'\r\n\r\nimport { ChartWrapperContext } from './ChartWrapper'\r\nimport { CursorLine } from './Cursor'\r\n\r\ninterface TooltipRowProps {\r\n isActive?: boolean\r\n label: React.ReactNode\r\n dataKey: string\r\n payload?: any\r\n indicator?: React.ReactNode\r\n formatValue?: (value: any, payload: Record & { dataKey: string }) => React.ReactNode\r\n}\r\n\r\nexport function TooltipRow({ isActive, indicator, label, payload, formatValue }: TooltipRowProps) {\r\n return (\r\n <>\r\n
{indicator}
\r\n
{label}
\r\n
\r\n {formatValue?.(payload?.value, payload ?? {}) ?? payload?.value}\r\n
\r\n \r\n )\r\n}\r\n\r\ninterface TooltipInnerProps extends React.ComponentProps {\r\n className?: string\r\n formatTitle: (value: any) => React.ReactNode\r\n formatValue?: (value: any, payload: Record & { dataKey: string }) => React.ReactNode\r\n}\r\n\r\nfunction TooltipInner({ payload, formatTitle, formatValue, ...props }: React.PropsWithChildren) {\r\n const isActive = React.useContext(ChartWrapperContext)\r\n\r\n return (\r\n \r\n {props.label && (\r\n
\r\n {formatTitle?.(props.label) ?? props.label}\r\n
\r\n )}\r\n\r\n
\r\n {React.Children.map(props.children, (child) => {\r\n if (!React.isValidElement(child) || child.type !== TooltipRow) return child\r\n\r\n const rowPayload = payload?.find((payload) => payload.dataKey === child.props.dataKey)\r\n\r\n return React.cloneElement(child, {\r\n payload: rowPayload,\r\n formatValue: child.props.formatValue ?? formatValue,\r\n } as TooltipRowProps)\r\n })}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport class Tooltip extends React.Component> {\r\n static displayName = RechartsTooltip.displayName\r\n\r\n static defaultProps = {\r\n ...RechartsTooltip.defaultProps,\r\n offset: 2,\r\n position: { y: 36 },\r\n isAnimationActive: false,\r\n wrapperStyle: { outline: 'none', zIndex: 10 },\r\n cursor: ,\r\n }\r\n\r\n render() {\r\n const { className, formatTitle, formatValue, children, ...props } = this.props\r\n\r\n return (\r\n \r\n {children}\r\n \r\n }\r\n />\r\n )\r\n }\r\n}\r\n","import * as React from 'react'\r\nimport { ComposedChart } from 'recharts'\r\n\r\nimport { RedGreenText } from '../../../components/RedGreenText'\r\nimport { Bar } from '../../../components/chart/Bar'\r\nimport { CartesianGrid } from '../../../components/chart/CartesianGrid'\r\nimport { ChartBox } from '../../../components/chart/ChartBox'\r\nimport { ChartWrapper } from '../../../components/chart/ChartWrapper'\r\nimport { Line } from '../../../components/chart/Line'\r\nimport { Tooltip, TooltipRow } from '../../../components/chart/Tooltip'\r\nimport { DATE_FORMAT_MMMdd, XAxis, dateAxisFormatter } from '../../../components/chart/XAxis'\r\nimport { YAxis } from '../../../components/chart/YAxis'\r\nimport { dateStrToTimestamp, shortFormatDollar } from '../../../util'\r\nimport { parseRouteInitData } from '../../../util-routing'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ninterface FundFlowsRow {\r\n date: string\r\n aum: number | null\r\n flow: number | null\r\n}\r\n\r\nenum FlowsChartDataKeys {\r\n Aum = 'aum',\r\n Flows = 'flow',\r\n}\r\n\r\nfunction tooltipValueFormatter(value: number, { dataKey }: { dataKey: string }) {\r\n const formatted = shortFormatDollar(value)\r\n if (dataKey === FlowsChartDataKeys.Aum) return formatted\r\n\r\n return (\r\n \r\n {formatted}\r\n \r\n )\r\n}\r\n\r\nexport function FundFlowsChart(props: React.HTMLProps) {\r\n const { index } = React.useContext(QuoteContext)\r\n const initData = React.useMemo(() => {\r\n const routeData = parseRouteInitData({\r\n elementId: `route-init-data-fundflows-${index}`,\r\n removeElement: false,\r\n })\r\n\r\n return routeData?.map((row) => ({ ...row, date: dateStrToTimestamp(row.date) }))\r\n }, [index])\r\n\r\n if (!initData?.length) return null\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n dateAxisFormatter({ value, outFormat: DATE_FORMAT_MMMdd, parseAsNY: false })}\r\n domain={['dataMin', 'dataMax']}\r\n />\r\n \r\n {\r\n const absMax = Math.max(Math.abs(dataMin), Math.abs(dataMax)) * 1.2\r\n return [-absMax, absMax]\r\n }}\r\n />\r\n dateAxisFormatter({ value, outFormat: 'MMM dd yyyy', parseAsNY: false })}\r\n formatValue={tooltipValueFormatter}\r\n >\r\n \r\n \r\n \r\n\r\n \r\n \r\n yAxisId=\"flowAxis\"\r\n dataKey={FlowsChartDataKeys.Flows}\r\n radius={[1, 1, 0, 0]}\r\n color={(value) => (value == null ? 'neutral' : value > 0 ? 'green' : 'red')}\r\n />\r\n \r\n \r\n \r\n )\r\n}\r\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","// eslint-disable-next-line import/no-extraneous-dependencies\r\nimport colors from '@finviz/config/colors'\r\n\r\nexport const CHART_HEIGHT = 300\r\nexport const BAR_WIDTH = 8\r\nexport const BAR_BORDER_RADIUS: [number, number, number, number] = [2, 2, 0, 0]\r\nexport const STROKE_COLOR = FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[100]\r\nexport const LINE_COLOR = FinvizSettings.hasDarkTheme ? colors.blue[400] : colors.blue[400]\r\nexport const SALE_BAR_COLOR = colors.red[400]\r\nexport const BUY_BAR_COLOR = colors.green[400]\r\nexport const Y_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 500,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const X_TICK_STYLE = {\r\n fontSize: 10,\r\n fontWeight: 400,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[300] : colors.gray[500],\r\n}\r\nexport const TOOLTIP_WRAPPER_STYLE = { outline: 'none', zIndex: 10 }\r\nexport const CURSOR_STYLE = {\r\n border: 0,\r\n stroke: 0,\r\n fill: FinvizSettings.hasDarkTheme ? colors.gray[700] : colors.gray[50],\r\n opacity: 0.65,\r\n}\r\nexport const TRANSPARENT_CURSOR = { opacity: 0 }\r\n\r\nexport enum BarType {\r\n Buy = 'Buy',\r\n Sale = 'Sale',\r\n}\r\n\r\nexport const BarColorMap: Record = {\r\n [BarType.Buy]: BUY_BAR_COLOR,\r\n [BarType.Sale]: SALE_BAR_COLOR,\r\n}\r\n\r\nexport const BarLabelMap: Record = {\r\n [BarType.Buy]: 'Insider Buy Volume',\r\n [BarType.Sale]: 'Insider Sales Volume',\r\n}\r\n","import classNames from 'classnames'\r\nimport { endOfMonth, startOfMonth } from 'date-fns'\r\n\r\nimport { formatValue } from '../../../../../app/bubbles/utils'\r\nimport { BarColorMap, BarLabelMap, BarType } from './constants'\r\nimport { ChartData, VolumeChartDataPerTimeframe } from './types'\r\n\r\ntype ChartTooltipProps = {\r\n label?: number\r\n isActive?: boolean\r\n payload?: Array<{ payload?: ChartData }>\r\n activeKey: BarType | null\r\n}\r\n\r\nfunction formatDateTitle(date: number) {\r\n const startDate = startOfMonth(date)\r\n const endDate = endOfMonth(startDate)\r\n\r\n const month = startDate.toLocaleString('en-US', { month: 'short' })\r\n const startDay = startDate.getDate()\r\n const year = startDate.getFullYear()\r\n const endDay = endDate.getDate()\r\n return `${month} ${startDay}-${endDay}, ${year}`\r\n}\r\n\r\nfunction formatDataValue(barType: BarType, payload: Partial = {}) {\r\n const tradeCount = barType === BarType.Buy ? payload.buyTransactionCount : payload.saleTransactionCount\r\n const value = barType === BarType.Buy ? payload.buyAggregated : payload.saleAggregated\r\n return `$${formatValue(value ?? 0)} (${tradeCount ?? 0} Trade${tradeCount === 1 ? '' : 's'})`\r\n}\r\n\r\nfunction BarTooltipLabel({\r\n activeKey,\r\n barType,\r\n payload,\r\n}: {\r\n activeKey: BarType | null\r\n barType: BarType\r\n payload?: VolumeChartDataPerTimeframe\r\n}) {\r\n return (\r\n \r\n {BarLabelMap[barType]}\r\n \r\n {formatDataValue(barType, payload)}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default function ChartTooltip({ isActive, activeKey, payload, label }: ChartTooltipProps) {\r\n const cursorPayload = payload?.[0]?.payload?.insider\r\n\r\n if (!isActive) return null\r\n\r\n return (\r\n \r\n {label && (\r\n
\r\n {formatDateTitle(label)}\r\n
\r\n )}\r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { Rectangle } from 'recharts'\r\n\r\nimport { BAR_WIDTH, BarType } from './constants'\r\n\r\nexport function InsiderVolumeBar({ x, width, ...props }: any) {\r\n let newX = x\r\n const value = props.payload[props.dataKey]\r\n const isCenteredBar = props.payload.saleAggregated === 0 || props.payload.buyAggregated === 0\r\n if (isCenteredBar) {\r\n if (props.name === BarType.Sale) newX += width / 2\r\n else newX -= width / 2\r\n }\r\n\r\n if (value === 0 || !Number.isFinite(value)) {\r\n // Needs to return an element, so return an empty node\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n {props.name === BarType.Sale && (\r\n \r\n )}\r\n {props.name === BarType.Buy && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import classnames from 'classnames'\r\nimport { endOfMonth, format, startOfMonth } from 'date-fns'\r\nimport { getInstrument } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\nimport {\r\n Bar,\r\n CartesianGrid,\r\n ComposedChart,\r\n Line,\r\n Rectangle,\r\n RectangleProps,\r\n ResponsiveContainer,\r\n Tooltip,\r\n XAxis,\r\n YAxis,\r\n} from 'recharts'\r\n\r\nimport { formatValue } from '../../../../../app/bubbles/utils'\r\nimport { Quote, TIMEFRAME } from '../../../../../app/charts-lib'\r\nimport { getDate } from '../../../../../app/header/utils'\r\nimport { decodeQueryString } from '../../../../../app/queryString'\r\nimport { parseRouteInitData } from '../../../../util-routing'\r\nimport { QuoteContext } from '../../QuoteContext'\r\nimport ChartTooltip from './ChartTooltip'\r\nimport { InsiderVolumeBar } from './InsiderVolumeBar'\r\nimport {\r\n BAR_BORDER_RADIUS,\r\n BUY_BAR_COLOR,\r\n BarType,\r\n CHART_HEIGHT,\r\n CURSOR_STYLE,\r\n LINE_COLOR,\r\n SALE_BAR_COLOR,\r\n STROKE_COLOR,\r\n TOOLTIP_WRAPPER_STYLE,\r\n TRANSPARENT_CURSOR,\r\n X_TICK_STYLE,\r\n Y_TICK_STYLE,\r\n} from './constants'\r\nimport { ChartData, TradingVolumeChartInit } from './types'\r\nimport { filterDataForChart } from './utils'\r\n\r\ninterface InsiderTradingVolumeChartProps {\r\n className?: string\r\n}\r\n\r\ninterface CustomCursorProps extends Partial> {\r\n numberOfDatapoints: number\r\n isActive: boolean\r\n points?: [{ x: number; y: number }]\r\n}\r\n\r\nfunction CustomCursor({ numberOfDatapoints, points, ...props }: CustomCursorProps) {\r\n const cursorWidth = props.width! / numberOfDatapoints\r\n const x = points![0].x - cursorWidth / 2\r\n const y = points![0].y\r\n return (\r\n \r\n )\r\n}\r\n\r\nfunction xAxisTickFormatter(value: any) {\r\n if (!Number.isFinite(value)) return ''\r\n\r\n const date = getDate(value)\r\n return date.getMonth() === 0 ? date.getFullYear().toString() : format(date, 'MMM')\r\n}\r\n\r\nexport function InsiderTradingVolumeChart({ className }: InsiderTradingVolumeChartProps) {\r\n const { index } = React.useContext(QuoteContext)\r\n const [isActive, setIsActive] = React.useState(false)\r\n const [chartData, setChartData] = React.useState([])\r\n const [activeKey, setActiveKey] = React.useState(null)\r\n\r\n const initData = React.useMemo(() => {\r\n const data = parseRouteInitData({\r\n elementId: `insider-init-data-${index}`,\r\n removeElement: false,\r\n })\r\n\r\n return {\r\n data,\r\n domain: data?.length\r\n ? [\r\n getDate(startOfMonth(getDate(data[0].date))).getTime(),\r\n getDate(endOfMonth(getDate(data[data.length - 1].date))).getTime(),\r\n ]\r\n : [],\r\n }\r\n }, [index])\r\n\r\n const hasInsiderTradingHistory = React.useMemo(\r\n () => initData.data?.some((x) => x.saleTransactionCount > 0 || x.buyTransactionCount > 0),\r\n [initData]\r\n )\r\n\r\n React.useEffect(() => {\r\n const { t: urlTicker } = decodeQueryString()\r\n const ticker = urlTicker.split(',')[index]\r\n async function fetchQuoteData() {\r\n if (!initData.data?.length) return\r\n const quote = await Quote.get({\r\n ticker,\r\n instrument: getInstrument(ticker),\r\n timeframe: TIMEFRAME.d,\r\n // Do not reuse idea quote, it doesn’t have the current data\r\n options: { cachePredicate: (quote) => !quote.ideaID },\r\n })\r\n const dateFrom = initData.data[0].date\r\n const dateTo = initData.data[initData.data.length - 1]!.date\r\n const data = filterDataForChart(quote, dateFrom, dateTo)\r\n setChartData(data.map((row, index) => ({ ...row, insider: initData.data?.[index] })))\r\n }\r\n\r\n if (hasInsiderTradingHistory) fetchQuoteData()\r\n }, [initData, hasInsiderTradingHistory, index])\r\n\r\n const commonProps = React.useMemo(\r\n () => ({\r\n bar: {\r\n yAxisId: 'yAxisVolume',\r\n activeBar: false,\r\n shape: InsiderVolumeBar,\r\n radius: BAR_BORDER_RADIUS,\r\n isAnimationActive: false,\r\n onMouseLeave: () => setActiveKey(null),\r\n },\r\n xAxis: {\r\n dataKey: 'date',\r\n scale: 'time' as const,\r\n type: 'number' as const,\r\n dy: 5,\r\n tick: X_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n domain: initData.domain,\r\n tickFormatter: xAxisTickFormatter,\r\n },\r\n yAxis: {\r\n tick: Y_TICK_STYLE,\r\n tickLine: false,\r\n axisLine: false,\r\n tickFormatter: (value: number) => formatValue(value),\r\n },\r\n }),\r\n [initData.domain]\r\n )\r\n\r\n if (!initData.data?.length || !hasInsiderTradingHistory) return null\r\n\r\n return (\r\n
\r\n
\r\n \r\n Insider Trading Volume\r\n \r\n
\r\n setIsActive(true)}\r\n onMouseLeave={() => setIsActive(false)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n content={}\r\n />\r\n \r\n setActiveKey(BarType.Sale)}\r\n />\r\n setActiveKey(BarType.Buy)}\r\n />\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n","import { endOfMonth, startOfMonth } from 'date-fns'\r\nimport { type Quote } from 'finviz-charts/server/offScreenCanvasRender'\r\n\r\nimport { getDate } from '../../../../../app/header/utils'\r\nimport { ChartBaseData } from './types'\r\n\r\n/**\r\n * Only get data between from/to range\r\n */\r\nexport function filterDataForChart(quote: Quote, fromDate: number, toDate: number) {\r\n const monthlyData: ChartBaseData[] = []\r\n\r\n const fromTimestamp = getDate(startOfMonth(getDate(fromDate))).getTime()\r\n const toTimestamp = getDate(endOfMonth(getDate(toDate))).getTime()\r\n for (let index = 0; index < quote.date.length; index++) {\r\n const currentTimestamp = quote.date[index] * 1000\r\n const currentClose = quote.close[quote.barToDataIndex[index]]\r\n\r\n if (fromTimestamp > currentTimestamp || currentTimestamp > toTimestamp) continue\r\n\r\n monthlyData.push({ date: currentTimestamp, close: currentClose })\r\n }\r\n\r\n return monthlyData\r\n}\r\n","import classnames from 'classnames'\r\n\r\nimport { formatDate } from '../../../../app/header/utils'\r\nimport { RedGreenMultiline, RedGreenText } from '../../../components/RedGreenText'\r\nimport { formatNumber } from '../../../util'\r\n\r\nexport interface QuotePriceProps {\r\n title?: string\r\n date?: Date | null\r\n dateLabel?: string | null\r\n price: number\r\n changeUsd: number\r\n changePct: number\r\n}\r\n\r\nexport function QuotePrice({ title, date, dateLabel, price, changeUsd, changePct }: QuotePriceProps) {\r\n const fractions = !isNaN(price) && price < 1 ? 4 : 2\r\n const hasValue = changeUsd && Number.isFinite(changeUsd)\r\n\r\n return (\r\n
\r\n {title &&
{title}
}\r\n\r\n {(date || dateLabel) && (\r\n \r\n {dateLabel ?? formatDate(date, '', 'MMM dd')}\r\n {date && (\r\n <>\r\n {' '}\r\n {formatDate(date, '', 'hh:mmaa')} ET\r\n \r\n )}\r\n \r\n )}\r\n\r\n
\r\n {formatNumber(price, { defaultValue: '—', fractions })}\r\n
\r\n \r\n \r\n
Dollar change
\r\n {formatNumber(changeUsd, { showPlusSign: true, fractions })}\r\n
\r\n %}\r\n >\r\n
Percentage change
\r\n {formatNumber(changePct)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import { useModelState } from '../../../../../app/charts-lib'\r\n\r\nconst CHANGE_UPATE_EVENTS = ['change', 'update']\r\nconst QUOTE_MODEL_CHANGE_EVENTS = [...CHANGE_UPATE_EVENTS, 'refetch', 'newerData']\r\n\r\nexport interface HeaderPricesContext {\r\n prevClose: number\r\n lastClose: number\r\n lastTime: number\r\n lastDate?: number\r\n afterClose: number\r\n afterTime: number\r\n}\r\n\r\nexport function useChartContextPrices(chartLayoutModel: any): HeaderPricesContext | null {\r\n const chartModel = useModelState(chartLayoutModel?.charts().first(), {\r\n watchProperties: ['quote'],\r\n listenOnEvents: CHANGE_UPATE_EVENTS,\r\n })\r\n const quoteModel = useModelState(chartModel?.quote() ?? null, {\r\n watchProperties: ['lastClose', 'prevClose', 'afterClose', 'afterTime'],\r\n listenOnEvents: QUOTE_MODEL_CHANGE_EVENTS,\r\n })\r\n\r\n if (!quoteModel) return null\r\n\r\n return {\r\n prevClose: quoteModel.prevClose,\r\n lastClose: quoteModel.lastClose,\r\n lastTime: quoteModel.lastTime,\r\n lastDate: quoteModel.lastDate,\r\n afterClose: quoteModel.afterClose,\r\n afterTime: quoteModel.afterTime,\r\n }\r\n}\r\n","import * as dateFns from 'date-fns'\r\nimport React from 'react'\r\n\r\nimport {\r\n Quote,\r\n useChartLayoutGlobalModelAsync,\r\n withCompleteLayoutModelInit,\r\n withQuotePolling,\r\n} from '../../../../../app/charts-lib'\r\nimport { formatDate, getDate } from '../../../../../app/header/utils'\r\nimport { QuotePortalContext } from '../Portal'\r\nimport { QuotePrice } from '../QuotePrice'\r\nimport { HeaderPricesContext, useChartContextPrices } from './hooks'\r\n\r\nexport function ChartContextQuoteHeader() {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const data = useChartContextPrices(chartLayoutModel)\r\n const hasData = !!data\r\n\r\n React.useEffect(() => {\r\n if (hasData) toggleStaticElement(true)\r\n\r\n return () => toggleStaticElement(false)\r\n }, [hasData, toggleStaticElement])\r\n\r\n return \r\n}\r\n\r\ninterface QuoteHeaderWithManualInitProps {\r\n chartLayoutModel: any\r\n config: any\r\n}\r\n\r\nfunction ManualInitQuoteHeaderComponent({ chartLayoutModel, config }: QuoteHeaderWithManualInitProps) {\r\n const { toggleStaticElement } = React.useContext(QuotePortalContext)\r\n const data = useChartContextPrices(chartLayoutModel)\r\n\r\n /**\r\n * We need to instantiate layout model in order to use quote refetch on page\r\n * without an actual chart (options.) We also need to manually create a chart model\r\n *\r\n * It is then correctly caught in `useChartContextPrices`\r\n */\r\n React.useEffect(() => {\r\n async function fetchAndMapInitialQuote() {\r\n for (const chartConfig of config.charts) {\r\n const modelProperties = Object.assign({}, chartConfig)\r\n\r\n modelProperties.chart_layout = chartLayoutModel\r\n delete modelProperties.panes\r\n if (modelProperties.refreshData == null) {\r\n modelProperties.refreshData = true\r\n }\r\n chartLayoutModel.charts().create(modelProperties)\r\n }\r\n\r\n const chart = chartLayoutModel.charts().first()\r\n\r\n const quote = await Quote.get({\r\n ticker: chart.ticker,\r\n instrument: chart.instrument,\r\n timeframe: chart.timeframe,\r\n options: { maxBars: 0 },\r\n })\r\n\r\n chart.updateAttributes({ quote })\r\n toggleStaticElement()\r\n }\r\n\r\n fetchAndMapInitialQuote()\r\n }, [chartLayoutModel, config.charts, toggleStaticElement])\r\n\r\n return \r\n}\r\n\r\nexport const ManualInitQuoteHeader = withCompleteLayoutModelInit(withQuotePolling(ManualInitQuoteHeaderComponent))\r\n\r\nexport function QuoteHeaderContent({ data }: { data: HeaderPricesContext | null }) {\r\n if (!data) return null\r\n\r\n const isChange = Number.isFinite(data.prevClose)\r\n const isAfterChange = Number.isFinite(data.afterClose) && data.afterClose !== data.lastClose\r\n const lastTime = data.lastTime ? getDate(data.lastTime * 1000) : null\r\n const lastDate = !lastTime && data.lastDate ? formatDate(data.lastDate, 'yyyyMMdd', 'MMM dd, yyyy') : null\r\n const afterDate = data.afterTime ? getDate(data.afterTime * 1000) : null\r\n\r\n let afterhoursTitle\r\n if (lastTime && afterDate) {\r\n if (dateFns.isBefore(afterDate, lastTime)) afterhoursTitle = 'Premarket'\r\n else afterhoursTitle = 'Aftermarket'\r\n }\r\n\r\n return (\r\n <>\r\n {isChange && (\r\n \r\n )}\r\n {isAfterChange && (\r\n \r\n )}\r\n \r\n )\r\n}\r\n","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var dateToCompare = toDate(dirtyDateToCompare);\n return date.getTime() < dateToCompare.getTime();\n}","import * as d3 from 'd3'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nexport interface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n title?: string\r\n data: Bar[]\r\n width?: number\r\n height?: number\r\n valueFormatter?: (value: number) => string\r\n xAxisRotate?: boolean\r\n marginRight?: number\r\n className?: string\r\n}\r\n\r\nexport default class BarChart extends Component {\r\n svgRef: RefObject = createRef()\r\n\r\n declare _prevData: Bar[]\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const { data, title } = this.props\r\n if (data === this._prevData) {\r\n return\r\n }\r\n this._prevData = data\r\n this.svgRef.current!.innerHTML = ''\r\n\r\n const xAxisRotate = this.props.xAxisRotate === true\r\n\r\n const margin = {\r\n top: title ? 20 : 10,\r\n right: this.props.marginRight || 60,\r\n bottom: xAxisRotate ? 70 : 20,\r\n left: 15,\r\n }\r\n const totalWidth = this.props.width || 440\r\n const totalHeight = this.props.height || 330\r\n const width = totalWidth - margin.left - margin.right\r\n const height = totalHeight - margin.top - margin.bottom\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .rangeRound([0, width])\r\n .padding(0.1)\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))!])\r\n .nice()\r\n const yFormat = this.props.valueFormatter ? this.props.valueFormatter : y.tickFormat()\r\n\r\n const svg = d3\r\n .select(this.svgRef.current)\r\n .property('value', [])\r\n .append('g')\r\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\r\n\r\n const xAxis = d3.axisBottom(x)\r\n const yAxis = d3.axisRight(y).ticks(height > 200 ? 10 : 5)\r\n\r\n const makeYLines = () => d3.axisLeft(y)\r\n // @ts-expect-error - tickFormat arg can be any string\r\n svg.append('g').attr('class', 'grid').call(makeYLines().tickSize(-width).tickSizeOuter(0).tickFormat(''))\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'x-axis axis')\r\n .attr('transform', 'translate(0,' + height + ')')\r\n .call(xAxis)\r\n\r\n svg\r\n .selectAll('.x-axis text')\r\n .style('text-anchor', xAxisRotate ? 'end' : 'middle')\r\n .attr('dx', xAxisRotate ? '-.8em' : 0)\r\n .attr('dy', xAxisRotate ? '.15em' : '0.8em')\r\n .attr('transform', 'rotate(' + (xAxisRotate ? -65 : 0) + ')')\r\n\r\n svg\r\n .append('g')\r\n .attr('class', 'y-axis axis')\r\n .attr('transform', 'translate(' + width + ', 0)')\r\n .call(yAxis)\r\n\r\n if (title) {\r\n svg\r\n .append('text')\r\n .attr('class', 'bar-chart-title')\r\n .attr('x', 4)\r\n .attr('y', -5)\r\n .attr('text-anchor', 'start')\r\n .text(title)\r\n }\r\n\r\n const getHeight = (d: Bar) => {\r\n let height = Math.abs(y(d.value ?? 0) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n }\r\n const isOutside = (height: number) => height < 14\r\n const bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', (d: Bar) => x(d.name)!)\r\n .attr('y', (d: Bar) => y(Math.max(0, d.value)))\r\n .attr('height', getHeight)\r\n .attr('width', x.bandwidth())\r\n .attr('ry', FinvizSettings?.hasRedesignEnabled ? 2 : 0)\r\n\r\n svg\r\n .selectAll('.bar-label')\r\n .data(data)\r\n .enter()\r\n .append('text')\r\n .attr('class', 'divergence')\r\n .attr('x', (d: Bar) => x(d.name)! + x.bandwidth() / 2)\r\n .attr('y', (d: Bar) => {\r\n const height = getHeight(d)\r\n const outside = isOutside(height)\r\n if (d.value < 0) {\r\n return y(Math.max(0, d.value)) + height + (outside ? 12 : -4)\r\n }\r\n return y(Math.max(0, d.value)) + (outside ? -4 : 12)\r\n })\r\n .attr('fill', (d: Bar) => (!FinvizSettings.hasDarkTheme && isOutside(getHeight(d)) ? 'black' : 'white'))\r\n .attr('text-anchor', 'middle')\r\n .attr('font-size', '10px')\r\n .text((d: Bar) => (d.value !== null ? yFormat(d.value) : ''))\r\n\r\n this.svgRef.current!.style.width = totalWidth + 'px'\r\n this.svgRef.current!.style.height = totalHeight + 'px'\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n","export enum StatementsDataEnum {\r\n yoyChange = 'yoyChange',\r\n yoyChangePct = 'yoyChangePct',\r\n}\r\n\r\nexport enum StatementsTimeframeEnum {\r\n annual = 'annual',\r\n quarterly = 'quarterly',\r\n}\r\n\r\nexport const SETTINGS_COOKIE_KEY = 'quoteStatementsTableSettings'\r\n\r\nexport const DEFAULT_SETTINGS = {\r\n [StatementsDataEnum.yoyChange]: false,\r\n [StatementsDataEnum.yoyChangePct]: false,\r\n statementsTimeframe: StatementsTimeframeEnum.annual,\r\n}\r\n\r\nexport type StatementsType = {\r\n [StatementsDataEnum.yoyChange]: boolean\r\n [StatementsDataEnum.yoyChangePct]: boolean\r\n statementsTimeframe: StatementsTimeframeEnum\r\n}\r\n","import * as Ariakit from '@ariakit/react'\r\nimport classnames from 'classnames'\r\nimport * as d3 from 'd3'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport { decodeQueryString } from 'finviz-charts/app/utils/query_string'\r\nimport * as React from 'react'\r\nimport { Component, RefObject, createRef } from 'react'\r\n\r\nimport { AdTag, getInvestingChannelPage } from '../../../../../app/shared/components/Ads'\r\nimport { Icon } from '../../../../components'\r\nimport { ChipSwitch, ChipSwitchButton } from '../../../../components/ChipSwitch'\r\nimport { RedGreenText } from '../../../../components/RedGreenText'\r\nimport { FinancialsTableContextProvider, useFinancialsTableContext } from '../../../../components/financials-table'\r\nimport { getValue, setValue } from '../../../../services/local-storage'\r\nimport { shortFormatNumber } from '../../../../util'\r\nimport BarChartBig from '../barChart'\r\nimport {\r\n DEFAULT_SETTINGS,\r\n SETTINGS_COOKIE_KEY,\r\n StatementsDataEnum,\r\n StatementsTimeframeEnum,\r\n StatementsType,\r\n} from './constants'\r\n\r\ninterface Bar {\r\n name: string\r\n value: number\r\n}\r\n\r\ninterface BarChartProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChart extends Component {\r\n svgRef: RefObject\r\n\r\n constructor(props: BarChartProps) {\r\n super(props)\r\n this.svgRef = createRef()\r\n }\r\n\r\n componentDidMount() {\r\n this.renderChart()\r\n }\r\n\r\n componentDidUpdate() {\r\n this.renderChart()\r\n }\r\n\r\n renderChart() {\r\n const data = this.props.data\r\n\r\n const barWidth = 3\r\n const width = data.length * (barWidth + 1)\r\n const height = 16\r\n\r\n const x = d3\r\n .scaleBand()\r\n .domain(data.map((d) => d.name))\r\n .range([0, width])\r\n\r\n let min = d3.min(data, (d: Bar) => d.value)!\r\n if (min < 0) {\r\n min = d3.min(data, (d: Bar) => Math.min(d.value, -d.value))!\r\n } else {\r\n min = 0\r\n }\r\n\r\n const y = d3\r\n .scaleLinear()\r\n .range([height, 0])\r\n .domain([min, d3.max(data, (d: Bar) => Math.abs(d.value))] as [number, number])\r\n .nice()\r\n .unknown(height / 2)\r\n\r\n const svg = d3.select(this.svgRef.current).property('value', [])\r\n\r\n const bars = svg.selectAll('.bar').data(data)\r\n bars\r\n .enter()\r\n .append('rect')\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars\r\n .transition()\r\n .attr('class', function (d: Bar) {\r\n return 'bar bar--' + (d.value < 0 ? 'negative' : 'positive')\r\n })\r\n .attr('x', function (d: Bar) {\r\n return x(d.name)!\r\n })\r\n .attr('y', function (d: Bar) {\r\n return y(Math.max(0, d.value))\r\n })\r\n .attr('height', function (d: Bar) {\r\n let height = Math.abs(y(d.value) - y(0))\r\n if (d.value > 0 || d.value < 0) {\r\n height = Math.max(height, 0.5)\r\n }\r\n return height\r\n })\r\n .attr('width', barWidth)\r\n bars.exit().remove()\r\n\r\n this.svgRef.current!.style.width = width + 'px'\r\n this.svgRef.current!.style.height = height + 'px'\r\n }\r\n\r\n render() {\r\n return \r\n }\r\n}\r\n\r\nfunction EliteHoverAd() {\r\n return (\r\n
\r\n
\r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium features. Real-time\r\n quotes, advanced visualizations, historical statements, and much more.\r\n

\r\n \r\n Learn more\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\ninterface BarChartWrapperProps {\r\n data: Bar[]\r\n}\r\n\r\nclass BarChartWrapper extends Component {\r\n state = {\r\n hover: false,\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n x.value !== null)}>\r\n \r\n \r\n \r\n {FinvizSettings.hasUserPremium ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst DEFAULT_SOURCE = 'F'\r\n\r\nconst _getDefaultSource = (): 'F' | 'R' => {\r\n if (!FinvizSettings.hasUserPremium) {\r\n return DEFAULT_SOURCE\r\n }\r\n\r\n return getValue('statements-source', DEFAULT_SOURCE) === 'R' ? 'R' : 'F'\r\n}\r\n\r\nconst getTimeframeFromStatementsSettingsTimeframe = (statementsTimeframe: StatementsTimeframeEnum) => {\r\n if (statementsTimeframe === StatementsTimeframeEnum.quarterly) {\r\n return 'Q'\r\n }\r\n\r\n // statementsTimeframe === StatementsTimeframeEnum.annual or fallback\r\n return 'A'\r\n}\r\n\r\ninterface StatementsState {\r\n source: 'F' | 'R'\r\n sheet: string\r\n currency: string | null\r\n data: Record | null\r\n}\r\n\r\nfunction StatementsComponent() {\r\n const { settings } = useFinancialsTableContext()\r\n const pageRef = React.useRef(getInvestingChannelPage())\r\n\r\n const [state, setState] = React.useState({\r\n source: _getDefaultSource(),\r\n sheet: 'I',\r\n currency: null,\r\n data: null,\r\n })\r\n\r\n const timeframe = getTimeframeFromStatementsSettingsTimeframe(settings.statementsTimeframe)\r\n\r\n const { data } = state\r\n const hasData = data && !data.error && Object.keys(data).length > 0\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n\r\n const _fetch = async () => {\r\n const { source, sheet } = state\r\n const { t } = decodeQueryString()\r\n\r\n try {\r\n const response = await fetch(`/api/statement.ashx?t=${t}&so=${source}&s=${sheet}${timeframe}`)\r\n const json = await response.json()\r\n\r\n setState({\r\n ...state,\r\n currency: json.currency,\r\n data: json.error ? json : json.data,\r\n })\r\n } catch {}\r\n }\r\n\r\n React.useEffect(() => {\r\n pageRef.current = getInvestingChannelPage()\r\n pageRef.current?.create()\r\n\r\n return () => {\r\n pageRef.current?.destroy()\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n _fetch()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.sheet, state.source, timeframe])\r\n\r\n const _renderSheetLink = (id: string, text: string) => (\r\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\r\n {\r\n e.preventDefault()\r\n setState({\r\n ...state,\r\n sheet: id,\r\n })\r\n }}\r\n >\r\n {text}\r\n \r\n )\r\n\r\n if (data === null) {\r\n return null\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {FinvizSettings.hasUserPremium && (\r\n // TODO fix classname when css mixins removal is merged\r\n {\r\n e.preventDefault()\r\n const source = e.target.value === 'R' ? 'R' : 'F'\r\n setState({\r\n ...state,\r\n source: source,\r\n })\r\n setValue('statements-source', source, DEFAULT_SOURCE, false)\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n {FinvizSettings.hasUserPremium && <>   }\r\n\r\n \r\n {_renderSheetLink('I', 'Income Statement')} {' '}\r\n {_renderSheetLink('B', 'Balance Sheet')} {' '}\r\n {_renderSheetLink('C', 'Cash Flow')}\r\n \r\n \r\n \r\n
\r\n {hasData && }\r\n {!hasData && (\r\n \r\n \r\n \r\n \r\n The statement is not available. Try switching between FactSet-Reuters source.\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nfunction Statements() {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nfunction StatementsSettingsSection() {\r\n const { settings, setSettings } = useFinancialsTableContext()\r\n\r\n const toggleSetting = (key: keyof StatementsType, value: StatementsType[keyof StatementsType]) => {\r\n setSettings({\r\n ...settings,\r\n [key]: value,\r\n })\r\n }\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n return (\r\n
\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChange, !settings[StatementsDataEnum.yoyChange])\r\n }}\r\n >\r\n {yoyGrowthLabel}\r\n \r\n {\r\n toggleSetting(StatementsDataEnum.yoyChangePct, !settings[StatementsDataEnum.yoyChangePct])\r\n }}\r\n >\r\n {`${yoyGrowthLabel} %`}\r\n \r\n \r\n\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.annual)\r\n }}\r\n >\r\n Annual\r\n \r\n {\r\n toggleSetting('statementsTimeframe', StatementsTimeframeEnum.quarterly)\r\n }}\r\n >\r\n Quarterly\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nfunction isChartable(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Period Length':\r\n return false\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction parseData(data: Record, skipFirst: boolean) {\r\n const parsed: any = {}\r\n Object.keys(data).forEach((key) => {\r\n parsed[key] = data[key]\r\n .map((value, index) => {\r\n if (isChartable(key)) {\r\n let parsedValue\r\n if (value === '') {\r\n parsedValue = null\r\n } else {\r\n parsedValue = parseFloat(value.replace(/,/g, ''))\r\n }\r\n return {\r\n name: data['Period End Date'][index],\r\n value: parsedValue,\r\n }\r\n }\r\n return null\r\n })\r\n .slice(skipFirst ? 1 : 0)\r\n })\r\n\r\n return parsed as Record>\r\n}\r\n\r\nfunction isHighlightRow(label: string) {\r\n switch (label) {\r\n case 'Period End Date':\r\n case 'Total Revenue':\r\n case 'Total Premiums Earned':\r\n case 'Interest Income':\r\n case 'Gross Profit':\r\n case 'Total Operating Expense':\r\n case 'Operating Income':\r\n case 'Net Income Before Taxes':\r\n case 'Net Income':\r\n case 'Total Current Assets':\r\n case 'Total Assets':\r\n case 'Total Current Liabilities':\r\n case 'Total Liabilities':\r\n case 'Total Equity':\r\n case 'Total Liabilities and Equity':\r\n case 'Cash from Operating Activities':\r\n case 'Cash from Investing Activities':\r\n case 'Cash from Financing Activities':\r\n case 'Net Change in Cash':\r\n case 'Price To Earnings Ratio':\r\n case 'Price to Book Ratio':\r\n case 'Price to Free Cash Flow':\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\ntype StatementsTableProps = Pick\r\n\r\nfunction StatementsTable({ data, currency }: StatementsTableProps) {\r\n const { settings } = useFinancialsTableContext()\r\n const skipFirst = data?.['Period End Date'][0] === 'TTM'\r\n const parsedData = data ? parseData(data, skipFirst) : null\r\n\r\n const yoyData = React.useMemo(\r\n () =>\r\n parsedData\r\n ? Object.entries(parsedData).reduce<\r\n Record<\r\n string,\r\n {\r\n change: Array\r\n changePct: Array\r\n }\r\n >\r\n >((acc, [key, values]) => {\r\n if (!isChartable(key)) {\r\n return acc\r\n }\r\n const yoyData: Array<{ change: number | null; changePct: number | null }> = []\r\n let lastValue: number | null = null\r\n\r\n // values are in DESC order\r\n const reversedValues = [...values].reverse()\r\n\r\n reversedValues.forEach(({ value }) => {\r\n const isValidValue = typeof value === 'number'\r\n if (!isValidValue || lastValue === null || lastValue === 0) {\r\n yoyData.push({ change: null, changePct: null })\r\n } else {\r\n const change = value - lastValue\r\n yoyData.push({ change, changePct: (change / Math.abs(lastValue)) * 100 })\r\n }\r\n\r\n if (isValidValue) lastValue = value\r\n })\r\n\r\n const reversedYoyData = [...yoyData].reverse()\r\n return {\r\n ...acc,\r\n [key]: {\r\n change: reversedYoyData.map(({ change }) => change),\r\n changePct: reversedYoyData.map(({ changePct }) => changePct),\r\n },\r\n }\r\n }, {})\r\n : {},\r\n [parsedData]\r\n )\r\n\r\n const yoyGrowthLabel = React.useMemo(() => {\r\n const isQuarterlyTimeframe = settings.statementsTimeframe === StatementsTimeframeEnum.quarterly\r\n\r\n if (isQuarterlyTimeframe) {\r\n return 'QoQ Growth'\r\n }\r\n\r\n return 'YoY Growth'\r\n }, [settings.statementsTimeframe])\r\n\r\n if (!data || !parsedData) return null\r\n\r\n const hasRedesignEnabled = FinvizSettings?.hasRedesignEnabled\r\n const cellClass = classnames('align-top', {\r\n 'snapshot-td2 h-6 !leading-4 !pt-[4px]': !hasRedesignEnabled,\r\n })\r\n const adRowIndexStart = !hasRedesignEnabled && data['Period Length'] ? 2 : 1\r\n\r\n return (\r\n <>\r\n \r\n \r\n {Object.keys(data).map((key, rowIndex) => {\r\n const hasYoYData = !!yoyData[key] && data[key].some((value) => value)\r\n return (\r\n \r\n \r\n {key}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n {yoyGrowthLabel}\r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n {`${yoyGrowthLabel} %`}\r\n \r\n )}\r\n \r\n \r\n {isChartable(key) && }\r\n \r\n {data[key].map((value, index) => {\r\n const changeIndex = skipFirst ? index - 1 : index\r\n const yoyChangeValue = yoyData[key]?.change[changeIndex] ?? null\r\n const yoyChangePctValue = yoyData[key]?.changePct[changeIndex] ?? null\r\n if (!FinvizSettings.hasUserPremium) {\r\n if (rowIndex === adRowIndexStart && index === 3) {\r\n return (\r\n \r\n \r\n \r\n

Upgrade your FINVIZ experience

\r\n

\r\n Join thousands of traders who make more informed decisions with our premium\r\n features. Real-time quotes, advanced visualizations, historical statements, and much\r\n more.\r\n

\r\n \r\n Learn more\r\n \r\n \r\n )\r\n }\r\n if (\r\n index > 2 &&\r\n ((hasRedesignEnabled && key !== 'Period End Date') ||\r\n (key !== 'Period End Date' && key !== 'Period Length'))\r\n ) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n \r\n {value}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChange] && (\r\n <>\r\n
\r\n \r\n {shortFormatNumber(yoyChangeValue, { defaultValue: '—' })}\r\n \r\n \r\n )}\r\n {hasYoYData && settings[StatementsDataEnum.yoyChangePct] && (\r\n <>\r\n
\r\n \r\n {yoyChangePctValue?.toFixed(2) ?? '—'}\r\n \r\n \r\n )}\r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
values in Millions, {currency}
\r\n \r\n )\r\n}\r\n\r\nexport default Statements\r\n","import classNames from 'classnames'\r\nimport { isRedesignEnabled } from 'finviz-charts/app/utils'\r\nimport React from 'react'\r\n\r\nimport { ChartTypesSelect, StockDetailTimeframeBar } from '../../../../app/charts-lib'\r\nimport { Button } from '../../../components'\r\nimport { SpecificChartFunctionality } from '../../../constants'\r\nimport { QuoteContext } from '../QuoteContext'\r\n\r\ninterface Props {\r\n isStockDetailUpdating: boolean\r\n}\r\n\r\nconst hasRedesign = isRedesignEnabled()\r\nconst isPremium = window.FinvizSettings.hasUserPremium\r\n\r\nexport function StaticChartHeader({ isStockDetailUpdating }: Props) {\r\n const { index, ticker, period } = React.useContext(QuoteContext)\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n Share\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import * as React from 'react'\r\n\r\nimport { round } from '../../../../app/backtest/utils'\r\nimport { parseRouteInitData } from '../../../util-routing'\r\nimport { QuoteContext } from '../QuoteContext'\r\nimport BarChart, { Bar } from './barChart'\r\n\r\nfunction convertData(endYear: number, values: any[]) {\r\n return values.map((value, index) => ({ name: endYear - index, value })).reverse() as unknown as Bar[]\r\n}\r\n\r\ninterface FAChartProps {\r\n year: number\r\n data: number[]\r\n title: string\r\n smallRoundPlaces?: number\r\n largeRoundPlaces?: number\r\n smallScale?: number\r\n largeScale?: number\r\n smallTitleSufix?: string\r\n largeTitleSufix?: string\r\n}\r\n\r\nfunction FAChart({\r\n year,\r\n data,\r\n title,\r\n smallRoundPlaces = 2,\r\n largeRoundPlaces = 0,\r\n smallScale = 1,\r\n largeScale = 1,\r\n smallTitleSufix = '',\r\n largeTitleSufix = '',\r\n}: FAChartProps) {\r\n const range = Math.max(...data.map((value) => Math.abs(value)).filter(Number))\r\n const isLarge = Math.abs(range) >= 1000\r\n const scale = isLarge ? largeScale : smallScale\r\n const values = data.map((value) => {\r\n const rounded = round(scale * value, isLarge ? largeRoundPlaces : smallRoundPlaces)\r\n return value == null || Number.isNaN(rounded) ? null : rounded\r\n })\r\n\r\n return (\r\n round(value, isLarge ? largeRoundPlaces : smallRoundPlaces)}\r\n width={280}\r\n height={150}\r\n marginRight={37}\r\n className=\"is-fa\"\r\n />\r\n )\r\n}\r\n\r\nexport default function FundamentalCharts() {\r\n const { index } = React.useContext(QuoteContext)\r\n\r\n const routeData = React.useMemo(\r\n () =>\r\n parseRouteInitData<{ year: number; values: Array }>({\r\n elementId: `fa-init-data-${index}`,\r\n removeElement: false,\r\n }),\r\n [index]\r\n )\r\n\r\n if (!routeData) return null\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","export const etfHoldingsAsyncModule = {\r\n importFn: () => import(/* webpackChunkName: \"etf-holdings-widget\" */ './module-entry'),\r\n cacheKey: 'etf-holdings-widget',\r\n}\r\n","import { withNotificationContext } from '../../../components/notification'\r\nimport { Spinner } from '../../../components/spinner'\r\nimport { useAsyncModule } from '../../../services/async-modules-utils'\r\nimport { etfHoldingsAsyncModule } from './async-modules'\r\n\r\nfunction LoadingFallback() {\r\n const widgetClass =\r\n 'ml-3 mt-3 flex max-h-85 min-h-85 min-w-152 max-w-175 shrink grow basis-0 rounded-md border border-primary justify-center items-center'\r\n return (\r\n
\r\n {Array.from(Array(2)).map((_, index) => (\r\n
\r\n \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nfunction ETFHoldings() {\r\n const [etfHoldingsModule] = useAsyncModule({\r\n ...etfHoldingsAsyncModule,\r\n shouldLoadModule: true,\r\n errorSeverity: 'high',\r\n })\r\n const ETFHoldingsComponent = etfHoldingsModule?.ETFHoldings\r\n return ETFHoldingsComponent ? : \r\n}\r\n\r\nexport default withNotificationContext(ETFHoldings)\r\n","import * as React from 'react'\r\n\r\nimport { QuoteNavigation } from './Navigation'\r\nimport { QuoteContext } from './QuoteContext'\r\nimport { Perf } from './components/ComparePerformance'\r\nimport { FundFlowsChart } from './components/FundFlowsChart'\r\nimport { InsiderTradingVolumeChart } from './components/InsiderTradingChart'\r\nimport { QuotePortal } from './components/Portal'\r\nimport { ChartContextQuoteHeader, ManualInitQuoteHeader } from './components/Price'\r\nimport { QuoteChart } from './components/QuoteChart'\r\nimport Statements from './components/Statements/statements'\r\nimport { StaticChartHeader } from './components/StaticChartHeader'\r\nimport FundamentalCharts from './components/fundamentalCharts'\r\nimport EtfHoldings from './etf-holdings'\r\nimport { QuoteSubview, QuoteView } from './types'\r\n\r\nconst PRICE_STATIC = document.querySelectorAll('.js-quote-price-static')\r\nconst PRICE_ROOTS = document.querySelectorAll('.js-quote-price-root')\r\n\r\nconst NAVIGATION_STATIC = document.querySelectorAll('.js-quote-navigation-static')\r\nconst NAVIGATION_ROOTS = document.querySelectorAll('.js-quote-navigation-root')\r\n\r\nconst STATIC_CHART_HEADER_ROOTS = document.querySelectorAll('.quote-menu')\r\n\r\nconst FUNDAMENTAL_CHARTS_ROOTS = document.querySelectorAll('.js-quote-fa')\r\n\r\nconst STATEMENTS_ROOTS = document.querySelectorAll('#statements')\r\n\r\nconst INSIDER_CHART_ROOTS = document.querySelectorAll('.insider-trading-chart')\r\n\r\nexport function QuotePortalComponents({ isStockDetailUpdating }: { isStockDetailUpdating: boolean }) {\r\n const context = React.useContext(QuoteContext)\r\n\r\n const ETF_HOLDINGS_STATIC = document.querySelector(`.js-etf-holdings-static-${context.ticker}`)\r\n const ETF_HOLDINGS_ROOTS = document.querySelector(`.js-etf-holdings-root-${context.ticker}`)\r\n const isETF = !!ETF_HOLDINGS_ROOTS && !!ETF_HOLDINGS_STATIC\r\n\r\n return (\r\n <>\r\n {context.index === 0 && !window.isIdeaNotFoundPage && (\r\n \r\n \r\n {context.view === QuoteView.ChartDetail || context.subview === QuoteSubview.ShortInterest ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n\r\n {context.view === QuoteView.ChartDetail && (\r\n \r\n {context.index === 0 && }\r\n\r\n {context.index > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n\r\n {context.subview === QuoteSubview.ComparePerf && window.FinvizQuoteTickers && context.index === 0 && }\r\n\r\n {isETF && (\r\n \r\n <>\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import * as React from 'react'\r\nimport { useLocation } from 'react-router-dom'\r\n\r\nimport { decodeQueryString } from '../../../../app/queryString'\r\n\r\nconst CORRELATION_LINKS_CONTAINER_SELECTOR = 'js-quote-correlation-links-container'\r\nconst MULTITICKER_CHART_ELEMENT_SELECTOR = 'js-multi-ticker-chart'\r\nconst SET_SEARCH_EXT_SELECTOR = 'js-set-search-ext-argument'\r\n\r\nexport function useStockDetailUpdater() {\r\n const location = useLocation()\r\n const { p, ty } = decodeQueryString(location.search)\r\n const isInitializedRef = React.useRef(false)\r\n const [isStockDetailUpdating, setIsStockDetailUpdating] = React.useState(false)\r\n\r\n React.useEffect(() => {\r\n const multiTickerElements = document.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n const correlationElements = document.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n const abortController = new AbortController()\r\n\r\n if (isInitializedRef.current) {\r\n if (multiTickerElements.length > 0) setIsStockDetailUpdating(true)\r\n\r\n fetch(location.pathname + location.search, { signal: abortController.signal })\r\n .then((response) => response.text())\r\n .then((text) => {\r\n const virtualDOM = new DOMParser().parseFromString(text, 'text/html')\r\n\r\n // Multiticker update\r\n if (multiTickerElements.length > 0) {\r\n const multiTickerHtmlElements = Array.from(multiTickerElements) as HTMLImageElement[]\r\n const newMultiTickerHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(MULTITICKER_CHART_ELEMENT_SELECTOR)\r\n ) as HTMLImageElement[]\r\n\r\n if (newMultiTickerHtmlElements?.length === multiTickerHtmlElements.length) {\r\n multiTickerHtmlElements.forEach((element, index) => {\r\n element.onload = () => setIsStockDetailUpdating(false)\r\n element.src = newMultiTickerHtmlElements[index].src\r\n })\r\n } else {\r\n setIsStockDetailUpdating(false)\r\n }\r\n }\r\n\r\n // Correlation update\r\n const correlationLinksTableCellHtmlElements = Array.from(correlationElements) as HTMLTableCellElement[]\r\n const newCorrelationLinksTableCellHtmlElements = Array.from(\r\n virtualDOM.getElementsByClassName(CORRELATION_LINKS_CONTAINER_SELECTOR)\r\n ) as HTMLTableCellElement[]\r\n\r\n if (newCorrelationLinksTableCellHtmlElements?.length === correlationLinksTableCellHtmlElements.length) {\r\n correlationLinksTableCellHtmlElements.forEach((element, index) => {\r\n element.innerHTML = newCorrelationLinksTableCellHtmlElements[index].innerHTML\r\n })\r\n }\r\n\r\n // Search function update\r\n const newsearchFunctionWrapperElement = virtualDOM.getElementById(SET_SEARCH_EXT_SELECTOR) as HTMLDivElement\r\n if (newsearchFunctionWrapperElement?.dataset.setSearchExtArgument) {\r\n FinvizSettings.quoteSearchExt = newsearchFunctionWrapperElement.dataset.setSearchExtArgument\r\n }\r\n })\r\n .catch((err) => {\r\n setIsStockDetailUpdating(false)\r\n if (err.name !== 'AbortError') {\r\n Sentry.captureException(err)\r\n }\r\n })\r\n }\r\n isInitializedRef.current = true\r\n return () => {\r\n abortController.abort()\r\n }\r\n // We don't want to trigger effect on any location change just if period or type change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [p, ty])\r\n\r\n return { isStockDetailUpdating }\r\n}\r\n","import { useSearchParams } from 'react-router-dom'\r\n\r\nimport { useCheckNonIdeaChartMissingConfig } from '../../../hooks/use-check-non-idea-chart-missing-config'\r\nimport { QuotePortalComponents } from '../PortalComponents'\r\nimport { QuoteContextProvider } from '../QuoteContext'\r\nimport { useStockDetailUpdater } from '../hooks/use-stock-detail-updater'\r\nimport { useToggleRatings } from '../hooks/useToggleRatings'\r\nimport { QuoteQuery } from '../types'\r\n\r\nexport default function QuoteSharedWrapper() {\r\n useCheckNonIdeaChartMissingConfig()\r\n useToggleRatings()\r\n\r\n const [query] = useSearchParams()\r\n const tickers = query.get(QuoteQuery.Ticker)!.split(',')\r\n const { isStockDetailUpdating } = useStockDetailUpdater()\r\n\r\n return tickers.map((ticker, index) => (\r\n \r\n \r\n \r\n ))\r\n}\r\n","import * as React from 'react'\r\n\r\nexport function useToggleRatings() {\r\n React.useEffect(() => {\r\n const revealButtons = document.querySelectorAll('.js-reveal-ratings-button')\r\n\r\n function onToggleRatingsClick(ev: MouseEvent) {\r\n ev.preventDefault()\r\n\r\n const button = ev.currentTarget as HTMLElement\r\n const ratingsRowWithTable = button.previousElementSibling\r\n\r\n ratingsRowWithTable?.querySelectorAll('table tr').forEach((rating, index, rows) => {\r\n if (rating.classList.contains('is-last')) {\r\n rating.classList.remove('is-last')\r\n }\r\n\r\n rating.classList.remove('hidden')\r\n\r\n if (index === rows.length - 1) {\r\n rating.classList.add('is-last')\r\n }\r\n })\r\n\r\n button.classList.add('hidden')\r\n window.gtag && window.gtag('event', 'click', { event_category: 'reveal-ratings' })\r\n }\r\n\r\n revealButtons.forEach((button) => button.addEventListener('click', onToggleRatingsClick))\r\n\r\n return () => {\r\n revealButtons.forEach((button) => button.removeEventListener('click', onToggleRatingsClick))\r\n }\r\n }, [])\r\n}\r\n","import { isForexFuturesCryptoPage } from 'finviz-charts/app/utils/chart'\r\nimport * as React from 'react'\r\n\r\nimport {\r\n RootChartConfigObject,\r\n getIntradayChartConfig,\r\n useChartLayoutGlobalModelAsync,\r\n useModelState,\r\n} from '../../../../app/charts-lib'\r\nimport { TIMEFRAME } from '../../../constants'\r\nimport { useWindowSize } from '../../../hooks/use-window-size'\r\n\r\nexport function getChartLayoutSizeConfig(\r\n layoutConfig: Pick<\r\n RootChartConfigObject,\r\n 'idea' | 'barWidth' | 'barMargin' | 'charts' | 'specificChartFunctionality'\r\n >,\r\n p = TIMEFRAME.d\r\n) {\r\n const { clientWidth } = document.body\r\n const { premarket, aftermarket, dateRange } = layoutConfig.charts[0]\r\n const maxChartWidth = clientWidth - 40 // 40px left right chart padding = (19px * 2 for margin left/right) + (1px * 2 for border)\r\n let width = 990\r\n let barWidth = 3\r\n let barMargin = 1\r\n let timeframeMinutes = 0\r\n const isForexFuturesCrypto =\r\n layoutConfig.specificChartFunctionality && isForexFuturesCryptoPage(layoutConfig.specificChartFunctionality)\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n timeframeMinutes = 1\r\n barWidth = 1\r\n if (premarket || aftermarket || clientWidth < 1650) {\r\n barMargin = 0\r\n }\r\n break\r\n case TIMEFRAME.i2:\r\n timeframeMinutes = 2\r\n break\r\n case TIMEFRAME.i3:\r\n timeframeMinutes = 3\r\n if (premarket && aftermarket && clientWidth <= 1505) {\r\n barWidth = 2\r\n }\r\n break\r\n case TIMEFRAME.i5:\r\n timeframeMinutes = 5\r\n barWidth = 5\r\n barMargin = clientWidth >= 1100 ? 2 : 1\r\n break\r\n case TIMEFRAME.i10:\r\n width = 1058 // 39bars per day * 5days * 5px per bar + 35px left offset + 48px right offset\r\n barMargin = 0\r\n break\r\n case TIMEFRAME.i15:\r\n case TIMEFRAME.i30:\r\n width = 1019\r\n break\r\n case TIMEFRAME.h:\r\n width = 1008\r\n break\r\n case TIMEFRAME.h2:\r\n case TIMEFRAME.h4:\r\n width = 1020\r\n break\r\n case TIMEFRAME.d:\r\n width = 1282\r\n break\r\n case TIMEFRAME.w:\r\n case TIMEFRAME.m:\r\n width = 994\r\n break\r\n }\r\n\r\n switch (p) {\r\n case TIMEFRAME.i1:\r\n case TIMEFRAME.i2:\r\n case TIMEFRAME.i3:\r\n case TIMEFRAME.i5:\r\n const commonProps = {\r\n timeframeMinutes,\r\n barWidthWithMargin: barWidth + 2 + barMargin,\r\n hasAftermarket: aftermarket,\r\n hasPremarket: premarket,\r\n }\r\n width = getIntradayChartConfig({\r\n ...commonProps,\r\n maxWidth: maxChartWidth,\r\n canCropChart: !dateRange,\r\n }).chartWidthWithOffset\r\n break\r\n }\r\n\r\n // If FFC chart use DAILY type width\r\n if (isForexFuturesCrypto) width = 1282\r\n\r\n // If chart is wider than available space in vieport override width\r\n if (maxChartWidth <= width) {\r\n width = Math.max(994, maxChartWidth)\r\n if (p === TIMEFRAME.d) {\r\n barWidth = 2\r\n barMargin = 0\r\n width = 991\r\n }\r\n }\r\n\r\n // If idea chart or FFC chart use bar configs from layout\r\n if (layoutConfig.idea || isForexFuturesCrypto) {\r\n barWidth = layoutConfig.barWidth!\r\n barMargin = layoutConfig.barMargin!\r\n }\r\n\r\n return {\r\n width,\r\n barWidth,\r\n barMargin,\r\n }\r\n}\r\n\r\nexport function useChartLayoutWidthWatch() {\r\n const { innerWidth } = useWindowSize()\r\n const { chartLayoutModel } = useChartLayoutGlobalModelAsync()\r\n const unwatchedFirstChart = React.useMemo(() => chartLayoutModel?.charts().all()[0] ?? null, [chartLayoutModel])\r\n const chartModel = useModelState(unwatchedFirstChart, { watchProperties: ['quote'] })\r\n const quote = useModelState(chartModel?.quote() ?? null, { watchProperties: ['ticker', 'timeframe', 'isFetching'] })\r\n const ideaId = chartLayoutModel?.idea?.id\r\n\r\n React.useEffect(() => {\r\n const settings = !ideaId ? chartLayoutModel?.settings : null\r\n const timeframe = quote?.timeframe\r\n if (chartLayoutModel && timeframe && settings) {\r\n const { width, barWidth, barMargin } = getChartLayoutSizeConfig(chartLayoutModel.toConfig(), timeframe)\r\n const newSettings = JSON.parse(JSON.stringify(settings))\r\n newSettings.ChartSettings.center.barWidth = barWidth\r\n newSettings.IndicatorSettings.center.barWidth = barWidth\r\n newSettings.ChartSettings.center.barMargin = barMargin\r\n newSettings.IndicatorSettings.center.barMargin = barMargin\r\n chartLayoutModel.updateAttributes({ width, settings: newSettings })\r\n }\r\n // We don't want to trigger this effect on any chartLayoutModel change\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [quote?.premarket, quote?.aftermarket, quote?.timeframe, ideaId, innerWidth])\r\n}\r\n","'use client';\nimport { createContext, Component, createElement, isValidElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback === null || isValidElement(fallback)) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n"],"names":["round","n","places","arguments","length","undefined","Math","Number","toFixed","format","totalReturn","maxDrawdown","sharpeRatio","calmarRatio","CAGR","cagr","volatility","numberOfTrades","positiveDays","negativeDays","bestMonth","worstMonth","figureSpace","BACKTEST_MIN_MAX_DATES","Object","freeze","min","Date","max","ETF_MARKET_CAP_LABEL","MARKET_CAP_VALUE","ETF_SECTOR_VALUE","ETF_INDUSTRY_IDS","xys","value","label","sizes","colors","indexes","sectors","industries","marketCaps","averageVolumes","DEFAULT_COLOR_SCALE","getValueWithFallback","values","fallback","_v$value","v","find","getDefaultValues","_query$rangeX","_query$rangeY","query","extendedFilters","state","x","y","size","color","idx","rangeX","rangeY","_query$tickers","_query$excludeTickers","sec","ind","cap","sh_avgvol","tickers","excludeTickers","decodeQueryString","decode","percentile","arr","excelPercentile","sequence","concat","sort","a","b","N","k","d","getXScale","data","width","d3","range","domain","nice","getYScale","height","_colorScales","getColorScale","colorOption","c","gradient","linearScale","colorScale","map","filter","isFinite","bubbleGradients","nullColor","i","abs","ScaleId","DayPerf","getSizeScale","r","getScales","generatePresetUrl","presetConfig","baseQuery","encodeQueryString","fromEntries","window","location","pathname","formatValue","finiteFormatting","absValue","getStaticChartConfig","_ref","ticker","timeframe","paneElements","specificChartFunctionality","SpecificChartFunctionality","default","colorsOverride","theme","getCustomColorsFromCookies","refreshData","layout","LayoutType","barWidth","barMargin","scrollable","editable","charts","premarket","aftermarket","dateRange","scale","ScaleType","Linear","leftOffset","instrument","Instrument","Stock","stretch","panes","elements","JSON","parse","getParsedCookies","IC_PUBLISHER_ID","AdTagName","tagDefinition","IC_TickerInContent","placements","style","minHeight","IC_MapsLeftRail","IC_Statements","IC_Groups","hasInvestingChannelAds","tracking","InvestingChannel","getInvestingChannelPage","page","create","_window$InvestingChan","InvestingChannelQueue","push","_window$FINVIZ_IC_UAT","_window$InvestingChan2","config","UAT","Run","e","console","error","destroy","_window$InvestingChan3","_page","useInvestingChannelAds","deps","React","AdTag","name","position","props","tagName","tagProps","placementName","_jsx","id","getInitChartConfig","initialConfig","initialTA","FinvizSettings","TA","stringify","hasUserPremium","Utils","isMobile","COTs","convertTa","ChipSwitch","children","rounding","_jsxs","className","Paragraph","child","_child$props$theme","type","Button","classnames","active","ChipSwitchButton","CartesianGrid","vertical","RechartsCartesianGrid","stroke","strokeDasharray","classNames","displayName","DATE_FORMAT_MMMdd","dateAxisFormatter","outFormat","parseAsNY","getTime","date","getDate","XAxis","RechartsXAxis","defaultProps","tickLine","axisLine","dy","tick","fontSize","fontWeight","fill","TICK_STYLE","YAxis","render","RechartsYAxis","this","_defineProperty","tickFormatter","shortFormatNumber","FinancialsTableContext","settings","setSettings","scrollInfo","useFinancialsTableContext","FinancialsTableContextProvider","cookieKey","defaultSettings","setScrollInfo","cookieValue","decodeURIComponent","getCookie","Provider","yPosition","scrollY","setCookieRequest","FinancialsTableRow","columns","subColumns","onVisibilityChange","isFirst","isLast","labelElement","labelColumnClassName","isSelected","subData","isLabelColumnSticky","TableBody","onMouseDown","TableRow","TableCell","hasLeading","align","TableAlign","Left","isSticky","Checkbox","readOnly","checked","column","_column$getColumnClas","getColumnClassName","call","renderColumn","item","index","array","FinancialsTable","tableHead","tableFooter","isTableFixed","Table","row","_row$id","FinancialsWidget","_data$0$values$length","_data$","header","hasStickyColumnWrapper","financialsTable","TableStickyColumnWrapper","hasBorder","shouldScrollToEnd","getYoYData","sortedData","parseInt","year","reduce","acc","_sortedData$value","_sortedData","prev","change","changePct","getMoMPercentageData","_ref2","_sortedData$value2","_sortedData2","getIsCompact","numOfCols","innerWidth","getHeatmapClassNames","useCheckNonIdeaChartMissingConfig","useLocation","search","isIdeaNotFoundPage","reload","useWindowSize","throttleWaitInMs","isWatching","setSize","clientWidth","document","documentElement","innerHeight","handleResize","throttle","addEventListener","cancel","removeEventListener","PADDING","getChartsDimensions","chartElementId","_box$width","_box$height","containerElement","getElementById","box","getBoundingClientRect","getChartConfig","idea","chartsDimensions","chartConfig","assign","FinvizChartsSettings","ideaChart","editors","newCharts","alignChartsToRight","periods","ranges","taConfig","getInstrumentForTicker","hasChartEvents","initIdeaQuotes","quotes","hasPatterns","includes","quote","hasOwnProperty","drawMinutesPerDay","marketStartMinutes","premarketLengthMinutes","aftermarketLengthMinutes","ideaID","Quote","QuoteContext","period","TIMEFRAME","view","subview","QuoteContextProvider","useSearchParams","get","QuoteQuery","Type","Period","contextValue","getQuoteView","getQuoteSubview","QuoteChart","configOverride","TAOverride","chartEl","CHART_ELEMENT_ID","useChartLayoutWidthWatch","globalChartConfig","ideaQuotes","quoteData","p","defaultPeriod","sizeConfig","getChartLayoutSizeConfig","hasDarkTheme","Theme","dark","light","quotePage","chart","_chart$dateRange","FREE_DATE_RANGES","current","ReactDOM","ChartLayoutWithGlobalState","parentElement","QuotePortalContext","rootElement","staticElement","toggleStaticElement","QuotePortal","staticElements","roots","context","elementIndex","NodeList","Array","isArray","isEnabled","setIsEnabled","elementToHide","elementToShow","enabled","hideElement","element","classList","add","showElement","remove","toggleElements","toggleFn","forEach","useToggleStaticElements","portalContextValue","prevValue","ErrorBoundary","onError","QuoteLinksContext","chartLayoutModel","URL","href","QuoteLinksWrapper","info","_chartLayoutModel$act","isPremium","useChartLayoutGlobalModelAsync","chartModel","useModelState","activeChart","watchProperties","generateChartLayoutRouterPath","useChartModelCustomDateRangeValues","origin","useChartTimeframePathWatch","NavigationLink","isEliteOnly","utmCampaign","getLink","reloadDocument","preserveQueryKeys","Ticker","DateRange","removeQueryKeys","additionalQueryValues","quoteContext","linkContext","linkUrl","getElitePageLink","getNavigationLinkUrl","toString","Link","to","CreateAlertLink","dialog","useDialogState","isVisible","useState","createAlertModule","useAsyncModule","createAlertAsyncModule","shouldLoadModule","CreateAlert","_Fragment","onClick","_window$gtag","_window","gtag","event_category","ctrlKey","metaKey","preventDefault","show","Dialog","Spinner","SaveToPortfolioLink","saveToPortfolioModule","saveToPortfolioAsyncModule","SaveToPortfolio","email","QuoteNavigation","hasShortInterest","dataset","shortinterest","QuoteView","ChartDetail","QuoteSubview","ComparePerf","ShortInterest","Financials","hasTrafficPageEnabled","Traffic","Options","LatestFilings","redesignEnabled","hasRedesignEnabled","colorScaleClass","monthNames","Chart","Component","constructor","shouldComponentUpdate","nextProps","arr1","arr2","arraysEqual","_tickerQuote$0$ticker","_tickerQuote$","tickerQuote","select","q","close","ChartElementType","PerfChart","fromDate","fromDay","toDate","toDay","overlays","quotePerf","ref","containerRef","opacity","ChartLayout","months","rows","groupsCount","ceil","tdClasses","trs","g","splice","month","col","monthIndex","parseFloat","total","cellPadding","cellSpacing","border","Perf","_this","super","_fetch","dailyQuotes","o","h","l","dateFromUnixTimestamp","open","high","low","volume","clearCachedData","updateAttributes","forceUpdate","async","isRefetch","t","setState","loading","all","fetchData","fetchType","QuoteFetchType","Refetch","NewerData","updateQuoteData","m","getAll","tickersInput","getSanitizedTicker","split","target","formattedDate","formatDateToStringUS","now","getFullYear","getMonth","padStart","substring","FinvizQuoteTickers","join","fromMonth","toMonth","minDate","dateFns","years","maxDate","from","monthsToShow","quotesPerf","obj","perf","cols","isNaN","onSubmit","_onSubmit","padding","onChange","top","right","display","DatePicker","newValue","_onDatePickerChange","_onMonthChange","bind","option","componentDidMount","refetchQuotes","componentWillUnmount","unbind","BarColor","BarInner","_BarColor","colorResult","barColor","neutral","Rectangle","red","green","Bar","RechartsBar","shape","getComposedData","radius","activeBar","isAnimationActive","ChartBox","ChartWrapperContext","ChartWrapper","isTooltipActive","setTooltipActive","onMouseEnter","onMouseLeave","ResponsiveContainer","LineColor","Line","lineColor","RechartsLine","dot","activeDot","connectNulls","CursorLine","points","TooltipRow","_formatValue","isActive","indicator","payload","TooltipInner","_formatTitle","formatTitle","_child$props$formatVa","rowPayload","dataKey","Tooltip","RechartsTooltip","content","offset","wrapperStyle","outline","zIndex","cursor","FlowsChartDataKeys","tooltipValueFormatter","formatted","shortFormatDollar","Aum","RedGreenText","rightContent","FundFlowsChart","initData","routeData","parseRouteInitData","elementId","removeElement","dateStrToTimestamp","ComposedChart","interval","yAxisId","tickCount","orientation","dataMin","dataMax","absMax","Flows","startOfMonth","dirtyDate","requiredArgs","setDate","setHours","CHART_HEIGHT","BAR_WIDTH","BAR_BORDER_RADIUS","STROKE_COLOR","LINE_COLOR","SALE_BAR_COLOR","BUY_BAR_COLOR","Y_TICK_STYLE","X_TICK_STYLE","TOOLTIP_WRAPPER_STYLE","CURSOR_STYLE","TRANSPARENT_CURSOR","BarType","BarColorMap","Buy","Sale","BarLabelMap","formatDateTitle","startDate","endDate","endOfMonth","toLocaleString","startDay","formatDataValue","barType","tradeCount","buyTransactionCount","saleTransactionCount","buyAggregated","saleAggregated","BarTooltipLabel","activeKey","ChartTooltip","_payload$","cursorPayload","insider","invisible","willChange","InsiderVolumeBar","newX","isCenteredBar","background","CustomCursor","numberOfDatapoints","cursorWidth","xAxisTickFormatter","InsiderTradingVolumeChart","_initData$data4","setIsActive","chartData","setChartData","setActiveKey","hasInsiderTradingHistory","_initData$data","some","urlTicker","_initData$data2","monthlyData","fromTimestamp","toTimestamp","currentTimestamp","currentClose","barToDataIndex","filterDataForChart","getInstrument","options","cachePredicate","_initData$data3","fetchQuoteData","commonProps","bar","xAxis","yAxis","barGap","barCategoryGap","xAxisId","hide","QuotePrice","title","dateLabel","price","changeUsd","fractions","hasValue","formatDate","formatNumber","defaultValue","RedGreenMultiline","showPlusSign","CHANGE_UPATE_EVENTS","QUOTE_MODEL_CHANGE_EVENTS","useChartContextPrices","_chartModel$quote","first","listenOnEvents","quoteModel","prevClose","lastClose","lastTime","lastDate","afterClose","afterTime","ChartContextQuoteHeader","hasData","QuoteHeaderContent","ManualInitQuoteHeader","withCompleteLayoutModelInit","withQuotePolling","modelProperties","chart_layout","maxBars","fetchAndMapInitialQuote","isChange","isAfterChange","afterDate","afterhoursTitle","dirtyDateToCompare","dateToCompare","BarChart","createRef","renderChart","componentDidUpdate","_FinvizSettings","_prevData","svgRef","innerHTML","xAxisRotate","margin","marginRight","totalWidth","totalHeight","rangeRound","yFormat","valueFormatter","tickFormat","svg","property","append","attr","ticks","tickSize","tickSizeOuter","selectAll","text","getHeight","_d$value","isOutside","enter","bandwidth","outside","StatementsDataEnum","StatementsTimeframeEnum","DEFAULT_SETTINGS","yoyChange","yoyChangePct","statementsTimeframe","annual","unknown","bars","transition","exit","EliteHoverAd","Icon","BarChartWrapper","hover","Ariakit","placement","showTimeout","disabled","portal","BarChartBig","DEFAULT_SOURCE","_getDefaultSource","getValue","getTimeframeFromStatementsSettingsTimeframe","quarterly","StatementsComponent","pageRef","source","sheet","currency","keys","_pageRef$current","_pageRef$current2","response","fetch","json","_renderSheetLink","paddingLeft","setValue","StatementsSettingsSection","StatementsTable","toggleSetting","key","yoyGrowthLabel","isRedesignEnabled","isChartable","isHighlightRow","_FinvizSettings2","skipFirst","parsedData","parsed","parsedValue","replace","slice","parseData","yoyData","entries","lastValue","reverse","_ref3","isValidValue","reversedYoyData","_ref4","_ref5","cellClass","adRowIndexStart","rowIndex","hasYoYData","_yoyData$key$change$c","_yoyData$key","_yoyData$key$changePc","_yoyData$key2","_yoyChangePctValue$to","changeIndex","yoyChangeValue","yoyChangePctValue","rowSpan","colSpan","hasRedesign","StaticChartHeader","isStockDetailUpdating","ChartTypesSelect","specificFunctionality","StockDetailTimeframeBar","chartIndex","isDateRangeAvailable","isLoadingOverride","isScrollIntoViewEnabled","leftContent","convertData","endYear","FAChart","smallRoundPlaces","largeRoundPlaces","smallScale","largeScale","smallTitleSufix","largeTitleSufix","isLarge","rounded","FundamentalCharts","etfHoldingsAsyncModule","importFn","cacheKey","LoadingFallback","_","withNotificationContext","etfHoldingsModule","errorSeverity","ETFHoldingsComponent","ETFHoldings","PRICE_STATIC","querySelectorAll","PRICE_ROOTS","NAVIGATION_STATIC","NAVIGATION_ROOTS","STATIC_CHART_HEADER_ROOTS","FUNDAMENTAL_CHARTS_ROOTS","STATEMENTS_ROOTS","INSIDER_CHART_ROOTS","QuotePortalComponents","ETF_HOLDINGS_STATIC","querySelector","ETF_HOLDINGS_ROOTS","isETF","EtfHoldings","Statements","CORRELATION_LINKS_CONTAINER_SELECTOR","MULTITICKER_CHART_ELEMENT_SELECTOR","SET_SEARCH_EXT_SELECTOR","QuoteSharedWrapper","revealButtons","onToggleRatingsClick","ev","button","currentTarget","ratingsRowWithTable","previousElementSibling","rating","contains","ty","isInitializedRef","setIsStockDetailUpdating","multiTickerElements","getElementsByClassName","correlationElements","abortController","AbortController","signal","then","virtualDOM","DOMParser","parseFromString","multiTickerHtmlElements","newMultiTickerHtmlElements","onload","src","correlationLinksTableCellHtmlElements","newCorrelationLinksTableCellHtmlElements","newsearchFunctionWrapperElement","setSearchExtArgument","quoteSearchExt","catch","err","Sentry","captureException","abort","useStockDetailUpdater","layoutConfig","body","maxChartWidth","timeframeMinutes","isForexFuturesCrypto","isForexFuturesCryptoPage","i1","i2","i3","i5","i10","i15","i30","h2","h4","w","barWidthWithMargin","hasAftermarket","hasPremarket","getIntradayChartConfig","maxWidth","canCropChart","chartWidthWithOffset","_chartLayoutModel$ide","unwatchedFirstChart","_chartLayoutModel$cha","ideaId","toConfig","newSettings","ChartSettings","center","IndicatorSettings","ErrorBoundaryContext","createContext","initialState","didCatch","resetErrorBoundary","getDerivedStateFromError","_this$props$onReset","_this$props","_len","args","_key","onReset","reason","componentDidCatch","_this$props$onError","_this$props2","prevProps","prevState","resetKeys","_this$props$onReset2","_this$props3","is","hasArrayChanged","next","fallbackRender","FallbackComponent","childToRender","createElement","isValidElement"],"sourceRoot":""}