systemview 1.13.8 → 1.14.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../SystemLynx/systemlynx/Dispatcher/Dispatcher.js","../../SystemLynx/systemlynx/Client/components/HeaderSetter.js","../../SystemLynx/systemlynx/HttpClient/browserClient.js","../../SystemLynx/systemlynx/Client/BrowserClient.js","../../SystemLynx/systemlynx/Client/components/loadConnectionData.js","../../SystemLynx/utils/throttle.js","../../SystemLynx/systemlynx/Client/components/BrowserClientModule.js","../../SystemLynx/systemlynx/Client/components/BrowserServiceRequestHandler.js","../../SystemLynx/client.js","ServiceContext.js","atoms/Textbox/Textbox.js","atoms/Link/Link.js","atoms/List/List.js","atoms/ExpandableIcon/ExpandableIcon.js","molecules/ExpandableList/ExpandableList.js","atoms/DocsIcon/DocsIcon.js","assets/saved-doc.png","assets/missing-doc.png","atoms/TestsIcon/TestsIcon.js","assets/test-saved.png","assets/test-missing.png","molecules/ServerModulesList/ServerModulesList.js","organisms/SystemNavigator/SystemNavigator.js","atoms/DescriptionBox/DescriptionBox.js","atoms/Button/Button.js","assets/clear.png","molecules/EditBox/EditBox.js","atoms/Title/Title.js","atoms/Markdown/Markdown.js","organisms/Documentation/Documentation.js","molecules/ExpandableSection/ExpandableSection.js","molecules/TestCaption/TestCaption.js","molecules/AutoCompleteBox/AutoCompleteBox.js","atoms/JsonTextBox/JsonTextBox.js","atoms/Selector/Selector.js","atoms/TypeSelector/TypeSelector.js","molecules/TargetSelector/TargetSelector.js","atoms/Toggle/Toggle.js","organisms/TestPanel/components/createMockFile.js","organisms/TestPanel/components/test-helpers.js","molecules/ValidationInput/validator.js","molecules/Args/Args.js","assets/test-icon.svg","assets/x.svg","atoms/RunTestIcon/index.js","assets/edit.png","molecules/ValidationInput/ValidationOptions.js","molecules/ValidationInput/ValidationInput.js","atoms/Count/index.js","organisms/TestPanel/Evaluations.js","assets/eval-icon.svg","organisms/ScratchPad/ScratchPad.js","organisms/TestContainer/TestContainer.js","organisms/TestPanel/components/Argument.class.js","organisms/MultiTestSection/MultiTestSection.js","organisms/TestPanel/BeforeTest/BeforeTest.js","organisms/TestPanel/AfterTest/AfterTest.js","organisms/TestPanel/MainTest/MainTest.js","organisms/TestPanel/EventsTest/EventsTest.js","organisms/TestPanel/components/Test.class.js","organisms/TestPanel/components/TestController.class.js","atoms/SaveIcon/SaveIcon.js","assets/icons-save-60.png","assets/check.svg","assets/error.svg","assets/arrow.png","assets/loading.gif","molecules/ValidationInput/ValidationMessages.js","molecules/TestSummary/index.js","organisms/TestPanel/components/FullTestController.js","organisms/SavedTests/transformTests.js","organisms/SavedTests/SavedTests.js","atoms/StatusIndicator/StatusIndicator.js","organisms/TestPanel/TestPanel.js","pages/SystemView/SystemView.js","assets/sysly.png","App.js","reportWebVitals.js","index.js","../../SystemLynx/systemlynx/Client/components/SocketDispatcher.js"],"names":["throttle","require","module","exports","events","systemContext","Dispatcher","this","emit","eventName","data","event","forEach","callback","apply","on","limit","interval","name","i","findIndex","fn","push","$clearEvent","filter","console","error","headers","setHeaders","options","Object","assign","axios","default","FormData","Client","request","method","url","body","toLowerCase","res","status","upload","formData","file","files","__arguments","form","append","JSON","stringify","post","loadConnectionData","SocketDispatcher","HeaderSetter","ClientModule","HttpClient","httpClient","loadService","cachedServices","forceReload","connData","Service","createService","Promise","resolve","serviceUrl","namespace","resetConnection","cb","modules","host","port","route","__setConnection","mod","wait","errors","reject","results","length","setTimeout","getData","func","resetTimer","callCount","args","headerSetter","ServiceRequestHandler","methods","connectionData","__connectionData","reconnectModule","protocol","match","getProtocol","isObject","value","Array","isArray","isEmpty","obj","getOwnPropertyNames","makeQuery","reduce","query","from","arguments","tryRequest","errCount","singleFileURL","multiFileURL","defaultURL","defaultHeaders","then","catch","err","ErrorHandler","isAxiosError","response","SystemLynxService","message","returnValue","createClient","createHttpClient","createDispatcher","systemlynx","window","ServiceContext","React","createContext","SystemViewService","connectedServices","setConnectedServices","Textbox","placeholderText","TextboxSubmit","text","setValue","disabled","defaultText","inputClassName","className","type","defaultValue","placeholder","onKeyDown","e","key","onChange","myLink","link","add_class","linkClick","to","List","children","ExpandIcon","isOpen","onClick","color","fontSize","size","style","ExpandableList","title","open","useState","setState","DocIcon","isSaved","src","alt","TestsIcon","ServerModulesList","projectCode","serviceId","selectedModuleName","selectedMethodName","specList","Fragment","map","isSelected","docs","includes","isSavedDoc","isSavedTest","tests","fontWeight","NavigationLinks","selectedServiceId","system","Link","href","target","rel","SystemNav","moduleName","methodName","useContext","serviceData","find","Plugin","SystemView","fetchProject","a","pc","getServices","history","useHistory","SearchInputSubmit","project","useEffect","DescriptionBox","id","ClearButton","Button","submit","EditBox","formSubmit","mainObject","hiddenForm","onCancel","stateChange","editMode","setEditMode","Title","CodeBlock","language","dracula","Markdown","remarkPlugins","remarkGfm","renderers","code","components","node","inline","props","exec","String","replace","PreTag","Documentation","service","documentation","doc","setDocument","fetchDocument","getDoc","DocTitle","variable_name","marginBottom","DocDescription","setText","saveDocument","setFormDisplay","saveDoc","ExpandableSection","lock","toggleExpansion","TestCaption","caption","useInput","AutoCompleteBox","suggestions","onSubmit","onBlur","filterSuggestion","requireSelection","filteredSuggestions","setFilteredSuggestions","activeSuggestionIndex","setActiveSuggestionIndex","showSuggestions","setShowSuggestions","input","setInput","inputRef","useRef","completeSuggestion","innerText","substr","SuggestionsListComponent","suggestion","index","userInput","unLinked","indexOf","keyCode","current","blur","ref","JsonTextBox","undefined","prettyJson","setPrettyJson","isJson","setIsJson","json","setJson","str","parse","Selector","values","selected_option","onSelect","controlledOption","option","TypeSelector","default_type","TargetSelector","controller","target_namespace","testIndex","arg_index","target_index","setTargetValue","getTargetSuggestions","Toggle","round","isChecked","checked","fileTypes","txt","csv","pdf","docx","xls","xlsx","ppt","pptx","jpg","jpeg","png","gif","svg","createMockFile","fileName","fileParts","split","fileExtension","pop","fileNameWithoutExtension","join","fileContent","blob","Blob","File","isTargetNamespace","test","targetValueFnRegex","isTargetValueFn","isEqualArrays","b","isNameAndArray","replaceLastIndex","nsp","insert","replaceAllIndices","mapNamespace","trim","parser","parseObject","keys","Error","get","newValue","clone","arr","randomIndex","min","max","Math","floor","random","randomItem","isFnRegEx","isFunction","strFn","isDateFunction","moment","toJSON","isMockFileFunction","isMockFilesFunction","parseArgs","evaluate","savedEval","shouldSave","getType","validations","expected_type","save","indexed","getErrors","validateResults","response_type","savedEvaluations","savedEvalClone","evaluations","getSavedIndices","new_nsp","n","r","splice","switchArrayIndices","savedIndices","parseInt","parseIndex","addEvaluation","evaluation","recursiveEval","getSavedEval","prop","objParser","sort","e1","e2","localeCompare","expected","received","validateNumber","validateDate","validateString","validateArray","validateBoolean","isValid","data_type","validateLength","item","concat","RegExp","v","num","bool","datetime","isSame","isAfter","isBefore","ArgData","arg","locked","input_type","setOpen","showData","is12","checkTargetValues","addTargetValue","editArg","deleteArg","ArgName","ExpandableIcon","ClassName","ArgDataForm","targetValues","jsonBoxVisible","setJsonBoxVisible","hideJsonTxb","inputChanged","jsonTextboxSubmit","new_object","jsonObjectSubmit","updated_src","new_value","source_map","unshift","parseTargetValues","onFocus","new_lines","new_height","height","hide","autoComplete","onAdd","onEdit","onDelete","displayObjectSize","displayDataTypes","collapsed","Argument","format","ArgValue","Args","addArg","RunTestIcon","width","TEST_ICON","EditIcon","XButton","X_BUTTON","array","inputs","number","date","boolean","string","object","inputToTypes","checkbox","ValidationInput","onInputChanged","inputType","setType","classname","validation_type","CLASS_NAME","Count","count","stat","validationCount","sum","Evaluations","updateTests","saveAll","setSaveAll","totalValidations","setTotalValidations","updateEvaluation","addValidation","x","ValidationOptions","deleteValidation","y","updateValidations","p","updateExpectedType","updateSaveStatus","test_end","state","EvaluationRow","calcWidth","ceil","type_width","setWidth","typeError","ArrayNamespace","bind","isError","errorCount","isIndexed","setIsIndexed","setIndex","addSavedIndices","validate","removeSavedIndices","ScratchPad","TestController","dynamic","staticArguments","setNsp","text_length","setLength","test_suggestions","setSuggestions","testResults","setTestResults","runTest","new_suggestions","createSuggestions","new_namespace","namespaces","slice","updateNamespace","resetResults","updateValidationStatus","shouldValidate","EVAL_ICON","TestContainer","_open","title_color","multiTest","updateTitle","deleteTest","TargetValue","source_index","FullTest","getTargetValue","substring","matchAll","checkTargetNamespaces","tv","action","beforeTest","mainTest","Events","afterTest","AddButton","MultiTestSection","TestSection","addTest","BeforeTest","AfterTest","MainTest","EventsTest","connection","Test","logger","TestLogger","clearResults","test_start","Module","eventTest","end","start","getConnection","warn","removeEvaluation","arrayNamespace","newArrayNamespace","nspList","indices","getLastArrayNamespace","log","section","runAllTest","updateEvaluations","test_names","test_section","sIndex","SaveIcon","vowels","an","word","ValidationMessage","PRETEXT","ErrorMessages","pretext","amendment","lengthEquals","maxLength","minLength","isLike","isOneOf","strEquals","numEquals","boolEquals","toString","dateEquals","minDate","maxDate","TestSummary","testSection","isTesting","LOADING","ERROR","CHECK","TestMethod","TestResponse","TestValidations","ARROW","mock","sections","FullTestController","validateTest","runFullTest","Before","Main","After","recursiveRunTest","saveTests","Tests","saveTest","initializeSavedTests","savedTests","ft","newTests","resetTest","CLASSNAME","TestDetails","openAll","closeAll","setFullTest","fetchTests","showDeleteMsg","setDeleteMsg","hideDelete","newTest","resetFullTest","SavedTests","setOpenAll","setCloseAll","savedTestList","setTests","runAllTests","B","M","E","A","CurrentTest","setTestBefore","setTestAfter","setTestMain","eventNamespace","setEventTest","setSavedTests","saveResponse","setMessage","testCtrl","MainCtrl","BeforeCtrl","EventCtrl","AfterCtrl","clearMessage","resetTests","getTests","SystemViewPage","useParams","fontFamily","marginRight","textShadow","SystemNavigator","TestPanel","App","Provider","path","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById","io","dispatcher","socket","connect","reconnection","disconnect"],"mappings":"6FAAA,IAAMA,EAAWC,EAAQ,KAEzBC,EAAOC,QAAU,WAAsD,IAA5BC,EAA4B,uDAAnB,GAAIC,EAAe,uCAC/DC,EAAaC,MAAQ,GA4C3B,OA1CAD,EAAWE,KAAO,SAACC,EAAWC,EAAMC,GAKlC,OAJIP,EAAOK,IACTL,EAAOK,GAAWG,SAAQ,SAACC,GAAD,OACxBA,EAASC,MAAMT,EAAe,CAACK,EAAMC,OAElCL,GAGTA,EAAWS,GAAK,SAACN,EAAWI,GAAuC,6DAAP,GAApBG,EAA2B,EAA3BA,MAAOC,EAAoB,EAApBA,SAC7C,GAAwB,oBAAbJ,EAAyB,OAAOP,EAC3C,IAAMY,EAAOL,EAASK,KAItB,GAHwB,kBAAbD,IAAuBJ,EAAWb,EAASa,EAAUG,EAAOC,IAClEb,EAAOK,KAAYL,EAAOK,GAAa,IAExCS,EAAM,CAER,IAAMC,EAAIf,EAAOK,GAAWW,WAAU,SAACC,GAAD,OAAQA,EAAGH,OAASL,EAASK,SACxD,IAAPC,EAAUf,EAAOK,GAAWa,KAAKT,GAChCT,EAAOK,GAAWU,GAAKN,OACvBT,EAAOK,GAAWa,KAAKT,GAC9B,OAAOP,GAGTA,EAAWiB,YAAc,SAACd,EAAWY,GACnC,OAAKjB,EAAOK,IAEPY,EAGoB,oBAAPA,EAEhBjB,EAAOK,GAAaL,EAAOK,GAAWe,QAAO,SAACX,GAC5C,OAAOA,EAASK,OAASG,EAAGH,QAG9BO,QAAQC,MACN,wHARKtB,EAAOK,GAYTH,GAhBwBA,GAkB1BA,I,kBC/CTJ,EAAOC,QAAU,WAAoC,WAAdwB,EAAc,uDAAJ,GAO/C,OANApB,KAAKqB,WAAa,SAACC,GAEjB,OADAC,OAAOC,OAAOJ,EAASE,GAChB,GAGTtB,KAAKoB,QAAU,kBAAMA,GACdpB,O,iDCPQyB,EAAU/B,EAAQ,KAA3BgC,QACFC,EAAWjC,EAAQ,KAEzBC,EAAOC,QAAU,WACf,IAAMgC,EAAS,GA4Bf,OA3BAA,EAAOC,QAAP,2BAAiB,wGAASC,cAAT,MAAkB,MAAlB,EAAyBC,EAAzB,EAAyBA,IAAW5B,EAApC,EAA8B6B,KAAYZ,EAA1C,EAA0CA,QACzDU,EAASA,EAAOG,cADD,SAEGR,EAAM,CAAEM,MAAKD,SAAQV,UAASjB,SAFjC,aAET+B,EAFS,QAGPC,QAAU,KAHH,sBAIPD,EAAI/B,KAJG,gCAKD+B,EAAI/B,MALH,4CAAjB,sDAQAyB,EAAOQ,OAAP,2BAAgB,wGAASL,EAAT,EAASA,IAAKM,EAAd,EAAcA,SAAUjB,EAAxB,EAAwBA,QAC9BkB,EAA6BD,EAA7BC,KAAMC,EAAuBF,EAAvBE,MAAOC,EAAgBH,EAAhBG,YACfC,EAAO,IAAId,EACbW,GAAMG,EAAKC,OAAO,OAAQJ,EAAMA,EAAK3B,MACrC4B,GACFA,EAAMlC,SAAQ,SAACiC,GACbG,EAAKC,OAAO,QAASJ,EAAMA,EAAK3B,SAGhC6B,GAAaC,EAAKC,OAAO,cAAeC,KAAKC,UAAUJ,IAT7C,SAWIf,EAAMoB,KAAKd,EAAKU,EAAM,CACtCrB,QAAS,EAAF,KAAOA,GAAP,IAAgB,eAAgB,0BAZ3B,aAWRc,EAXQ,QAcNC,QAAU,KAdJ,uBAeND,EAAI/B,KAfE,iCAgBA+B,EAAI/B,MAhBJ,4CAAhB,sDAmBOyB,I,iRC/BHkB,EAAqBpD,EAAQ,KAC7BqD,EAAmBrD,EAAQ,IAC3BsD,EAAetD,EAAQ,KACvBuD,EAAevD,EAAQ,KACvBwD,EAAaxD,EAAQ,KAE3BC,EAAOC,QAAU,WAAgE,IAA1CuD,EAA0C,uDAA7BD,IAAcpD,EAAe,uCACzE8B,EAAS,CACfA,eAAwB,IAgExB,OA9DAA,EAAOwB,YAAP,2BAAqB,WAAOrB,GAAP,wFAAYT,EAAZ,+BAAsB,IACrCM,EAAOyB,eAAetB,IAAST,EAAQgC,YADxB,yCAEV1B,EAAOyB,eAAetB,IAFZ,uBAIIe,EAAmBK,EAAYpB,EAAKT,GAJxC,cAIbiC,EAJa,OAKbC,EAAU5B,EAAO6B,cAAcF,GACrC3B,EAAOyB,eAAetB,GAAOyB,EANV,UAOb,IAAIE,SAAQ,SAACC,GAAD,OAAaH,EAAQhD,GAAG,UAAWmD,MAPlC,iCAQZH,GARY,4CAArB,sDAWA5B,EAAO6B,cAAgB,SAACF,GACtB,IAAM1D,EAAS,GAEf,GAAI+B,EAAOyB,eAAeE,EAASK,YACjC,OAAOhC,EAAOyB,eAAeE,EAASK,YAExC,IAAMJ,EAAU,GA0ChB,OAzCAT,EAAiBxC,MAAMiD,EAAS,CAACD,EAASM,UAAWhE,EAAQC,IAC7DkD,EAAazC,MAAMiD,GACnB5B,EAAOyB,eAAeE,EAASK,YAAcJ,EAE7CA,EAAQM,gBAAR,2BAA0B,WAAOC,GAAP,sGAE2BjB,EAC/CK,EACAI,EAASK,YAJW,gBAEdI,EAFc,EAEdA,QAASC,EAFK,EAELA,KAAMC,EAFD,EAECA,KAAML,EAFP,EAEOA,UAI7Bd,EAAiBxC,MAAMiD,EAAS,CAACK,EAAWhE,EAAQC,IAEpDkE,EAAQ3D,SAAQ,YAAgC,IAA7BwD,EAA6B,EAA7BA,UAAWM,EAAkB,EAAlBA,MAAOxD,EAAW,EAAXA,KAC/B6C,EAAQ7C,KACV6C,EAAQ7C,GAAMyD,gBAAgBH,EAAMC,EAAMC,EAAON,GACjDL,EAAQ7C,GAAMV,KAAK,iBAIvBuD,EAAQvD,KAAK,aACK,oBAAP8D,GAAmBA,IAhBR,kDAkBtB7C,QAAQC,MAAR,6DACwDoC,EAASK,aAnB3C,0DAA1B,sDAwBAL,EAASS,QAAQ3D,SACf,SAACgE,GAAD,OACGb,EAAQa,EAAI1D,MAAQsC,EACnBE,EACAkB,EACAd,EACAC,EACA1D,MAIN0D,EAAQhD,GAAG,aAAcgD,EAAQM,iBAE1BN,GAGF5B,I,wCCzETjC,EAAOC,QAAU,SACfuD,EACApB,GAEA,6DAD6B,GAC7B,IADEtB,aACF,MADU,EACV,MADa6D,YACb,MADoB,IACpB,EACMC,EAAS,GAEf,OAAO,IAAIb,QAAJ,2BAAY,WAAuBC,EAASa,GAAhC,8FAEOrB,EAAWtB,QAAQ,CAAEE,QAF5B,OAET0C,EAFS,OAGfd,EAAQc,GAHO,gDAKfF,EAAOxD,KAAP,MAEIwD,EAAOG,OAASjE,EAClBkE,YAAW,kBAAMC,EAAQjB,EAASa,KAASD,EAAOG,OAASJ,IAE3DpD,QAAQC,MAAR,wDACmDY,EADnD,kBACgEwC,EAAOG,OADvE,iBAGAxD,QAAQC,MAAMoD,GACdC,EAAOD,IAdM,yDAAZ,SAA2BK,EAA3B,2CAA2BA,EAA3B,M,sCCPTjF,EAAOC,QAAU,SAAyBiF,GAA2B,IAE/DC,EAF0CrE,EAAqB,uDAAb,EAAGC,EAAU,uCAC/DqE,EAAY,EAGhB,OAAO,WAGL,KAFAA,GAEiBtE,EAAO,4BAHNuE,EAGM,yBAHNA,EAGM,gBACtBH,EAAKtE,MAAMP,KAAMgF,GAGdF,IACHA,EAAaH,YAAW,WACtBI,EAAY,EACZD,EAAa,OACZpE,O,qDCdHuE,EAAevF,EAAQ,KACvBwF,EAAwBxF,EAAQ,KAChCqD,EAAmBrD,EAAQ,IAGjCC,EAAOC,QAAU,SACfuD,EADe,IAIfK,EACA1D,GACA,IAJEqF,EAIF,EAJEA,QAAStB,EAIX,EAJWA,UAAWM,EAItB,EAJsBA,MAAOiB,EAI7B,EAJ6BA,eAAgBzE,EAI7C,EAJ6CA,KAC3CuD,EAGF,EAHEA,KAAMD,EAGR,EAHQA,KAAML,EAGd,EAHcA,WAIR/D,EAAS,GACToD,EAAegC,EAAa1E,MAAM,IAExC0C,EAAamB,gBAAkB,SAACH,EAAMC,EAAMC,EAAON,GACjDZ,EAAaoC,iBAAmB,iBAAO,CAAElB,QAAOF,OAAMC,SAEtDnB,EAAiBxC,MAAM0C,EAAc,CAACY,EAAWhE,EAAQC,KAE3DmD,EAAamB,gBAAgBH,EAAMC,EAAMC,EAAON,GAEhD,IAAMyB,EAAe,2BAAG,WAAOvB,GAAP,mGAEdhC,EAAMqD,EAAexB,WAAf,mBAAwCjD,GAFhC,SAGkBmC,mBAAmBf,GAHrC,gBAGZiC,EAHY,EAGZA,QAASE,EAHG,EAGHA,KAAMD,EAHH,EAGGA,KAHH,EAISD,EAAQ,GAA7BH,EAJY,EAIZA,UAAWM,EAJC,EAIDA,MACnBlB,EAAamB,gBAAgBH,EAAMC,EAAMC,EAAON,GAE9B,oBAAPE,GAAmBA,IAPV,kDASpB7C,QAAQC,MAAR,mEAA0EY,MATtD,0DAAH,sDAYfwD,EA/BY,SAACxD,GAAD,OAASA,EAAIyD,MAAM,eAAe,GA+BnCC,CAAY7B,GAY7B,OAXAuB,EAAQ9E,SAAQ,YAAoB,IAAjByB,EAAiB,EAAjBA,OAAQhB,EAAS,EAATA,GACzBmC,EAAanC,GAAMoE,EAAsB3E,MAAM0C,EAAc,CAC3DE,EACAoC,EACAzD,EACAhB,EACA0C,EACA4B,GAAkBE,OAIfrC,I,iCC7CT,IAAMyC,EAAW,SAACC,GAAD,MACE,kBAAVA,MAAuBA,IAAiBC,MAAMC,QAAQF,KACzDG,EAAU,SAACC,GAAD,OAAoD,IAA3CxE,OAAOyE,oBAAoBD,GAAKrB,QACnDuB,EAAY,SAAC9F,GAAD,OAChBoB,OAAOyE,oBAAoB7F,GAAM+F,QAC/B,SAACC,EAAOxF,GAAR,OAAkBwF,EAAS,GAAJ,OAAOxF,EAAP,YAAeR,EAAKQ,GAApB,OACvB,MAEJhB,EAAOC,QAAU,SACfuD,EACAoC,EACAzD,EACAhB,EACA0C,EACA8B,GAEA,OAAO,WAAuB,WACtB9C,EAAcoD,MAAMQ,KAAKC,WAEzBC,EAAa,SAACvC,GAAqB,IAAjBwC,EAAiB,uDAAN,EAAM,EACT,EAAKlB,mBAA3BlB,EAD+B,EAC/BA,MAAOD,EADwB,EACxBA,KAAMD,EADkB,EAClBA,KACfuC,EAAgB,GAAH,OAAMjB,GAAN,OAAiBtB,EAAjB,YAAyBC,EAAzB,cAAmCC,EAAnC,YAA4CrD,GACzD2F,EAAe,GAAH,OAAMlB,GAAN,OAAiBtB,EAAjB,YAAyBC,EAAzB,cAAmCC,EAAnC,YAA4CrD,GACxD4F,EAAa,GAAH,OAAMnB,GAAN,OAAiBtB,EAAjB,YAAyBC,GAAzB,OAAgCC,EAAhC,YAAyCrD,GAJlB,EAKf0B,EAAY,IAAM,GAAlCF,EAL+B,EAK/BA,KAAMC,EALyB,EAKzBA,MACRR,EAAMO,EAAOkE,EAAgBjE,EAAQkE,EAAeC,EACpDC,EAAiB,EAAKvF,UACtBA,EAAW0E,EAAQa,GAAmCnD,EAAQpC,UAAzBuF,EAC3C,GAAI5E,IAAQ2E,EAAY,CACtB,IAAMP,EACO,QAAXrE,GAAoB4D,EAASlD,EAAY,IAAMyD,EAAUzD,EAAY,IAAM,GAC7EW,EACGtB,QAAQ,CACPE,IAAK,GAAF,OAAKA,GAAL,OAAWoE,GACdrE,SACAE,KAAM,CAAEQ,eACRpB,YAEDwF,MAAK,SAACnC,GAAD,OAAaV,EAAG,KAAMU,MAC3BoC,OAAM,SAACC,GAAD,OAASC,EAAaD,EAAKP,EAAUxC,UACzC,QACEvB,EAAY,GAAGF,YACfE,EAAY,GAAGD,MACtB,IAAMF,EAAW,GACjBA,EAASG,YAAcA,EACnBF,IAAMD,EAASC,KAAOA,GACtBsD,MAAMC,QAAQtD,KAAQF,EAASE,MAAQA,GAC3CY,EACGf,OAAO,CACNL,MACAD,SACAO,WACAjB,YAEDwF,MAAK,SAACnC,GAAD,OAAaV,EAAG,KAAMU,MAC3BoC,OAAM,SAACC,GAAD,OAASC,EAAaD,EAAKP,EAAUxC,QAI5CgD,EAAe,SAACD,EAAKP,EAAUxC,GACnC,IAAK+C,EAAIE,aAAc,MAAMF,EAC7B,IAAKA,EAAIG,SAAU,MAAMH,EACzB,IAAKA,EAAIG,SAAS9G,KAAM,MAAM2G,EAE1BA,EAAIG,SAAS9G,KAAK+G,kBACpBnD,EAAG+C,EAAIG,SAAS9G,MACPoG,GAAY,GACrBA,IACIjB,EAAiBA,GAAgB,kBAAMgB,EAAWvC,EAAIwC,MACrD/C,EAAQM,iBAAgB,kBAAMwC,EAAWvC,EAAIwC,QAElDrF,QAAQC,MAAR,sDAA6D2F,EAAIK,QAAjE,OACAjG,QAAQC,MAAM2F,KAIlB,OAAO,IAAIpD,SAAQ,SAACC,EAASa,GAAV,OACjB8B,GAAW,SAACQ,EAAKrC,GACXqC,EAAKtC,EAAOsC,GACXnD,EAAQc,EAAQ2C,sB,uJChF7B,IAAMC,EAAe3H,EAAQ,KACvB4H,EAAmB5H,EAAQ,KAC3B6H,EAAmB7H,EAAQ,KAM3B8H,EAAa,CAGjBtE,WAPiBoE,IAQjB1F,OAPayF,IAQbtH,WAPiB,IAAIwH,EAUrBF,eACAC,mBACAC,oBAEF5H,EAAOC,QAAU4H,EACjBC,OAAOD,WAAaA,G,mrBCdLE,EANQC,IAAMC,cAAc,CACzCC,kBAAmB,GACnBC,kBAAmB,GACnBC,qBAAsB,eC2BTC,G,OA7BC,SAAC,GAQV,IAPLC,EAOI,EAPJA,gBACAC,EAMI,EANJA,cACAC,EAKI,EALJA,KACAC,EAII,EAJJA,SAII,IAHJC,gBAGI,SAFJC,EAEI,EAFJA,YACAC,EACI,EADJA,eAMA,OACE,qBAAKC,UAAS,UAAd,SACE,uBACEC,KAAK,OACL9C,MAAOwC,EACPO,aAAcJ,EACdK,YAAaV,EACbW,UAXe,SAACC,GACN,UAAVA,EAAEC,KAA4C,oBAAlBZ,GAA8BA,EAAcW,IAWxEE,SAAUX,EACVC,SAAUA,EACVG,UAAWD,Q,iBCVJS,EAZA,SAAC,GAA0C,IAAxCC,EAAuC,EAAvCA,KAAiBd,GAAsB,EAAjCe,UAAiC,EAAtBf,MAAsB,EAAhBgB,UAKvC,OACE,cAAC,IAAD,CAAMX,UAAU,OAAOY,GAAIH,EAA3B,SACGd,KCJQkB,G,cAJF,SAAC,GAAkB,IAAhBC,EAAe,EAAfA,SACd,OAAO,qBAAKd,UAAU,OAAf,SAAuBc,MCyBjBC,G,OA1BI,SAAC,GAMb,IALLC,EAKI,EALJA,OAKI,IAJJhB,iBAII,MAJQ,GAIR,EAHJiB,EAGI,EAHJA,QAGI,IAFJC,aAEI,MAFI,UAEJ,EADEC,EACF,EADJC,KAEA,OAAOJ,EACL,sBACEK,MAAO,CAAEH,QAAOC,YAChBF,QAASA,EACTjB,UAAS,0BAAqBA,GAHhC,oBAQA,sBACEqB,MAAO,CAAEH,QAAOC,YAChBF,QAASA,EACTjB,UAAS,0BAAqBA,GAHhC,sBCMWsB,EApBQ,SAAC,GAAuC,IAArCR,EAAoC,EAApCA,SAAUS,EAA0B,EAA1BA,MAA0B,IAAnBC,YAAmB,WACjCC,mBAASD,GADwB,mBACrDR,EADqD,KAC7CU,EAD6C,KAM5D,OACE,sBAAK1B,UAAU,kBAAf,UACE,sBAAKA,UAAU,0BAAf,UACE,cAAC,EAAD,CAAYgB,OAAQA,EAAQC,QANd,WAClBS,GAAUV,MAMLO,KAGH,qBAAKvB,UAAS,yDAAqDgB,EAAoB,GAAX,UAA5E,SACE,cAAC,EAAD,UAAOF,UCAAa,G,cAdC,SAAC,GAAiB,IAAfC,EAAc,EAAdA,QACjB,OACE,mCACE,qBAAK5B,UAAS,WAAd,SACE,qBACEA,UAAS,gBACT6B,IAAKD,ECXA,i8ECAA,qgFFYLE,IAAKF,EAAU,YAAc,sBGIxBG,G,OAZG,SAAC,GAA4B,IAA1BH,EAAyB,EAAzBA,QAAS5B,EAAgB,EAAhBA,UAC5B,OACE,qBAAKA,UAAS,WAAd,SACE,qBACEA,UAAS,wBAAmBA,GAAaA,GACzC6B,IAAKD,ECTE,q7GCAA,y9GFUPE,IAAI,sBGgEGE,EAnEW,SAAC,GAOpB,IANLC,EAMI,EANJA,YACAC,EAKI,EALJA,UACA1G,EAII,EAJJA,QACA2G,EAGI,EAHJA,mBACAC,EAEI,EAFJA,mBACAC,EACI,EADJA,SAEMrC,EAAY,gBAElB,OACE,cAAC,IAAMsC,SAAP,UACG9G,EAAQ+G,KAAI,WAAoBnK,GAAO,IAAxBD,EAAuB,EAAvBA,KAAMwE,EAAiB,EAAjBA,QACd6F,EAAaL,IAAuBhK,EACpCyJ,EAAUS,EAASI,KAAKC,SAAd,UAA0BvK,EAA1B,QAChB,OACE,cAAC,EAAD,CACEqJ,KAAMW,IAAuBhK,EAE7BoJ,MACE,uBACEvB,UAAS,uDACNoC,GAAsBI,EADhB,YAEI,WAATrK,GAAqB6H,EAAY,kBAHvC,UAKE,cAAC,EAAD,CAAQS,KAAI,WAAMwB,EAAN,YAAqBC,EAArB,YAAkC/J,GAAQwH,KAAMxH,IAC5D,sBAAM6H,UAAS,UAAKA,EAAL,eAAf,SACE,cAAC,EAAD,CAAS4B,QAASA,SAX1B,SAgBGjF,EAAQ4F,KAAI,WAASnK,GAAO,IAAbE,EAAY,EAAZA,GACRqK,IAAeN,EAASI,KAAKC,SAAd,UAA0BvK,EAA1B,YAAkCG,EAAlC,QACfsK,IAAgBP,EAASQ,MAAMH,SAAf,UAA2BvK,EAA3B,YAAmCG,EAAnC,UACtB,OACE,sBAEE0H,UAAS,UAAKA,EAAL,gDACP1H,IAAO8J,GAAsBI,GAHjC,UAME,cAAC,EAAD,CAEE/B,KAAI,WAAMwB,EAAN,YAAqBC,EAArB,YAAkC/J,EAAlC,YAA0CG,GAC9CqH,KACE,4CACOrH,EADP,KAEE,sBAAM+I,MAAO,CAAEyB,WAAY,QAA3B,iBACC,QANA1K,GAUP,sBAAK4H,UAAS,UAAKA,EAAL,eAAd,UACE,cAAC,EAAD,CAAS4B,QAASe,IAClB,cAAC,EAAD,CAAWf,QAASgB,SAlBjBxK,OAnBNA,S,iBCoEX2K,EAAkB,SAAC,GAMlB,IALLzD,EAKI,EALJA,kBACA2C,EAII,EAJJA,YACAe,EAGI,EAHJA,kBACAb,EAEI,EAFJA,mBACAC,EACI,EADJA,mBAEA,OAAO9C,EAAkBiD,KAAI,WAAkCnK,GAAO,IAAtC6K,EAAqC,EAArCA,OAAQf,EAA6B,EAA7BA,UAAWG,EAAkB,EAAlBA,SACzCjH,EAAe6H,EAAOrG,eAAtBxB,WACFwG,EAAUS,EAASI,KAAKC,SAAd,UAA0BR,EAA1B,QACVM,EAAaQ,IAAsBd,EACzC,OACE,cAAC,EAAD,CACEV,KAAMgB,EAENjB,MACE,uBACEvB,UAAS,uDACNmC,GAAsBK,GAF3B,UAKE,qCACE,cAACU,EAAD,CAAMzC,KAAI,WAAMwB,EAAN,YAAqBC,GAAavC,KAAMuC,IAClD,+BACE,mBACElC,UAAU,0BACVmD,KAAM/H,EACNgI,OAAO,SACPC,IAAI,aAJN,SAMGjI,SAIP,sBAAM4E,UAAU,2BAAhB,SACE,cAAC,EAAD,CAAS4B,QAASA,SAvB1B,SA4BE,cAAC,EAAD,CACEO,mBAAoBA,EACpBC,mBAAoBA,EACpBH,YAAaA,EACbC,UAAWA,EACX1G,QAASyH,EAAOrG,eAAepB,QAC/B6G,SAAUA,KAhCPjK,OAuCEkL,EAvIG,SAAC,GAAwD,IAAtDrB,EAAqD,EAArDA,YAAaC,EAAwC,EAAxCA,UAAWqB,EAA6B,EAA7BA,WAAYC,EAAiB,EAAjBA,WAAiB,EAEtEC,qBAAWvE,GADLG,EADgE,EAChEA,kBAAmBE,EAD6C,EAC7CA,qBAAsBD,EADuB,EACvBA,kBAE3CoE,EAAcpE,EAAkBqE,MACpC,SAACD,GAAD,OACEA,EAAYxB,YAAcA,GAAawB,EAAYzB,cAAgBA,KAE/D2B,GAAWF,EACftK,SAAO6B,cAAcyI,EAAYT,OAAOrG,gBACxC,IAFIgH,OAGAC,EAAexE,EAAfwE,WAEFC,EAAY,uCAAG,0CAAAC,EAAA,6DAAOC,EAAP,+BAAY/B,EAAZ,kBAEK4B,EAAWI,YAAYD,GAF5B,cAEX/H,EAFW,OAGjBsD,EAAqBtD,GAHJ,kBAIVA,GAJU,gCAMjBvD,QAAQC,MAAR,MACA4G,EAAqB,IAPJ,yDAAH,qDAWZ2E,EAAUC,cACVC,EAAiB,uCAAG,WAAO/D,GAAP,eAAA0D,EAAA,sEACFD,EAAazD,EAAE+C,OAAOjG,OADpB,QAClBkH,EADkB,QAEZnI,QACNmI,EAAQ,GAAGpC,aAAaiC,EAAQ3L,KAAR,WAAiB8L,EAAQ,GAAGpC,cAHlC,2CAAH,sDA6BvB,OAvBAqC,qBAAU,WACJhF,EAAkBpD,QACpB2H,EAAW7L,GAAX,4BACuBiK,IACrB,YAAkD,IAAxBI,EAAuB,EAAvBA,SAAUH,EAAa,EAAbA,UAC5BwB,EAAcpE,EAAkBqE,MACpC,SAACD,GAAD,OACEA,EAAYxB,YAAcA,GAC1BwB,EAAYzB,cAAgBA,KAE5ByB,IACFA,EAAYrB,SAAWA,EACvB9C,EAAqB,YAAID,UAIhC,CAAC2C,EAAa3C,IACjBgF,qBAAU,WACJrC,GAAa6B,EAAa7B,KAC7B,IACHqC,qBAAU,WACJV,GAAQA,EAAO5L,GAAP,YAAuB8L,KAClC,CAACF,EAAQtE,IAEV,0BAASU,UAAU,aAAnB,UACE,sBAAKA,UAAU,YAAf,UACE,qBAAKA,UAAU,0BAAf,SACE,qBAAKA,UAAU,SAAf,SACE,cAAC,EAAD,CACEF,YAAamC,EACbxC,gBAAgB,cAChBC,cAAe0E,QAIrB,qBAAKpE,UAAU,0BAAf,SACE,qBAAKA,UAAU,UAAf,SACE,cAAC,EAAD,CACEV,kBAAmBA,EACnB2C,YAAaA,EACbe,kBAAmBd,EACnBC,mBAAoBoB,EACpBnB,mBAAoBoB,WAK5B,qBAAKxD,UAAU,sB,OCjENuE,G,cApBQ,SAAC,GAAwB,IAAtB5E,EAAqB,EAArBA,KAAMC,EAAe,EAAfA,SAC9B,OACE,qBAAKI,UAAU,kBAAf,SACE,0BACEA,UAAU,2BACV7H,KAAK,kBACLqM,GAAG,kBACHrH,MAAOwC,EACPY,SACEX,EACI,SAACS,GACCT,EAASS,EAAE+C,OAAOjG,QAEpB,W,cCJP,SAASsH,EAAT,GAAmC,IAAZxD,EAAW,EAAXA,QAC5B,OACE,sBAAMjB,UAAS,mBAAsBiB,QAASA,EAA9C,SACE,qBAAKY,ICfI,6xBDeaC,IAAI,YAIjB4C,MAfA,SAAC,GAA0B,IAAxB5D,EAAuB,EAAvBA,SAAU6D,EAAa,EAAbA,OAC1B,OACE,wBAAQ3E,UAAU,SAASiB,QAAS0D,EAApC,SACG7D,KEyCQ8D,EA5CC,SAAC,GAOV,IANLC,EAMI,EANJA,WACAC,EAKI,EALJA,WACAC,EAII,EAJJA,WACAC,EAGI,EAHJA,SAGI,IAFJxD,YAEI,cADJyD,YAEgCxD,mBAASD,IADrC,mBACG0D,EADH,KACaC,EADb,KAeJ,OACE,sBAAKnF,UAAS,6BAAwBkF,EAAW,OAAS,QAA1D,UACE,qBACEjE,QAhBiB,kBAAMkE,GAAY,IAiBnCnF,UAAS,yCAAoCkF,EAAW,SAAW,WAFrE,SAIGJ,IAEH,sBACE9E,UAAS,yCAAoCkF,EAAW,UAAY,UADtE,UAGE,qBAAKlF,UAAU,MAAf,SAAsB+E,IAEtB,sBAAK/E,UAAU,mBAAf,UACE,cAAC,EAAD,CAAQ2E,OArBI,WAClBE,EAAWM,IAoBL,kBACA,cAAC,EAAD,CAAQR,OA3BM,WACI,oBAAbK,GAAyBA,IACpCG,GAAY,IAyBN,6BC9BKC,G,OARD,SAAC,GAAqB,IAAnBzF,EAAkB,EAAlBA,KAAM0B,EAAY,EAAZA,MACrB,OACE,sBAAMA,MAAOA,EAAOrB,UAAU,QAA9B,SACGL,M,kDCiCP,SAAS0F,EAAT,GAAyC,IAApBlI,EAAmB,EAAnBA,MAAOmI,EAAY,EAAZA,SAC1B,OACE,cAAC,IAAD,CAAmBA,SAAUA,EAAUjE,MAAOkE,UAA9C,SACGpI,GAAS,KAKDqI,MAvCE,SAAC,GAAkB,IAAhB1E,EAAe,EAAfA,SAClB,OACE,qBAAKd,UAAU,WAAf,SACE,cAAC,IAAD,CACEyF,cAAe,CAACC,KAChBC,UAAW,CAAEC,KAAMP,GACnBQ,WAAY,CACVD,KADU,YAC4C,EAA/CE,KAAgD,IAA1CC,EAAyC,EAAzCA,OAAQ/F,EAAiC,EAAjCA,UAAWc,EAAsB,EAAtBA,SAAakF,EAAS,wDAC9ChJ,EAAQ,iBAAiBiJ,KAAKjG,GAAa,IACjD,OAAQ+F,GAAU/I,EAChB,cAAC,IAAD,aACE8D,SAAUoF,OAAOpF,GAAUqF,QAAQ,MAAO,IAC1C9E,MAAOkE,UACPD,SAAUtI,EAAM,GAChBoJ,OAAO,OACHJ,IAGN,8CAAMhG,UAAWA,GAAegG,GAAhC,aACGlF,OAhBX,SAsBGA,OCxBM,SAASuF,EAAT,GAKX,IAJFpE,EAIC,EAJDA,YACAC,EAGC,EAHDA,UACAqB,EAEC,EAFDA,WACAC,EACC,EADDA,WAIM8C,EAFwB7C,qBAAWvE,GAAjCI,kBAE0BqE,MAChC,SAAC2C,GAAD,OAAaA,EAAQpE,YAAcA,GAAaoE,EAAQrE,cAAgBA,KAElE2B,GAAW0C,EAAUlN,SAAO6B,cAAcqL,EAAQrD,OAAOrG,gBAAkB,IAA3EgH,OANP,EAQ0BnC,mBAAS,CAClC8E,cAAe,GACflL,UAAW,CAAE6G,YAAWqB,aAAYC,gBAVrC,mBAQMgD,EARN,KAQWC,EARX,KAaKC,EAAa,uCAAG,WAAO9C,GAAP,eAAAG,EAAA,yDACpB0C,EAAY,CACVF,cAAe,GACflL,UAAW,CAAE6G,YAAWqB,aAAYC,gBAHlB,UAMdI,EANc,gCAOMA,EAAO+C,OAAO,CAClCzE,YACAqB,aACAC,eAVc,OAOVvH,EAPU,OAYhBwK,EAAYxK,GAZI,uDAelBvD,QAAQC,MAAR,MAfkB,yDAAH,sDA0BnB,OAPA2L,qBAAU,WACRoC,EAAc9C,KACb,CAACJ,EAAYD,EAAYrB,EAAW0B,IAEvCU,qBAAU,cAEP,CAACV,IAEF,yBAAS5D,UAAU,gBAAnB,SACE,sBAAKA,UAAU,qBAAf,UACE,qBAAKA,UAAU,MAAf,SACE,cAAC,EAAD,CACEkC,UAAWA,EACXqB,WAAYA,EACZC,WAAYA,MAGhB,qBAAKxD,UAAU,qCAAf,SACE,cAAC,EAAD,CAAgBwG,IAAKA,EAAKC,YAAaA,EAAa7C,OAAQA,WAOtE,IAAMgD,EAAW,SAAC,GAAkE,IAAhE1E,EAA+D,EAA/DA,UAAWqB,EAAoD,EAApDA,WAAYC,EAAwC,EAAxCA,WAAwC,IAA5BqD,qBAA4B,MAAZ,MAAY,EACjF,OACE,cAAC,EAAD,CACExF,MAAO,CAAEyF,aAAc,OACvBnH,KACE,sBAAMK,UAAU,4BAAhB,SACGwD,GAAcD,GAAcrB,EAC3B,+CACMA,EADN,YACmBqB,EADnB,YACiCC,GAC/B,sBAAMxD,UAAU,kCAAhB,eACA,sBAAMA,UAAU,oCAAhB,SAAqD6G,IACrD,sBAAM7G,UAAU,kCAAhB,kBAEAuD,GAAcrB,EAChB,6CAAMA,EAAN,YAAmBqB,KAEnBrB,GAAa,6CAAMA,UAQzB6E,EAAiB,SAAC,GAAkC,IAAhCP,EAA+B,EAA/BA,IAAKC,EAA0B,EAA1BA,YAAa7C,EAAa,EAAbA,OAClC1B,EAAsCsE,EAAtCtE,UAAWsB,EAA2BgD,EAA3BhD,WAAYD,EAAeiD,EAAfjD,WADwB,EAE/B9B,mBAAS+E,EAAID,eAFkB,mBAEhD5G,EAFgD,KAE1CqH,EAF0C,KAGjDC,EAAY,uCAAG,WAAOC,GAAP,eAAAnD,EAAA,0DACfH,EADe,0CAGOA,EAAOuD,QAAP,2BAAoBX,GAApB,IAAyBD,cAAe5G,KAH/C,OAGT1D,EAHS,OAIfwK,EAAYxK,GACZiL,GAAe,GALA,gDAOfxO,QAAQC,MAAR,MAPe,yDAAH,sDAkBlB,OAHA2L,qBAAU,WACR0C,EAAQR,EAAID,iBACX,CAACC,IAEF,cAAC,EAAD,CACE1B,WACE,cAAC,EAAD,CAAUhE,SAAUnB,GAAQ,mDAE9BoF,WAAY,cAAC,EAAD,CAAgBpF,KAAMA,GAAQ,GAAIC,SAXhC,SAAC2G,GAAD,OAAmBS,EAAQT,MAYzC1B,WAAYoC,EACZhC,YAAa,CAAC/C,EAAWsB,EAAYD,GACrCyB,SAbW,kBAAMgC,EAAQR,EAAID,mBC5EpBa,G,OA/BW,SAAC,GAOpB,IANLtG,EAMI,EANJA,SACAS,EAKI,EALJA,MAKI,IAJJL,aAII,MAJI,UAIJ,EAHJM,EAGI,EAHJA,KACA6F,EAEI,EAFJA,KACAC,EACI,EADJA,gBAEA,OACE,sBAAKtH,UAAU,qBAAf,UACE,sBAAKA,UAAU,4BAAf,UACE,sBACEA,UAAS,gEAA2DqH,GACpEpG,QAASqG,EAFX,SAIE,cAAC,EAAD,CAAYpG,MAAOA,EAAOF,OAAQQ,MAEnCD,KAGH,qBACEvB,UAAS,+DACNwB,EAAkB,GAAX,UAFZ,SAKGV,SCJMyG,G,OAtBK,SAAC,GAAoD,IAAlDC,EAAiD,EAAjDA,QAAiD,IAAxCC,gBAAwC,SAAtBlH,EAAsB,EAAtBA,SAAUgB,EAAY,EAAZA,MACpDvB,EAAY,eAIlB,OACE,sBAAKA,UAAS,UAAKA,GAAnB,UACE,sBAAMA,UAAS,UAAKA,EAAL,WAAf,SAAyCwH,IACzC,sBACExH,UAAS,UAAKA,EAAL,+BAAqCA,EAArC,wCAA8EyH,GADzF,SAGE,uBACEtK,MAAOoE,EACPtB,KAAK,OACLE,YAAY,uBACZI,SAbY,SAACF,GACC,oBAAbE,GAA2BA,EAASF,EAAE+C,OAAOjG,iBCsHzCuK,G,OAzHS,SAAC,GAWlB,IAVLC,EAUI,EAVJA,YAUI,IATJxK,aASI,MATI,GASJ,EARJ6C,EAQI,EARJA,UACA4H,EAOI,EAPJA,SACArH,EAMI,EANJA,SACAsH,EAKI,EALJA,OAKI,IAJJhI,gBAII,SAHJM,EAGI,EAHJA,YAGI,IAFJ2H,wBAEI,aADJC,wBACI,WACkDtG,mBAAS,IAD3D,mBACGuG,EADH,KACwBC,EADxB,OAEsDxG,mBAAS,GAF/D,mBAEGyG,EAFH,KAE0BC,EAF1B,OAG0C1G,oBAAS,GAHnD,mBAGG2G,EAHH,KAGoBC,EAHpB,OAIsB5G,mBAAStE,GAJ/B,mBAIGmL,EAJH,KAIUC,EAJV,KAKEC,EAAWC,iBAAO,MAExBnE,qBAAU,kBAAMiE,EAASpL,KAAQ,CAACA,IAClC,IAwBMuL,EAAqB,SAAC/I,GACF,oBAAbiI,GAAyBA,EAASjI,GAC7CsI,EAAuB,IACvBM,EAAS5I,GACTwI,EAAyB,GACzBE,GAAmB,IAEfpH,EAAU,SAACZ,GACf,IAAMV,EAAOU,EAAE+C,OAAOuF,UAAUC,OAAO,EAAGvI,EAAE+C,OAAOuF,UAAUzM,QAC7DwM,EAAmB/I,IAuBfkJ,EAA2B,WAC/B,OAAOb,EAAoB9L,OACzB,qBAAK8D,UAAU,6BAAf,SACGgI,EAAoBzF,KAAI,SAACuG,EAAYC,GACpC,IAAI/I,EAQJ,OALAA,EACE+I,IAAUb,EACN,+DACA,6BAGJ,sBAAMlI,UAAWA,EAA4BiB,QAASA,EAAtD,SACG6H,GAD8BA,QAOvC,qBAAK9I,UAAU,6BAAf,SACE,qBAAKA,UAAU,6DAAf,SACE,+CAMR,OACE,sBAAKA,UAAU,gBAAf,UACE,uBACEA,UAAWA,EAAY,wBACvBC,KAAK,OACLM,SAzFS,SAACF,GACd,IAAM2I,EAAY3I,EAAE+C,OAAOjG,MAGrB8L,EAAWnB,EACbH,EAAYlP,QACV,SAACqQ,GAAD,OAAgBA,EAAWrP,cAAcyP,QAAQF,EAAUvP,gBAAkB,KAE/EkO,EAEJY,EAASlI,EAAE+C,OAAOjG,OAClB8K,EAAuBgB,GACvBd,EAAyB,IAGrBJ,GAAoBkB,EAASC,QAAQF,IAAc,IACnDjB,GACAkB,EAAS/M,QAAU,GACnB8M,EAAU9M,QAAU+M,EAAS,IAAM,IAAI/M,OAEzCmM,GAAmB,GAChBA,GAAmB,GACA,oBAAb9H,GAAyBA,EAASF,EAAE+C,OAAOjG,QAoElDiD,UAnDY,SAACxI,GACK,KAAlBA,EAAMuR,UACRX,EAASY,QAAQC,OACjBX,EAAmBV,EAAoBE,KAInB,KAAlBtQ,EAAMuR,SACJjB,EAAwBF,EAAoB9L,OAAS,GACvDiM,EAAyBD,EAAwB,GAI/B,KAAlBtQ,EAAMuR,SACJjB,GAAuBC,EAAyBD,EAAwB,IAsC1EL,OAxDO,SAACxH,GACM,oBAAXwH,GAAyBA,EAAOxH,EAAE+C,OAAOjG,QAwD5CA,MAAOmL,EACPzI,SAAUA,EACVM,YAAaA,EACbmJ,IAAKd,IAENJ,GAAmBE,GAAS,cAACO,EAAD,S,kCC3DpBU,G,OAzDK,SAAC,GAAiC,IAA/BhM,EAA8B,EAA9BA,IAAKqK,EAAyB,EAAzBA,SAAU5C,EAAe,EAAfA,SAAe,EACfvD,mBAAStH,KAAKC,UAAUmD,OAAKiM,EAAW,IADzB,mBAC5CC,EAD4C,KAChCC,EADgC,OAEvBjI,oBAAS,GAFc,mBAE5CkI,EAF4C,KAEpCC,EAFoC,OAG3BnI,mBAASlE,GAHkB,mBAG5CsM,EAH4C,KAGtCC,EAHsC,KAgCnD,OALAxF,qBAAU,WACRoF,EAAcvP,KAAKC,UAAUmD,OAAKiM,EAAW,IAC7CI,IAAYrM,GACZuM,EAAQvM,KACP,CAACA,IAEF,sBAAKyC,UAAU,gBAAf,UACE,qBAAKA,UAAU,sCACf,0BACEA,UAAS,iEAA4D2J,GACrExR,KAAK,gBACLqM,GAAG,gBACHrH,MAAOsM,EACPlJ,SAnCkB,SAACF,GACvB,IAAM0J,EAAM1J,EAAE+C,OAAOjG,MACrBuM,EAAcK,GACd,IACE5P,KAAK6P,MAAMD,GACX,MAAO1J,GAEP,OADAuJ,GAAU,IACH,EAIT,OAFAA,GAAU,GACVE,EAAQ3P,KAAK6P,MAAMD,KACZ,KA0BL,sBAAK/J,UAAU,+BAAf,UACE,sBACEiB,QA1BO,WACT0I,GAA8B,oBAAb/B,GAAyBA,EAASiC,IA0BjD7J,UAAS,yDAAoD2J,GAF/D,SAIGA,EAAS,OAAS,SAErB,sBAAM1I,QA5BG,WACb2I,GAAU,GACVE,EAAQvM,GACRmM,EAAcvP,KAAKC,UAAUmD,OAAKiM,EAAW,IACrB,oBAAbxE,GAAyBA,KAwBThF,UAAS,gDAAhC,uBCzBOiK,G,cAxBE,SAAC,GAOX,IAAD,IANJnR,eAMI,MANM,GAMN,MALJoR,cAKI,MALK,GAKL,EAJJC,EAII,EAJJA,gBACAC,EAGI,EAHJA,SACApK,EAEI,EAFJA,UACAqK,EACI,EADJA,iBAEA,OACE,wBACErK,UAAWA,EACXE,aAAciK,EACd5J,SAAU6J,EACVjN,MAAOkN,EAJT,SAMGvR,EAAQyJ,KAAI,SAAC+H,EAAQlS,GAAT,OACX,wBAAgB+E,MAAO+M,EAAO9R,GAA9B,SACGkS,GADUlS,UChBfU,EAAU,CACd,SACA,SACA,OACA,UACA,SACA,QACA,YACA,OACA,UAeayR,EAZM,SAAC,GAA2D,IAAD,IAAxDC,oBAAwD,MAAzC,SAAyC,EAA/BJ,EAA+B,EAA/BA,SAA+B,IAArBpK,iBAAqB,MAAT,GAAS,EAE9E,OACE,cAAC,EAAD,CACEA,UAAS,UAHM,gBAGN,YAAmBA,GAC5BlH,QAASA,EACTsR,SAAUA,EACVC,iBAAkBG,KCWTC,I,OA7BQ,SAAC,GAOjB,IANLC,EAMI,EANJA,WACAC,EAKI,EALJA,iBACAC,EAII,EAJJA,UACAC,EAGI,EAHJA,UACA7K,EAEI,EAFJA,UACA8K,EACI,EADJA,aAEMnG,EAAS,SAACxH,GACduN,EAAWK,eAAeH,EAAWC,EAAWC,EAAc3N,EAAO,CAAC,SAAU,IAKlF,OACE,qBAAK6C,UAAS,kBAAd,SACE,cAAC,EAAD,CACEA,UAAS,yCAAoCA,GAC7C2H,YAAa+C,EAAWM,qBAAqBJ,GAC7ChD,SAAUjD,EACVpE,SAAUoE,EACVxH,MAAOwN,EACPxK,YAAa,gCACb4H,kBAAkB,QCfXkD,I,OATA,SAAC,GAAoC,IAAlCC,EAAiC,EAAjCA,MAAOC,EAA0B,EAA1BA,UAAW5K,EAAe,EAAfA,SAClC,OACE,wBAAOP,UAAS,iBAAYkL,EAAQ,QAAU,IAA9C,UACE,uBAAOjL,KAAK,WAAWmL,QAASD,EAAW5K,SAAUA,IACrD,sBAAMP,UAAS,iBAAYkL,EAAQ,QAAU,W,QCP7CG,GAAY,CAChBC,IAAK,aACLC,IAAK,WACL1B,KAAM,mBACN2B,IAAK,kBACLhF,IAAK,qBACLiF,KAAM,0EACNC,IAAK,2BACLC,KAAM,oEACNC,IAAK,gCACLC,KAAM,4EACNC,IAAK,aACLC,KAAM,aACNC,IAAK,YACLC,IAAK,YACLC,IAAK,iBAGQ,SAASC,GAAeC,GAErC,IAAMC,EAAYD,EAASE,MAAM,KAC3BC,EAAgBF,EAAUG,MAC1BC,EAA2BJ,EAAUK,KAAK,KAEhD,GAAIrB,GAAUkB,GAAgB,CAE5B,IAAMI,EAAW,2BAAuBF,EAAvB,YAAmDF,GAC9DK,EAAO,IAAIC,KAAK,CAACF,GAAc,CAAE1M,KAAMoL,GAAUkB,KAKvD,OAFiB,IAAIO,KAAK,CAACF,GAAOR,EAAU,CAAEnM,KAAMoL,GAAUkB,KAKhE,MAAM,oCAAN,OAA2CA,GChCtC,IAIMQ,GAAoB,SAAChD,GAAD,MAC/B,0HAA0HiD,KACxHjD,IAESkD,GACX,+HACWC,GAAkB,SAACnD,GAAD,MAC7B,gIAAgIiD,KAC9HjD,IAESoD,GAAgB,SAACpJ,EAAGqJ,GAAJ,OAAUrJ,EAAE2I,KAAK,OAASU,EAAEV,KAAK,MAGjDW,GAAiB,SAACtD,GAAD,MAAS,kBAAkBiD,KAAKjD,IAOjDuD,GAAmB,SAACC,GAAD,IAAMC,EAAN,uDAAe,IAAf,OAC9BD,EAAIpH,QAAQ,aAAZ,WAA8BqH,EAA9B,OAEWC,GAAoB,SAACF,GAAD,IAAMC,EAAN,uDAAe,IAAf,OAC/BD,EAAIpH,QAAQ,aAAZ,WAA8BqH,EAA9B,OA+BWE,GAAe,SAACH,GAAD,OAC1BA,EAAIjB,MAAM,iBAAiB7T,QAAO,SAACsR,GAAD,OAASA,EAAI4D,WAEpCpQ,GAAM,SAAsBA,GACvC,IAAMqQ,EAAS,GAETC,EAAc,SAACC,GAAD,OAClBA,EAAKpQ,QAAO,WAAgB4C,GAAhB,IAAEH,EAAF,0BAAwB,QAACA,QAAD,IAACA,OAAD,EAACA,EAAcG,GAAMH,EAAaG,KAAM,CAAC/C,KAwC/E,OAtCAqQ,EAAO5D,MAAQ,SAAC8D,GACd,GAAI1Q,MAAMC,QAAQyQ,GAChB,OAAOD,EAAYC,GACd,GAAoB,kBAATA,EAChB,OAAOD,EAAYH,GAAaI,IAEhC,MAAMC,MACJ,8FAINH,EAAOI,IAAM,SAACF,GACZ,GAAI1Q,MAAMC,QAAQyQ,GAChB,OAAOD,EAAYC,GAAM,GACpB,GAAoB,kBAATA,EAChB,OAAOD,EAAYH,GAAaI,IAAO,GAEvC,MAAMC,MACJ,4FAINH,EAAO7V,MAAQ,SAAC+V,EAAMG,GACpB,GAAI7Q,MAAMC,QAAQyQ,GAAO,CAAC,IAAD,EACkBD,EAAYC,GAD9B,mCAEJG,MACd,IAAoB,kBAATH,EAIhB,MAAMC,MACJ,6FALkC,IAAD,EACMF,EAAYH,GAAaI,IAD/B,mCAEhBG,IAMvBL,EAAOM,MAAQ,kBAAM/T,KAAK6P,MAAM7P,KAAKC,UAAUmD,KAE/CqQ,EAAOtQ,QAAU,kBAAiD,IAA3CvE,OAAOyE,oBAAoBD,GAAKrB,QAEhD0R,GAGIO,GAAM,SAAqBA,GACtC,IAAMP,EAASpW,MAAQ,GAKvB,OAHAoW,EAAOQ,YAAc,kBAhHHC,EAgHa,EAhHRC,EAgHWH,EAAIjS,OAAS,EAhHhBqS,KAAKC,MAAMD,KAAKE,UAAYH,EAAMD,EAAM,GAAKA,GAA3D,IAACA,EAAKC,GAkHvBV,EAAOc,WAAa,kBAAMP,EAAIP,EAAOQ,gBAC9BR,GAGHe,GAAY,8BAELC,GAAa,SAAC7E,GAAD,OAAS4E,GAAU3B,KAAKjD,IAKrC8E,GAAQ,SAAC9E,GACpB,GAL4B,SAACA,GAAD,MAAS,kCAAkCiD,KAAKjD,GAKxE+E,CAAe/E,GAAM,CAAC,IAAD,EACCA,EAAI/M,MAAM2R,IADX,mBACPnS,GADO,WAEvB,OAAOuS,IAAOvS,GAAMwS,SAEtB,GARyB,SAACjF,GAAD,MAAS,mCAAmCiD,KAAKjD,GAQtEkF,CAAmBlF,GAAM,CAAC,IAAD,EACHA,EAAI/M,MAAM2R,IADP,wBAE3B,OAAOxC,GAFoB,MAI7B,GAX0B,SAACpC,GAAD,MAAS,oCAAoCiD,KAAKjD,GAWxEmF,CAAoBnF,GAAM,CAAC,IAAD,EACJA,EAAI/M,MAAM2R,IADN,wBAE5B,OAjBc,SAAC5E,GAAD,OAASA,EAAIuC,MAAM,KAAK/J,KAAI,SAACpF,GAAD,OAAWA,EAAMwQ,UAiBpDwB,CAFqB,MAEL5M,IAAI4J,IAE7B,OAAOpC,GCpIF,SAASqF,GAASjS,EAAO9B,GAAwC,IAA7BgU,EAA4B,uDAAhB,GAAIC,EAAY,uCAC/DrP,EAAOsP,GAAQpS,GACfqS,EAAcH,EAAUG,aAAe,GACvCC,EAAgBJ,EAAUI,eAAiBxP,EAC3CyP,EAAOJ,KAAgBD,EAAUK,KACjCC,EAAUN,EAAUM,QACpB5T,EAAS6T,GAAU,CAAE3P,OAAM9C,QAAOqS,cAAaC,kBACrD,MAAO,CACLpU,YACAoU,gBACAD,cACAE,OACAC,UACA1P,OACA9C,QACApB,UAIG,SAAS8T,KAAmB,IACzB5T,EAAuDzE,KAAvDyE,QAAS6T,EAA8CtY,KAA9CsY,cAAeC,EAA+BvY,KAA/BuY,iBAAkB7K,EAAa1N,KAAb0N,SAC5C8K,EAAc,YAAOD,GACrBT,GAAcS,EAAiB7T,OAC/B+T,EAAc,GACdlU,EAAS,GAEf,SAASmU,EAAgBvY,EAAM4V,GAC7B,IAAMa,EAAc,WAGlB,IAAMrF,EAAQoF,GAAIxW,GAAMyW,cAClB+B,EAAU7C,GAAiBC,EAAKxE,GAItC,OAHAiH,EAAenY,SAAQ,SAACwI,GACjBA,EAAEsP,UAAStP,EAAEhF,UDKQ,SAACkS,EAAKpH,GAEtC,IAAMiK,EAAI3C,GAAkBF,GACtB8C,EAAI5C,GAAkBtH,GAE5B,GAAIiK,EAAExH,OAAO,EAAGyH,EAAEnU,UAAYmU,EAAG,CAE/B,IAAMD,EAAI7C,EAAIjB,MAAM,KACd+D,EAAIlK,EAAQmG,MAAM,KAExB,OADA8D,EAAEE,OAAF,MAAAF,EAAC,CAAY,EAAGC,EAAEnU,QAAjB,mBAA4BmU,KACtBD,EAAE1D,KAAK,KACT,OAAOa,EChBsBgD,CAAmBlQ,EAAEhF,UAAW8U,OAEzDpH,GAEHyH,EAAeR,EAClBvX,QAAO,YAAoB,IAAjB4C,EAAgB,EAAhBA,UACT,OAAOiS,GAAiBjS,KAAekS,KAExChL,KAAI,SAAClC,GACJ,OAAIA,EAAEsP,QD3BY,SAACpC,GAAD,OAASkD,UAAUlD,EAAIvQ,MAAM,eAAiB,CAAC,KAAM,MAAM,IC4BpE0T,CAAWrQ,EAAEhF,WAEb+S,OAGb,OAAOoC,EAAatU,OAASsU,EAAe,CAACpC,KAE/C,IAMMuC,EAAgB,SAACC,GACrBA,EAAW7U,OAAOlE,SAChB,SAACwI,GAAD,OAAOuQ,EAAWlB,MAAQ3T,EAAOxD,KAAP,2BAAiB8H,GAAjB,IAAoBhF,UAAWuV,EAAWvV,gBAEtE4U,EAAY1X,KAAKqY,IAIf1L,GACF,SAAU2L,EAAclZ,EAAM0D,GAC5B,IAAMuV,EAAaxB,GAASzX,EAAM0D,EAhBjB,SAACkS,GACpB,IAAMnV,EAAI4X,EAAe3X,WAAU,YAAoB,IAAjBgD,EAAgB,EAAhBA,UACpC,OAAOiS,GAAiBjS,KAAeiS,GAAiBC,MAE1D,OAAOnV,GAAK,EAAI4X,EAAeM,OAAOlY,EAAG,GAAG,GAAK,GAYF0Y,CAAazV,GAAYiU,GAEtE,GADAqB,EAAcC,GACU,WAApBA,EAAW3Q,KACblH,OAAOyE,oBAAoB7F,GAAME,SAAQ,SAACkZ,GACxCF,EAAclZ,EAAKoZ,GAAN,UAAgB1V,EAAhB,YAA6B0V,YAEvC,GAAwB,UAApBH,EAAW3Q,KAAkB,CACtBiQ,EAAgBvY,EAAD,UAAU0D,EAAV,QACvBxD,SAAQ,SAACkR,GAAD,OAAW8H,EAAclZ,EAAKoR,GAAN,UAAiB1N,EAAjB,YAA8B0N,EAA9B,UAT5C,CAWG9M,EAAS6T,GAKd,IAAMkB,EAAY,IAAIzT,GAAJ,gBAAWuS,EAAgB7T,IAC7C+T,EAAenY,SAAQ,YAA0B,IAAvBwD,EAAsB,EAAtBA,UAAcgF,EAAQ,6BACxClD,EAAQ6T,EAAUhD,IAAI3S,GACxBgF,EAAEqP,MAAMiB,EAAcvB,GAASjS,EAAO9B,EAAWgF,OAIvDtH,OAAOC,OAAOxB,KAAM,CAClByY,YAAaA,EAAYgB,MAAK,SAACC,EAAIC,GAAL,OAAYD,EAAG7V,UAAU+V,cAAcD,EAAG9V,cACxEU,WAIG,SAAS6T,GAAT,GAAiE,IAA5C3P,EAA2C,EAA3CA,KAAM9C,EAAqC,EAArCA,MAAOqS,EAA8B,EAA9BA,YAAaC,EAAiB,EAAjBA,cACpD,GAAIxP,IAASwP,GAAmC,UAAlBA,EAC5B,MAAO,CAAC,CAAEtX,KAAM,YAAakZ,SAAU5B,EAAe6B,SAAUrR,IAElE,OAAQA,GACN,IAAK,SACH,OAAOsR,GAAepU,EAAOqS,GAC/B,IAAK,OACH,OAAOgC,GAAarU,EAAOqS,GAC7B,IAAK,SACH,OAAOiC,GAAetU,EAAOqS,GAC/B,IAAK,QACH,OAAOkC,GAAcvU,EAAOqS,GAC9B,IAAK,UACH,OAAOmC,GAAgBxU,EAAOqS,GAChC,IAAK,OACL,IAAK,YACL,QACE,MAAO,IAIN,SAASD,GAAQpS,GACtB,QAAQ,GACN,IAAsB,kBAAVA,EACV,OAAKA,EACIC,MAAMC,QAAQF,GAAe,QAC1B,SAFO,OAGrB,IAAsB,kBAAVA,EACV,OAAI4R,IAAO5R,GAAOyU,UAAkB,OACxB,SACd,IAAsB,kBAAVzU,EACV,MAAO,SACT,IAAsB,mBAAVA,EACV,MAAO,UACT,IAAsB,qBAAVA,EACV,MAAO,YACT,QACE,MAAO,KDGb8B,OAAO8P,OAASA,IAChB9P,OAAO4P,MAAQA,GCAR,IAAM3O,GAAe,SAAC2R,GAC3B,OAAQA,GACN,IAAK,SACH,MAAO,GACT,IAAK,SACH,OAAO,EACT,IAAK,OACH,OAAO9C,MAASC,SAClB,IAAK,UACH,OAAO,EACT,IAAK,QACH,MAAO,GACT,IAAK,SACH,MAAO,GACT,IAAK,OACH,OAAO,KACT,IAAK,SACH,MAAO,GACT,IAAK,YACL,QACE,SAIA8C,GAAiB,SAACC,EAAMvC,GAAP,OACrBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,iBAAThF,GAA2B4Z,EAAK7V,SAAWiB,GAElC,cAAThF,GAAwB4Z,EAAK7V,OAASiB,GAE7B,cAAThF,GAAwB4Z,EAAK7V,OAASiB,EAHjCpB,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUS,EAAK7V,SAKxDH,IACN,KAEC2V,GAAgB,SAACvD,EAAKqB,GAAN,OACpBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,aAAThF,GAAwBgW,EAAIzL,SAASvF,GAElCpB,EADEA,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUnD,MAEzD2D,GAAe3D,EAAKqB,KAEnBiC,GAAiB,SAAC1H,EAAKyF,GAAN,OACrBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,cAAThF,GAAwB4R,IAAQ5M,GAGtB,WAAThF,GAAsB4R,EAAI/M,MAAM,IAAIiV,OAAO9U,EAAO,OAF9CpB,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUvH,IAK/C,YAAT5R,GACiB,kBAAVgF,GACNA,EACEmP,MAAM,KACN/J,KAAI,SAAC2P,GAAD,OAAOA,EAAEvE,UACbjL,SAASqH,GAGPhO,EADEA,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUvH,MAEzD+H,GAAe/H,EAAKyF,KAEnB+B,GAAiB,SAACY,EAAK3C,GAAN,OACrBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,cAAThF,GAAwBga,IAAQhV,GAEvB,QAAThF,GAAkBga,EAAMhV,GAEf,QAAThF,GAAkBga,EAAMhV,EAHnBpB,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUa,IAM/C,YAATha,GACiB,kBAAVgF,GACNA,EACEmP,MAAM,KACN/J,KAAI,SAAC2P,GAAD,OAAOzB,SAASyB,MACpBxP,SAASyP,GAGPpW,EADEA,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUa,MAEzD,KAECR,GAAkB,SAACS,EAAM5C,GAAP,OACtBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,eAAThF,GAAyBia,IAASjV,EAC7BpB,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUc,IACnDrW,IACN,KAECyV,GAAe,SAACa,EAAU7C,GAAX,OACnBA,EAAY9R,QAAO,SAAC3B,EAAD,GAA8B,IAAnB5D,EAAkB,EAAlBA,KAAMgF,EAAY,EAAZA,MAClC,MAAa,eAAThF,GAA0B4W,IAAOsD,GAAUC,OAAOnV,GAEzC,YAAThF,GAAsB4W,IAAOsD,GAAUE,QAAQpV,IAEtC,YAAThF,GAAsB4W,IAAOsD,GAAUG,SAASrV,GAD3CpB,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUe,IAGnDtW,EALEA,EAAOiW,OAAO,CAAE7Z,OAAMkZ,SAAUlU,EAAOmU,SAAUe,MAMzD,KCxOCrS,I,OAAY,QAiCZyS,GAAU,SAAC,GAAqD,IAAnDC,EAAkD,EAAlDA,IAAK9H,EAA6C,EAA7CA,UAAWxS,EAAkC,EAAlCA,EAAGsS,EAA+B,EAA/BA,WAAYiI,EAAmB,EAAnBA,OAAQxa,EAAW,EAAXA,KAChDya,EAAeF,EAAfE,WAD2D,EAEzCnR,oBAAS,GAFgC,mBAE5DT,EAF4D,KAEpD6R,EAFoD,KAG7DC,EAAW,WACfD,GAAS7R,IAeL+R,EACW,WAAfH,GACe,UAAfA,GACe,WAAfA,GACe,SAAfA,GACe,WAAfA,EACF,OAAQ5R,EAKN,sBAAKhB,UAAS,UAAKA,GAAL,oBAAd,UACE,sBAAKA,UAAS,0DAAd,UACE,qBAAKA,UAAS,MAAd,SACE,qBAAKA,UAAS,UAAKA,GAAL,oBAAd,SACE,cAAC,GAAD,CAAS7H,KAAMA,EAAM6I,OAAQA,EAAQ8R,SAAUA,QAGnD,qBAAK9S,UAAS,MAAd,SACE,qBAAKA,UAAS,UAAKA,GAAL,UAAd,SACE,cAAC,EAAD,CAAcwK,aAAcoI,EAAYxI,SAjCzB,SAAC/J,GACxBqS,EAAIE,WAAavS,EAAE+C,OAAOjG,MAC1BuV,EAAIpK,MAAQpI,GAAawS,EAAIE,YAC7BlI,EAAWsI,kBAAkBpI,EAAWxS,EAAG,GACpB,WAAnBsa,EAAIE,YACNlI,EAAWuI,eAAerI,EAAWxS,EAAG,GAAI,CAAC,SAAU,GACzDsS,EAAWwI,QAAQtI,EAAWxS,EAAGsa,UA8B7B,qBAAK1S,UAAS,aAAS+S,EAAY,IAAJ,KAC/B,qBAAK/S,UAAS,aAAQ+S,GAAQ,GAAK,IAAnC,SACE,cAAC,GAAD,CACEL,IAAKA,EACLta,EAAGA,EACHwS,UAAWA,EACXF,WAAYA,EACZqI,KAAMA,SAIXJ,EACC,GAEA,sBACE3S,UAAS,UAAKA,GAAL,qCACTiB,QA3CU,WAChByJ,EAAWyI,UAAUvI,EAAWxS,IAwC5B,iBA1BiDA,GAJrD,qBAAK4H,UAAS,UAAKA,GAAL,kBAAd,SACE,cAAC,GAAD,CAAS7H,KAAMA,EAAM6I,OAAQA,EAAQ8R,SAAUA,OAuC/CM,GAAU,SAAC,GAAgC,IAA9Bjb,EAA6B,EAA7BA,KAAM6I,EAAuB,EAAvBA,OAAQ8R,EAAe,EAAfA,SAC/B,OACE,sBAAK9S,UAAS,UAAKA,GAAL,UAAd,UACE,cAACqT,EAAD,CACErS,OAAQA,EACRsS,UAAS,UAAKtT,GAAL,gBACTiB,QAAS6R,EACT5R,MAAM,YACL,IACH,sBAAMlB,UAAS,UAAKA,GAAL,gBAAf,SAA8C7H,EAAO,SAIrDob,GAAc,SAAC,GAA6C,IA+GxDpW,EA/GauV,EAA0C,EAA1CA,IAAK9H,EAAqC,EAArCA,UAAWxS,EAA0B,EAA1BA,EAAGsS,EAAuB,EAAvBA,WAAYqI,EAAW,EAAXA,KAC5CzK,EAAoCoK,EAApCpK,MAAOsK,EAA6BF,EAA7BE,WAAYY,EAAiBd,EAAjBc,aADoC,EAEnB/R,oBAAS,GAFU,mBAExDgS,EAFwD,KAExCC,EAFwC,KAIzDC,EAAc,kBAAMD,GAAkB,IACtCE,EAAe,SAACvT,GACE,WAAlBA,EAAE+C,OAAOnD,KAAmByS,EAAIpK,MAAQmI,SAASpQ,EAAE+C,OAAOjG,OACnC,aAAlBkD,EAAE+C,OAAOnD,KAAqByS,EAAIpK,MAAQjI,EAAE+C,OAAOgI,QACvDsH,EAAIpK,MAAQjI,EAAE+C,OAAOjG,MAC1BuN,EAAWwI,QAAQtI,EAAWxS,EAAGsa,IAE7BmB,EAAoB,SAACC,GACzBpB,EAAIpK,MAAQwL,EACZpJ,EAAWwI,QAAQtI,EAAWxS,EAAGsa,GACjChI,EAAWsI,kBAAkBpI,EAAWxS,GACxCub,KAEII,EAAmB,SAAC,GAAiD,IAA/CC,EAA8C,EAA9CA,YAAa3Y,EAAiC,EAAjCA,UAAWlD,EAAsB,EAAtBA,KAAM8b,EAAgB,EAAhBA,UACxDJ,EAAkBG,GAAe,IACjC,IAAME,EAAa7Y,EACnB6Y,EAAW3b,KAAKJ,GAChB+b,EAAWC,QAAQ,SACM,kBAAdF,EACTvJ,EAAW0J,kBAAkBxJ,EAAWxS,EAAG6b,EAAWC,GACnDxJ,EAAWsI,kBAAkBpI,EAAWxS,IAc/C,OACE,qBAAK4H,UAAS,UAAKA,GAAL,kBAAwB+S,EAAO/S,mBAA6B,IAA1E,SACkB,cAAf4S,GAA6C,SAAfA,EAC7B,sBAAM5S,UAAS,UAAKA,GAAL,mBAAyB4S,GAAxC,SAAuDtK,EAAQ,KAC9C,WAAfsK,EACF,sBAAK5S,UAAS,UAAd,UACE,0BACEA,UAAS,UAAKA,GAAL,yBAA+BA,GAA/B,0BAA0D4S,GACnEzV,MAAOmL,EACP/H,SAda,SAACF,GAEtBuT,EAAavT,GACbqK,EAAW0J,kBAAkBxJ,EAAWxS,EAAGiI,EAAE+C,OAAOjG,MAAO,CAAC,WAYpDkX,QArBS,SAAChU,GAClB,IAAMiU,EAAYjU,EAAE+C,OAAOjG,MAAMjB,OAAS,GACpCqY,EAAahG,KAAKF,IAAI,GAAiB,GAAZiG,EAAgB,KACjDjU,EAAE+C,OAAO/B,MAAMmT,OAAf,UAA2BD,EAA3B,SAoBM,cAAC,GAAD,CAAUpX,MAAOuV,EAAIvV,QAASsX,MAAOjB,EAAatX,YAEnC,WAAf0W,EACF,qBAAK5S,UAAS,UAAd,SACE,uBACEA,UAAS,UAAKA,GAAL,yBAA+BA,GAA/B,0BAA0D4S,GACnE3S,KAAM2S,EACNza,KAAK,YACLuc,aAAa,MACbvX,MAAOmL,EACP/H,SAAUqT,MAGG,YAAfhB,EACF,sBAAK5S,UAAU,6BAAf,UACE,cAAC,GAAD,CAAQmL,UAAW7C,EAAO/H,SAAUqT,EAAc1I,OAAO,IAAS,IAClE,sBACElL,UAAS,UAAKA,GAAL,kCAAwCA,GAAxC,mCAA4EsI,GADvF,WAGc,IAAVA,GAAkB,QAGP,SAAfsK,EACF,uBACE5S,UAAS,UAAKA,GAAL,yBAA+BA,GAA/B,0BAA0D4S,GACnE3S,KAAM,iBACN9H,KAAK,YACLuc,aAAa,MACbvX,MAAOmL,EACP/H,SAAUqT,IAEK,WAAfhB,GAA0C,UAAfA,EAC7B,uBAAM5S,UAAS,UAAKA,GAAL,mBAAyB4S,GAAxC,UACE,qBACE5S,UAAS,UAAKA,GAAL,sBAA4BA,GAA5B,4BAAyDyT,GADpE,SAGE,cAAC,EAAD,CACE7L,SAAUiM,EACV7O,SAAU2O,EACVpW,IAAK+K,MAGT,cAAC,IAAD,CACEzG,IAAKyG,EACLnQ,MAAM,EACNwc,MAAOZ,EACPa,OAAQb,EACRc,SAAUd,EACVe,mBAAmB,EACnBC,kBAAkB,EAClBC,WAAW,IAEb,cAAC,GAAD,CAAU7X,MAAOuV,EAAIvV,QAASsX,MAAOjB,EAAatX,SAClD,sBACE8D,UAAS,UAAKA,GAAL,8BAAoCA,GAApC,6BAAkEyT,GAC3ExS,QAtGU,kBAAMyS,GAAkB,IAoGpC,sBAOe,WAAfd,GACAzV,EAYCuV,EAAIvV,QAXL,sBAAK6C,UAAS,UAAKA,GAAL,mBAAyB4S,GAAvC,UACE,cAAC,GAAD,CACElI,WAAYA,EACZC,iBAAkB6I,EAAa,GAAG7I,iBAClCC,UAAWA,EACXC,UAAWzS,EACX0S,aAAc,EACd9K,UAAS,UAAKA,GAAL,yBAA+BA,GAA/B,0BAA0D4S,KAErE,cAAC,GAAD,CAAUzV,MAAOA,EAAOsX,MAAOjB,EAAatX,aAIhD,sBAAM8D,UAAS,UAAKA,GAAL,WAAf,SAAyCsI,EAAQ,QAMlD,SAAS2M,GAAT,GAA8B,IAAV9X,EAAS,EAATA,MACnB0U,EAAYtC,GAAQpS,GAC1B,OACE,mCACiB,cAAd0U,GAA2C,SAAdA,EAC5B,sBAAM7R,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,SAAuD1U,EAAQ,KAC/C,WAAd0U,EACF,uBAAM7R,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,UACE,sBAAM7R,UAAS,UAAKA,GAAL,WAAf,eACC7C,EACD,sBAAM6C,UAAS,UAAKA,GAAL,WAAf,kBAEc,WAAd6R,EACF,sBAAM7R,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,SAAuD1U,EAAQ,KAC/C,YAAd0U,EACF,sBACE7R,UAAS,UAAKA,GAAL,oBAA0B6R,EAA1B,YAAuC7R,GAAvC,oBAA4D6R,EAA5D,aACP1U,EAAQ,IAFZ,WAKc,IAAVA,GAAkB,KAEN,SAAd0U,EACF,sBAAM7R,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,SACG9C,IAAO5R,GAAO+X,SAAW,KAEZ,WAAdrD,GAAwC,UAAdA,EAC5B,sBAAM7R,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,SACE,cAAC,IAAD,CACEhQ,IAAK1E,EACLhF,MAAM,EACN2c,mBAAmB,EACnBC,kBAAkB,EAClBC,WAAW,MAIf,sBAAMhV,UAAS,UAAKA,GAAL,oBAA0B6R,GAAzC,SAAuD1U,EAAQ,OAKvE,IAAMgY,GAAW,SAACnP,GAChB,OACE,qBAAKhG,UAAS,UAAKA,GAAL,mBAAyBgG,EAAMyO,MAAQzU,qBAArD,SACE,cAACiV,GAAD,eAAcjP,OAKLoP,GApSF,SAAC,GAA6C,IAA3C5Y,EAA0C,EAA1CA,KAAMkO,EAAoC,EAApCA,WAAYE,EAAwB,EAAxBA,UAAW+H,EAAa,EAAbA,OAG3C,OACE,qCACGnW,EAAKN,OAAS,EACb,qBAAK8D,UAAS,UAAKA,IAAnB,SACGxD,EAAK+F,KAAI,SAACmQ,EAAKta,GAAN,OACR,cAAC,GAAD,CAEEsa,IAAKA,EACLva,KAAI,oBAAeC,EAAf,KACJwS,UAAWA,EACXxS,EAAGA,EACHsS,WAAYA,EACZiI,OAAQA,GANHva,QAWX,GAEDua,EACC,GAEA,sBAAM3S,UAAS,UAAKA,GAAL,iBAA+BiB,QAxBxC,kBAAMyJ,EAAW2K,OAAOzK,IAwB9B,mBCpCO,I,OAAA,IAA0B,uCCA1B,OAA0B,8B,OCM1B,SAAS0K,GAAT,GAAmC,IAAZrU,EAAW,EAAXA,QACpC,OACE,qBACEjB,UAAU,MACViB,QAASA,EACTI,MAAO,CAAEkU,MAAO,QAChB1T,IAAK2T,GACL1T,IAAK,aAKJ,SAAS2T,GAAT,GAAgC,IAAZxU,EAAW,EAAXA,QACzB,OACE,qBACEjB,UAAU,MACVqB,MAAO,CAAEkU,MAAO,QAChB1T,ICvBS,qmCDwBTC,IAAK,YACLb,QAASA,IAKR,SAASyU,GAAT,GAA+B,IAAZzU,EAAW,EAAXA,QACxB,OACE,qBACEjB,UAAU,MACVqB,MAAO,CAAEkU,MAAO,QAChB1T,IAAK8T,GACL7T,IAAK,cACLb,QAASA,IErCf,IA0GenI,GADC,CAAE8c,MAxFJ,CACZ9c,QAAS,CAAC,cAAe,cAAe,iBAAkB,aAC1DoR,OAAQ,CAAC,YAAa,YAAa,eAAgB,YACnD2L,OAAQ,CAAC,SAAU,SAAU,SAAU,SAqFhBC,OA7FV,CACbhd,QAAS,CAAC,UAAW,OAAQ,OAAQ,cACrCoR,OAAQ,CAAC,YAAa,MAAO,MAAO,WACpC2L,OAAQ,CAAC,SAAU,SAAU,SAAU,SA0FRE,KAnFpB,CACXjd,QAAS,CAAC,UAAW,OAAQ,QAC7BoR,OAAQ,CAAC,aAAc,UAAW,WAClC2L,OAAQ,CAAC,iBAAkB,iBAAkB,mBAgFRG,QA9EvB,CAAEld,QAAS,CAAC,WAAYoR,OAAQ,CAAC,cAAe2L,OAAQ,CAAC,aA8EzBI,OAzGjC,CACbnd,QAAS,CACP,UACA,cACA,cACA,iBACA,WACA,cAEFoR,OAAQ,CAAC,YAAa,YAAa,YAAa,eAAgB,SAAU,WAC1E2L,OAAQ,CAAC,OAAQ,SAAU,SAAU,SAAU,OAAQ,SA+FDK,OA7EzC,CAAEpd,QAAS,GAAIoR,OAAQ,GAAI2L,OAAQ,IA6EczS,OA5EjD,CACbtK,QAAS,CAEP,gBACA,oBACA,oBACA,uBACA,WACA,mBAEA,gBACA,aACA,aACA,mBAEA,oBACA,oBACA,uBACA,YAEA,eACA,YACA,YAEA,iBAEFoR,OAAQ,CAEN,YACA,YACA,YACA,eACA,SACA,UAEA,YACA,MACA,MACA,UAEA,YACA,YACA,eACA,WAEA,aACA,UACA,UAEA,cAEF2L,OAAQ,CAEN,OACA,SACA,SACA,SAEA,OACA,OACA,SACA,SACA,SACA,OAEA,SACA,SACA,SACA,OAEA,iBACA,iBACA,iBACA,cAKSM,GAAe,CAC1BxW,KAAM,SACNmW,OAAQ,SACR,iBAAkB,OAClBM,SAAU,WChDGC,I,OAzDS,SAAC,GAOlB,IANLpW,EAMI,EANJA,KACA9H,EAKI,EALJA,KACAgF,EAII,EAJJA,MAII,IAHJ6C,iBAGI,MAHQ,GAGR,EAFJoK,EAEI,EAFJA,SACAkM,EACI,EADJA,eACI,EACyB7U,mBAC3B3I,GAAQmH,GAAM4V,OAAOtH,KAAKD,IAAIxV,GAAQmH,GAAMiK,OAAOhB,QAAQ/Q,GAAO,KAFhE,mBACGoe,EADH,KACcC,EADd,KAYE5C,EAAe,SAACvT,GACE,WAAlBA,EAAE+C,OAAOnD,KAAmBqW,EAAe7F,SAASpQ,EAAE+C,OAAOjG,QACtC,aAAlBkD,EAAE+C,OAAOnD,KAAqBqW,EAAejW,EAAE+C,OAAOgI,SAC1DkL,EAAejW,EAAE+C,OAAOjG,QAEzBsZ,EAAY,mBAClB,OACE,sBAAKzW,UAAS,2BAAsBA,GAApC,UACE,cAAC,EAAD,CACEA,UAAS,UAAKyW,EAAL,cACT3d,QAASA,GAAQmH,GAAMnH,QACvBoR,OAAQpR,GAAQmH,GAAMiK,OACtBG,iBAAkBlS,EAClBiS,SApBS,SAAC/J,GACd,IAAMqW,EAAkBrW,EAAE+C,OAAOjG,MAC3B/E,EAAIU,GAAQmH,GAAMiK,OAAO7R,WAAU,SAAC6Z,GAAD,OAAOA,IAAMwE,KACtDF,EAAQ1d,GAAQmH,GAAM4V,OAAOzd,IAE7BgS,EAAS/J,EAAE+C,OAAOjG,UAiBN,YAAT8C,EACC,uBACED,UAAS,UAAKyW,EAAL,WACTxW,KAAMsW,EACNpe,KAAK,kBACLuc,aAAa,MACbvX,MAAOA,EACPoD,SAAUqT,IAGZ,qCACE,cAAC,GAAD,CAAQzI,UAAWhO,EAAOoD,SAAUqT,EAAc1I,OAAO,IAAS,IAClE,sBACElL,UAAS,UAAKyW,EAAL,4BAAkCA,EAAlC,6BAAgEtZ,GAD3E,WAGc,IAAVA,GAAkB,aCtD1BwZ,I,OAAa,SAEJ,SAASC,GAAT,GAAuC,IAAtBC,EAAqB,EAArBA,MAAOC,EAAc,EAAdA,KAAM7W,EAAQ,EAARA,KAC3C,OACE,uBAAMD,UAAS,UAAK2W,GAAL,YAAmBA,GAAnB,aAAkC1W,GAAjD,UACG4W,EADH,IACWC,GAAQ,sBAAM9W,UAAS,UAAK2W,GAAL,UAAf,SAAyCG,O,cCK1DC,GAAkB,SAAC9G,GAAD,OACtBA,EAAYvS,QAAO,SAACsZ,EAAK3W,GAAN,OAAaA,EAAEqP,KAAOrP,EAAEmP,YAAYtT,OAAS,EAAI,GAAK8a,IAAK,IACjE,SAASC,GAAT,GAA6C,IAAtBjK,EAAqB,EAArBA,KAAMkK,EAAe,EAAfA,YAClCjH,EAAwBjD,EAAxBiD,YAAalU,EAAWiR,EAAXjR,OADoC,EAEjC0F,oBAAS,GAFwB,mBAElDD,EAFkD,KAE5CqR,EAF4C,OAG3BpR,oBAAUuL,EAAK+C,iBAAiB7T,QAHL,mBAGlDib,EAHkD,KAGzCC,EAHyC,OAIT3V,mBAC9CsV,GAAgB/J,EAAKiD,cALkC,mBAIlDoH,EAJkD,KAIhCC,EAJgC,KAWnDC,EAAmB,SAAC3G,GACxBA,EAAW7U,OAAS6T,GAAUgB,GAC9B5D,EAAK2D,cAAcC,GACnB5D,EAAKjR,OAASiR,EAAK4C,YACnBsH,KAGIM,EAAgB,SAACC,GAAO,IACpBhI,EAAkBQ,EAAYwH,GAA9BhI,cACFmD,EAAa8E,GAAkBjI,GAAeoG,OAAO,GAC3D5F,EAAYwH,GAAGjI,YAAYjX,KAAK,CAC9BJ,KAAMuf,GAAkBjI,GAAevF,OAAO,GAC9C/M,MAAO+C,GAAaiW,GAAavD,MAEnC2E,EAAiBtH,EAAYwH,IAC7BH,EAAoBP,GAAgB9G,KAGhC0H,EAAmB,SAACF,EAAGG,GAC3B3H,EAAYwH,GAAGjI,YAAYc,OAAOsH,EAAG,GACrCL,EAAiBtH,EAAYwH,IAC7BH,EAAoBP,GAAgB9G,KAGhC4H,EAAoB,SAACJ,EAAGG,EAAGE,EAAG5F,GAClCjC,EAAYwH,GAAGjI,YAAYoI,GAAGE,GAAK5F,EACnCqF,EAAiBtH,EAAYwH,KAGzBM,EAAqB,SAACN,EAAGpX,GAC7B4P,EAAYwH,GAAGhI,cAAgBpP,EAAE+C,OAAOjG,MACxC8S,EAAYwH,GAAGjI,YAAc,GAC7B+H,EAAiBtH,EAAYwH,KAGzBO,EAAmB,SAACP,EAAG/H,GAC3BO,EAAYwH,GAAG/H,KAAOA,EACtB6H,EAAiBtH,EAAYwH,IAC7BH,EAAoBP,GAAgB9G,KAoBtC,OATA3L,qBAAU,WACc,OAAlB0I,EAAKiL,SACPf,EAAYlK,EAAKiD,aAEjBiH,EAAY,IAEQ,OAAlBlK,EAAKiL,UAAmBX,EAAoBP,GAAgB/J,EAAKiD,gBACpE,CAACjD,EAAKiD,YAAajD,EAAKiL,WAGzB,qBAAKjY,UAAS,2CAAsCiQ,EAAY/T,OAAS,GAAzE,SACE,cAAC,EAAD,CACEsF,KAAMA,EACN8F,gBAlEkB,WACtBuL,GAAQ,SAACqF,GAAD,OAAYA,MAkEhB3W,MACE,qCACE,sBAAKvB,UAAS,gDAA2CjE,EAAOG,OAAS,GAAzE,UACE,sBAAM8D,UAAU,yBAAhB,SACGjE,EAAOG,OAAS,EAAI,gBAAkB,kBAEzC,uBACE8D,UAAS,+CAA0CjE,EAAOG,OAAS,GADrE,UAGE,cAAC0a,GAAD,CAAOC,MAAO9a,EAAOG,OAAQ+D,KAAMlE,EAAOG,QAAU,UAHtD,aAKA,cAAC0a,GAAD,CAAOC,MAAOQ,IAAqB,IACnC,sBAAMrX,UAAU,qBAAhB,sBAEF,uBACEA,UAAU,wBACVC,KAAK,WACLmL,QAAS+L,EACT5W,SAxCkB,WAC5B6W,GAAYD,GACZnK,EAAKiD,YAAcjD,EAAKiD,YAAY1N,KAAI,SAAClC,GAAD,mBAAC,eAAYA,GAAb,IAAgBqP,MAAOyH,OAC/DnK,EAAKjR,OAASiR,EAAK4C,YACnBsH,IACAI,EAAoBP,GAAgB9G,UAclC,SA0BGA,EAAY1N,KACX,WAEEnK,GACI,IAFFiD,EAEC,EAFDA,UAAW4E,EAEV,EAFUA,KAAMwP,EAEhB,EAFgBA,cAAeC,EAE/B,EAF+BA,KAAM3T,EAErC,EAFqCA,OAAQyT,EAE7C,EAF6CA,YAAaG,EAE1D,EAF0DA,QAASxS,EAEnE,EAFmEA,MAGtE,OACE,cAAC,GAAD,CAEE9B,UAAWA,EACX4E,KAAMA,EACNwP,cAAeA,EACf1T,OAAQA,EACRyT,YAAaA,EACbzG,MAAO3Q,EACPof,cAAeA,EACfG,iBAAkBA,EAClBE,kBAAmBA,EACnBE,mBAAoBA,EACpBC,iBAAkBA,EAClBd,YAAaA,EACbxH,KAAMA,EACN1C,KAAMA,EACN2C,QAASA,EACTxS,MAAOA,GAhBF/E,UA0BrB,IAAM+f,GAAgB,SAAC,GAiBhB,IV3I4BpO,EU2HjC1O,EAgBI,EAhBJA,UACA4E,EAeI,EAfJA,KACAwP,EAcI,EAdJA,cACA1T,EAaI,EAbJA,OACAyT,EAYI,EAZJA,YACAzG,EAWI,EAXJA,MACAyO,EAUI,EAVJA,cACAG,EASI,EATJA,iBACAE,EAQI,EARJA,kBACAE,EAOI,EAPJA,mBACAC,EAMI,EANJA,iBACAd,EAKI,EALJA,YACAxH,EAII,EAJJA,KACA1C,EAGI,EAHJA,KACA2C,EAEI,EAFJA,QACAxS,EACI,EADJA,MAEMib,EAAY,eAACzY,EAAD,uDAAQ,GAAR,OAAe4O,KAAK8J,KAAK1Y,EAAKzD,OAAS,MADrD,EAE2BuF,mBAAS2W,EAAU,IAF9C,mBAEGE,EAFH,KAEeC,EAFf,KAGElX,EAAQ,CAAE,eAAgBiX,EAAa,MAHzC,EAIoB7W,mBAAS1F,EAAOG,QAAUsT,EAAYtT,QAJ1D,mBAIGsF,EAJH,KAISqR,EAJT,KAME2F,IAAczc,EAAO4H,MAAK,kBAAuB,cAAvB,EAAGxL,QAkBnC,OATAmM,qBACE,kBAAMiU,EAASH,EAAU3I,MAEzB,CAACA,EAAe6I,IAGlBhU,qBAAU,WACJvI,EAAOG,QAAUsT,EAAYtT,QAAQ2W,GAAQ,KAChD,CAAC9W,IAEF,cAAC,EAAD,CACEyF,KAAMA,EACN8F,gBApBoB,WACtBuL,GAAQ,SAACqF,GAAD,OAAYA,MAoBlB3W,MACE,qCACE,sBAAKvB,UAAS,qBAAwBqB,MAAOA,EAA7C,WVzKyB0I,EU0KH1O,EV1KW,iBAAiB2R,KAAKjD,GU2KnD,cAAC0O,GAAD,CACEvB,YAAaA,EACb7b,UAAWA,EACX2R,KAAMA,EACN2C,QAASA,EACTxS,MAAOA,IAGT,uBACE6C,UAAS,oDACPjE,EAAOG,OAAS,GAFpB,UAKGb,EALH,IAKe,QAGjB,cAAC,EAAD,CACEmP,aAAciF,EACdrF,SAxCK,SAAChS,EAAGiI,GACnB0X,EAAmB3f,EAAGiI,GACtBkY,EAASH,EAAU/X,EAAE+C,OAAOjG,SAsCCub,KAAK,GAAM3P,KAEhC,uBACE/I,UAAS,mFACsBwY,EADtB,+CAEYA,GAHvB,uBAKavY,EALb,SAOGuP,EAAYtT,QAAU,cAAC0a,GAAD,CAAOC,MAAOrH,EAAYtT,YAErD,uBACE8D,UAAU,wBACVC,KAAK,WACLmL,QAASsE,EACTnP,SAnDS,kBAAMyX,EAAiBjP,GAAQ2G,SAWhD,SA6CE,qBAAK1P,UAAU,mBAAf,SACE,uBACEA,UAAS,yDACW,WAAlByP,GACkB,SAAlBA,GACkB,cAAlBA,GAJJ,UAOE,qBAAKzP,UAAU,iCAAf,SACE,sBACEA,UAAU,sCACViB,QAASuW,EAAckB,KAAK,GAAM3P,GAFpC,iBAOF,qBAAK/I,UAAU,oCAAf,SACGwP,EAAYjN,KAAI,WAAkBnK,GAAO,IAAtBD,EAAqB,EAArBA,KAAMgF,EAAe,EAAfA,MAClBwb,IAAY5c,EAAO4H,MAAK,qBAAGxL,OAAgCA,KACjE,OACE,sBAAK6H,UAAU,0BAAf,UACE,cAAC,GAAD,CACEA,UAAS,6BAAwB2Y,EAAxB,mCACT1Y,KAAMwP,EACNtX,KAAMA,EACNgF,MAAOA,EACPiN,SAAUyN,EAAkBa,KAAK,GAAM3P,EAAO3Q,EAAG,QACjDke,eAAgBuB,EAAkBa,KAAK,GAAM3P,EAAO3Q,EAAG,WAEzD,sBACE4H,UAAU,0CACViB,QAAS0W,EAAiBe,KAAK,GAAM3P,EAAO3Q,GAF9C,iBAT4CA,gBAyB9D,SAASqgB,GAAT,GAAuF,IAA7Dpd,EAA4D,EAA5DA,UAAWud,EAAiD,EAAjDA,WAAY1B,EAAqC,EAArCA,YAAalK,EAAwB,EAAxBA,KAAM2C,EAAkB,EAAlBA,QAAkB,KAATxS,MAC3C9B,EAAUiR,MAAM,eADoC,0BAC7EnU,OAD6E,MACtE,GADsE,SAClE4Q,OADkE,MAC1D,GAD0D,IAE5DtH,oBAAS,GAFmD,mBAE7ED,EAF6E,KAEvEqR,EAFuE,OAGlDpR,qBAAWkO,GAHuC,mBAG7EkJ,EAH6E,KAGlEC,EAHkE,OAItDrX,mBAASgP,SAAS1H,EAAMH,OAAO,EAAGG,EAAM7M,OAAS,KAJK,mBAI7E0O,EAJ6E,KAIlEmO,EAJkE,KAkDpF,OANAzU,qBAAU,kBAAMwU,IAAenJ,KAAU,CAACA,IAC1CrL,qBAAU,WAAO,IAAD,EACkBjJ,EAAUiR,MAAM,cADlC,iCACIvD,OADJ,MACY,GADZ,EAEdgQ,EAAStI,SAAS1H,EAAMH,OAAO,EAAGG,EAAM7M,OAAS,OAChD,CAACb,IAGF,uBAAM2E,UAAS,oDAA+C4Y,EAAa,GAA3E,UACE,+BAAOzgB,IACLqJ,EAQA,uBAAMxB,UAAS,4BAAf,UACE,sBAAMA,UAAU,wBAAhB,SAAyC,MACxC6Y,EACC,uBACE7Y,UAAU,2BACVC,KAAM,SACNM,SA7DQ,SAACF,GAAD,OAAO0Y,EAAStI,SAASpQ,EAAE+C,OAAOjG,SA8D1CkR,IAAK,EAELlR,MAAOyN,IAGT,sBAAM5K,UAAU,sBAAhB,oBAEF,uBACEA,UAAU,8BACVoL,QAASyN,EACTtY,SApCU,SAACF,GAAD,OAAOyY,EAAazY,EAAE+C,OAAOgI,UAqCvCnL,KAAM,aAER,sBAAMgB,QA1EF,WAEV+L,EAAK+C,iBAAiBxX,KAAK,CACzB8C,UAAU,GAAD,OAAKlD,EAAL,YAAayS,EAAY,EAAzB,KACT8E,MAAM,EACNC,SAAS,IAGNA,GAGH3C,EAAKgM,gBAAgB3d,EAArB,UAAmClD,EAAnC,YAA2CyS,EAA3C,MAEFoC,EAAKiM,WACL/B,IACArE,GAAQ,IA2DkB7S,UAAU,iCAA9B,eAGA,sBAAMA,UAAU,wBAAhB,SAAyC,MACzC,sBAAMiB,QA3DD,WAEX,GADA+L,EAAKkM,mBAAmB7d,GACpBwd,EACF7L,EAAKgM,gBAAgB3d,EAArB,UAAmClD,EAAnC,YAA2CyS,EAA3C,UACK,CACL,IAAMvK,EAAI2M,EAAKiD,YAAYtM,MAAK,SAACtD,GAAD,OAAOA,EAAEhF,YAAcA,KACnDgF,IACFA,EAAEsP,SAAU,EACZtP,EAAEoP,mBAAgBjG,EAClBwD,EAAK2D,cAActQ,IAGvB2M,EAAKiM,WACL/B,IACArE,GAAQ,IA6CmB7S,UAAU,+BAA/B,qBA/BF,sBACEiB,QA/BK,kBAAM4R,GAAQ,IAgCnB7S,UAAS,2EAAsE6Y,GAFjF,SAIG9P,IAPP,IAuCI,OC7WO,WAA0B,sCC+H1BoQ,GAtHI,SAAC,GAMb,IALLC,EAKI,EALJA,eACApM,EAII,EAJJA,KAII,IAHJpC,iBAGI,MAHQ,EAGR,MAFJyO,eAEI,aADJC,uBACI,SACEnZ,EAAc,yBADhB,EAEuD6M,EAAK3R,UAAxD4G,EAFJ,EAEIA,YAAaC,EAFjB,EAEiBA,UAAWqB,EAF5B,EAE4BA,WAAYC,EAFxC,EAEwCA,WAFxC,EAGkB/B,mBACpB+B,EAAU,UAAMtB,EAAN,YAAmBqB,EAAnB,YAAiCC,GAAe,IAJxD,mBAGG+J,EAHH,KAGQgM,EAHR,OAM6B9X,mBAAStB,EAAYjE,OAAS,IAN3D,mBAMGsd,EANH,KAMgBC,EANhB,OAOuChY,mBAAS,IAPhD,mBAOGiY,EAPH,KAOqBC,EAPrB,KAQIra,EAAsBmE,qBAAWvE,GAAjCI,kBARJ,EASkCmC,mBAASuL,EAAK/Q,SAThD,mBASG2d,EATH,KASgBC,EAThB,KAWEC,EAAO,uCAAG,sBAAA/V,EAAA,sDACdqV,EAAeU,QAAQlP,GADT,2CAAH,qDA8BbtG,qBAAU,WACRuV,EAAe7M,EAAK/Q,WACnB,CAAC+Q,EAAK/Q,UACTqI,qBAAU,kBA9BgB,WACxB,IAAMyV,EAAkB,GACxBza,EAAkBzH,SAAQ,SAACyO,GACzBA,EAAQrD,OAAOrG,eAAepB,QAAQ3D,SAAQ,SAACgE,GAC7CA,EAAIc,QAAQ9E,SAAQ,SAACyB,GACnBygB,EAAgBxhB,KAAhB,UAAwB+N,EAAQpE,UAAhC,YAA6CrG,EAAI1D,KAAjD,YAAyDmB,EAAOhB,GAAhE,gBAINqhB,EAAeI,GAqBDC,KAAqB,CAAC/X,EAAa3C,IACnDgF,qBAAU,WACR,IAAM2V,EAAgBzW,EAAU,UAAMtB,EAAN,YAAmBqB,EAAnB,YAAiCC,GAAe,GAChF+V,EAAOU,GACPR,GAAWQ,GAAiB9Z,GAAajE,OAAS,MACjD,CAAC8Q,EAAK3R,UAAWiE,IAEpB,IAAM+B,EAAQ,CAAE,gBAAiBmY,EAAcA,EAAc,KAAO,QACpE,OACE,qBAAKxZ,UAAU,aAAaqB,MAAOA,EAAnC,SACE,sBAAKrB,UAAU,kCAAf,UACE,qBAAKA,UAAU,4BAAf,SACE,sBAAMA,UAAU,+BAA+BiB,QAAS6Y,EAAxD,SACE,cAACxE,GAAD,QAGJ,sBAAKtV,UAAU,wBAAf,UACE,cAAC,EAAD,CACEA,UAAU,gCACV2H,YAAa+R,EACb9R,SAtCe,SAACsS,GAAe,OAEvCA,EAAaA,EAAWC,MAAM,GAAI,IACqB7N,MAAM,KAHtB,mBAGhCpK,EAHgC,KAGrBqB,EAHqB,KAGTC,EAHS,KAIvC4V,EAAegB,gBAAgBxP,EAAW,CAAE1I,YAAWqB,aAAYC,gBAmC3DrG,MAAK,UAAKoQ,GACV1N,UAAWwZ,EACXlZ,YAAaA,EACb0H,OAhCU,kBAAM4R,EAAUtZ,EAAYjE,OAAS,OAkCjD,sBAAM8D,UAAU,qCAAhB,SAAsD,MACtD,cAAC,GAAD,CACExD,KAAMwQ,EAAKxQ,KACXkO,WAAY0O,EACZxO,UAAWA,EACX+H,OAAQ2G,IAEV,sBAAMtZ,UAAU,qCAAhB,SAAsD,SAExD,sBACEA,UAAS,uEACW,OAAlBgN,EAAKiL,UAFT,UAKE,sBACEhX,QApDY,WACpBmY,EAAeiB,aAAazP,IAoDpB5K,UAAS,2CAFX,eAMA,sBAAMiB,QApDiB,WAC7BmY,EAAekB,uBAAuB1P,IAmDO5K,UAAS,2BAAhD,SACGgN,EAAKuN,eACJ,qBAAKlZ,MAAO,CAAEkU,MAAO,IAAM1T,IAAK2Y,GAAW1Y,IAAI,SAE/C,QAIJ,sBAAK9B,UAAU,6BAAf,UACE,uBAAMA,UAAS,4BAAf,UAA+CgN,EAAK8C,cAApD,OACA,cAACmF,GAAD,CAAU9X,MAAOyc,UAGrB,cAAC3C,GAAD,CACEC,YAAakC,EAAelC,YAAYwB,KAAK,GAAI9N,GACjDoC,KAAMA,UCjDDyN,I,OAhEO,SAAC,GAWhB,IAVCC,EAUF,EAVJlZ,KACAD,EASI,EATJA,MACAT,EAQI,EARJA,SACAuY,EAOI,EAPJA,QACAD,EAMI,EANJA,eACApM,EAKI,EALJA,KACApC,EAII,EAJJA,UACA+P,EAGI,EAHJA,YACArB,EAEI,EAFJA,gBACAsB,EACI,EADJA,UAEM5a,EAAY,iBADd,EAEoByB,mBAASiZ,GAF7B,mBAEGlZ,EAFH,KAESqR,EAFT,KAeJ,OADAvO,qBAAU,cAAU,CAAC0I,EAAKzL,QAExB,yBAASvB,UAAWA,EAApB,SACE,eAAC,EAAD,CACEsH,gBAdkB,WACtBuL,GAAQ,SAACqF,GAAD,OAAYA,MAchB1W,KAAMA,EACNmZ,YAAaA,GAAe,UAC5BpZ,MACE,qCACE,cAAC,EAAD,CACEhB,SAbQ,SAACZ,GACnByZ,EAAeyB,YAAYjQ,EAAWjL,IAa5B6H,QAAS,4BAAIjG,IACbkG,UAAU,EACVlG,MAAOyL,EAAKzL,OAAS,KAEtBqZ,GACC,sBACE5a,UAAS,UAAKA,EAAL,+BACTiB,QAzBK,WACjBmY,EAAe0B,WAAWlQ,IAsBhB,kBAbR,UAuBE,cAAC,GAAD,CACEwO,eAAgBA,EAChBpM,KAAMA,EACNpC,UAAWA,EACXyO,QAASA,EACTC,gBAAiBA,IAElBxY,SCvDF,SAASia,GAAYpQ,GAAsD,IAApCuJ,EAAmC,uDAAtB,GAAI8G,EAAkB,uDAAH,EAC5ExjB,KAAKmT,iBAAmBA,EACxBnT,KAAK0c,WAAaA,EAClB1c,KAAKwjB,aAAeA,EAEP,SAAS/F,GACtB9c,EACA8iB,GAIC,IAAD,OAHArI,EAGA,uDAHa,SACbtK,EAEA,uDAFQ,GACRkL,EACA,uDADe,GAEfhc,KAAKW,KAAO,YACZX,KAAK8Q,MAAQA,EACb9Q,KAAKob,WAAaA,EAClBpb,KAAKqa,UAAY,GACjBra,KAAKgc,aAAeA,EAEpBhc,KAAK2F,MAAQ,WACX,OAAO,EAAKqW,aAAa9V,QAAO,SAACgV,EAAD,GAAiD,IAAzCwB,EAAwC,EAAxCA,WAA8B3G,EAAU,EAA5B5C,iBAA4B,EAC5CpN,GAAImV,GAAK1I,MAAMkK,GAD6B,mBACvE/W,EADuE,KAChEgD,EADgE,KACnDG,EADmD,KAa9E,OAVI4M,GAAgBK,GAClBpN,EAAYG,GAAOnD,EAChBwQ,OACAxH,QAAQoH,EAAK2N,EAAe3N,EAAI4N,UAAU,EAAG5N,EAAIrR,OAAS,KACpD6Q,GAAkBQ,GAC3BpN,EAAYG,GAAO4a,EAAe3N,GAElCpN,EAAYG,GAAOuO,GAAMtB,GAGpBmF,IAENnV,GAAI,GAAM2Q,SAAS5F,OAGxB9Q,KAAK4c,kBAAoB,SAAC9L,EAAO4L,GAQ/B,OANA9W,MAAMQ,KAAK0K,EAAM8S,SAASnO,KAAqBpV,SAAQ,SAACmF,GACtD,EAAKiW,eAAejW,EAAM,GAAIkX,EAAYlX,EAAM+L,WAE9CgE,GAAkBzE,IAAUsG,GAAWtG,KACzC,EAAK2K,eAAe3K,EAAO4L,EAAY,GAElC,GAGT1c,KAAK6jB,sBAAwB,WAY3B,OATA,EAAK7H,aAAe,EAAKA,aAAa/a,QACpC,YAAqD,IAAlDkS,EAAiD,EAAjDA,iBAAkBuJ,EAA+B,EAA/BA,WAAY8G,EAAmB,EAAnBA,aACzB7d,EAAQI,GAAI,GAAMyQ,IAAIkG,GAC5B,MACmB,kBAAV/W,GACPA,EAAM+L,QAAQyB,EAAkBqQ,KAAkBA,KAIjD,GAGTxjB,KAAKyb,eAAiB,SAACtI,GAAqD,IAAnCuJ,EAAkC,uDAArB,GAAI8G,EAAiB,uCASzE,OAFO,IALP,EAAKxH,aAAanb,WAChB,SAACijB,GAAD,OACEA,EAAG3Q,mBAAqBA,GACxBwC,GAAcmO,EAAGpH,WAAYA,IAC7BoH,EAAGN,eAAiBA,MAEtB,EAAKxH,aAAajb,KAAK,IAAIwiB,GAAYpQ,EAAkBuJ,EAAY8G,IAChE,GAGT,IAAME,EAAiB,SAAC5S,GAAW,IAAD,EACTA,EAAMgE,MAAM,KADH,mBACzBU,EADyB,KACnBuO,EADmB,KAE1BhO,EAAMjF,EACTnC,QAAQ6G,EAAM,CAAEwO,WAAY,EAAGC,SAAU,EAAGC,OAAQ,EAAGC,UAAW,GAAI3O,IACtE7G,QAAQoV,EAAQ9K,SAAS8K,EAAOpV,QAAQ,SAAU,KAAO,GACzDA,QAAQ,QAAS,WACpB,OAAO5I,GAAI0d,GAAUjN,IAAIT,I,WCdvBqO,GAAY,SAAC,GAA4B,IAA1B3a,EAAyB,EAAzBA,QAASjB,EAAgB,EAAhBA,UAC5B,OACE,sBAAMA,UAAS,UAAKA,EAAL,iBAA+BiB,QAASA,EAAvD,gBAKW4a,GA3EU,SAAC,GAQnB,IAPLrU,EAOI,EAPJA,QACA4R,EAMI,EANJA,eACA0C,EAKI,EALJA,YACAzC,EAII,EAJJA,QACAhe,EAGI,EAHJA,UAGI,IAFJqX,WAEI,MAFE,GAEF,EADJ4G,EACI,EADJA,gBAEMtZ,EAAY,qBADd,EAEoByB,oBAAS,GAF7B,mBAEGD,EAFH,KAESqR,EAFT,KAeJ,OACE,yBAAS7S,UAAWA,EAApB,SACE,cAAC,EAAD,CACEsH,gBAdkB,WACtBuL,GAAQ,SAACqF,GAAD,OAAYA,MAchB1W,KAAMA,EACND,MACE,qCACE,cAAC,EAAD,CACEiG,QACE,iCACGA,EAAS,IACTsU,EAAY5f,OAAS,GAAK,cAAC0a,GAAD,CAAOC,MAAOiF,EAAY5f,cAI3D,cAAC,GAAD,CAAW+E,QAtBL,WACdmY,EAAe2C,QACb1gB,EACAqX,EAAIva,MAAQ,CAAC,IAAI8c,GAASvC,EAAIva,KAAMua,EAAIuI,SAAUvI,EAAIE,cAEjC,IAAvBkJ,EAAY5f,QAAgB2W,GAAQ,IAiBC7S,UAAWA,OAG5C2a,YAAY,UAhBd,SAkBE,qBAAK3a,UAAS,UAAKA,EAAL,eAAd,SACG8b,EAAY5f,OAAS,EACpB4f,EAAYvZ,KAAI,SAACyK,EAAM5U,GAAP,OACd,cAAC,GAAD,CAEEghB,eAAgBA,EAChBpM,KAAMA,EACNpC,UAAWxS,EACXmJ,MAAK,UAAKnJ,EAAI,EAAT,KACLuiB,YAAa,UACbtB,QAASA,EACT7X,MAAM,EACN8X,gBAAiBA,EACjBsB,WAAS,GATJxiB,MAaT,qDCtDG4jB,I,OAXI,SAAC,GAAqC,IAAnCF,EAAkC,EAAlCA,YAAa1C,EAAqB,EAArBA,eACjC,OACE,cAAC,GAAD,CACEC,SAAS,EACTyC,YAAaA,EACb1C,eAAgBA,EAChB5R,QAAQ,aCKCyU,I,OAXG,SAAC,GAAqC,IAAnCH,EAAkC,EAAlCA,YAAa1C,EAAqB,EAArBA,eAChC,OACE,cAAC,GAAD,CACEC,SAAS,EACTyC,YAAaA,EACb1C,eAAgBA,EAChB5R,QAAQ,YCSC0U,I,OAdE,SAAC,GAAqC,IAAnC9C,EAAkC,EAAlCA,eAAgB0C,EAAkB,EAAlBA,YAClC,OACE,yBAAS9b,UAAU,uBAAnB,SACE,cAAC,GAAD,CACEuB,MAAM,QACNC,MAAM,EACNwL,KAAM8O,EAAY,GAClBlR,UAAW,EACXwO,eAAgBA,QCKT+C,I,OAdI,SAAC,GAAsE,IAApEL,EAAmE,EAAnEA,YAAa1C,EAAsD,EAAtDA,eAAgB/d,EAAsC,EAAtCA,UAAW4f,EAA2B,EAA3BA,SAA2B,EAAjBmB,WACtE,OACE,cAAC,GAAD,CACE/C,SAAS,EACTyC,YAAaA,EACb1C,eAAgBA,EAChB/d,UAAWA,EACXqX,IAAK,CAAEva,KAAM,aAAcya,WAAY,SAAUqI,YACjDzT,QAAQ,SACR8R,iBAAiB,MCRR,SAAS+C,GAAT,GAQX,IAAD,OAPDhhB,EAOC,EAPDA,UACAmB,EAMC,EANDA,KACA+E,EAKC,EALDA,MAKC,IAJDgZ,sBAIC,aAHDxK,wBAGC,MAHkB,GAGlB,EAFDhH,EAEC,EAFDA,MAEC,IADD7D,gBACC,SACKoX,EAAS,IAAIC,GAAW/kB,MAC9BA,KAAKuR,MAAQA,EACbvR,KAAK4kB,WAAa,GAClB5kB,KAAK+J,MAAQA,EACb/J,KAAKgF,KAAOA,GAAQ,GACpBhF,KAAK0N,SAAWA,EAChB1N,KAAK+iB,eAAiBA,KAAoBxK,EAAiB7T,OAC3D1E,KAAK6D,UAAYA,GAAa,CAC5B6G,UAAW,GACXqB,WAAY,GACZC,WAAY,IAEdhM,KAAKglB,aAAe,WAQlB,OAPA,EAAKvgB,QAAU,KACf,EAAK6T,cAAgB,GACrB,EAAK2M,WAAa,KAClB,EAAKxE,SAAW,KAChB,EAAKhI,YAAc,GACnB,EAAKF,iBAAmBxS,GAAIwS,GAAkB7B,QAC9C,EAAKnS,OAAS,GACP,GAGTvE,KAAKglB,eAELhlB,KAAKoY,UAAY,WAQf,OAPA,EAAK7T,OAAS,EAAKkU,YAChBxX,QAAO,qBAAGiX,QACVhS,QACC,SAACsZ,EAAD,OAAQjb,EAAR,EAAQA,OAAQV,EAAhB,EAAgBA,UAAhB,OACE2b,EAAIhF,OAAOjW,EAAOwG,KAAI,SAAClC,GAAD,mBAAC,eAAYA,GAAb,IAAgBhF,oBACxC,IAEG,EAAKU,QAGdvE,KAAKyhB,SAAWpJ,GAAgB6I,KAAKlhB,MAErCA,KAAKsiB,QAAL,sBAAe,wCAAA/V,EAAA,2DACiC,EAAK1I,UAA3C6G,EADK,EACLA,UAAWqB,EADN,EACMA,WAAYC,EADlB,EACkBA,WACzBhH,EAAO,EAAKA,KAAK+F,KAAI,SAACmQ,GAAD,OAASA,EAAIvV,WAExC,EAAKsf,WAAa1N,MAASC,SACrB0N,EAAS,EAAKN,WAAWla,GAAWqB,GACvB,OAAfC,EANS,iBAOLmZ,EAAY,SAAZA,EAAatc,GACjB,EAAKpE,QAAUoE,EACf,EAAK4X,SAAWlJ,MAASC,SACzB,EAAKc,cAAgB,QACrB,EAAKyK,gBAAkB,EAAKtB,WAC5BqD,EAAOM,MACPF,EAAOlkB,YAAYgE,EAAK,GAAImgB,IAE9BL,EAAOO,MAAMrgB,GACbkgB,EAAO1kB,GAAGwE,EAAK,GAAImgB,GAhBR,yCAmBTL,EAAOO,MAAMrgB,GAnBJ,UAoBYkgB,EAAOlZ,GAAP,MAAAkZ,EAAM,YAAgBlgB,IApBlC,QAoBT,EAAKP,QApBI,OAqBT,EAAKgc,SAAWlJ,MAASC,SACzB,EAAKc,cAAgB,UACrB,EAAKyK,gBAAkB,EAAKtB,WAC5BqD,EAAOM,MAxBE,mDA0BT,EAAK3E,SAAWlJ,MAASC,SACzB,EAAK/S,QAAL,KACA,EAAK6T,cAAgB,QACrB,EAAKyK,gBAAkB,EAAKtB,WAC5BqD,EAAOM,MA9BE,iCAiCN,GAjCM,2DAoCfplB,KAAKslB,cAAgB,SAACxd,GAAuB,IACnC4C,EAAc,EAAK7G,UAAnB6G,UAER,GAAI5C,EAAkBpD,OAAS,EAAG,CAChC,IAAMoK,EAAUhH,EAAkBqE,MAChC,SAAC2C,GAAD,OAAaA,EAAQpE,YAAcA,KAErC,IAAKoE,EAEH,OADA5N,QAAQqkB,KAAK,6BACN,EANuB,IAQxBngB,EAAmB0J,EAAQrD,OAA3BrG,eAER,EAAKwf,WAAWla,GAAa9I,SAAO6B,cAAc2B,GAGpD,OAAO,GAGTpF,KAAKmZ,cAAgB,SAACC,GACpB,IAAMvB,EAAY,EAAKU,iBAAiBpM,MACtC,qBAAGtI,YAA8BuV,EAAWvV,aAE1CgU,EAAWtW,OAAOC,OAAOqW,EAAWuB,GACnC,EAAKb,iBAAiBxX,KAAKqY,IAElCpZ,KAAKwlB,iBAAmB,SAAC3hB,GACvB,IAAM0N,EAAQ,EAAKgH,iBAAiB1X,WAAU,SAACgI,GAAD,OAAOA,EAAEhF,YAAcA,KACrE,OAAI0N,GAAS,EAAU,EAAKgH,iBAAiBO,OAAOvH,EAAO,GAAG,GAClD,IAGdvR,KAAKwhB,gBAAkB,SAACiE,EAAgBC,GAEtC,IAAMC,EAA6BF,EpBvFlC3Q,MAAM,mBACN7T,OAAO4U,IACP3P,QAAO,SAACsZ,EAAKzJ,GAEZ,IAAM6P,EAAU7P,EAAIjB,MAAM,aAAa7T,QAAO,SAAC2X,GAAD,OAAOA,KAFjC,EAGLgN,EAAQ9M,OAAO,EAAG,GAA1BnY,EAHa,oBAIpB,OAAO6e,EAAIhF,OACToL,EAAQ7a,KAAI,SAACwG,EAAO3Q,GAClB,OAAOD,EAAOilB,EAAQjD,MAAM,EAAG/hB,EAAI,GAAGsU,KAAK,MAC1C,OAEJ,IoB6EH,EAAKuD,YAAYpY,SAAQ,SAACwI,GACpB8c,EAAQza,SpBtGmB,SAACqH,GAAD,OAAUA,EAAI/M,MAAM,qBAAuB,CAAC+M,IAAM,GoBsG5DsT,CAAsBhd,EAAEhF,cAC3CgF,EAAEhF,UAAYgF,EAAEhF,UAAU8K,QAAQ8W,EAAgBC,GAClD7c,EAAEsP,SAAU,EACZtP,EAAEoP,mBAAgBjG,EAClB,EAAKmH,cAActQ,QAIzB7I,KAAK0hB,mBAAqB,SAAC7d,GACzB,EAAK0U,iBAAmB,EAAKA,iBAAiBtX,QAC5C,SAAC4H,GAAD,OAAQA,EAAEhF,UAAUqH,SAASrH,OAKnC,SAASkhB,GAAWvP,GAAO,IAAD,OACxBxV,KAAKqlB,MAAQ,SAACrgB,GAAU,IAAD,EACyBwQ,EAAK3R,UAA3C6G,EADa,EACbA,UAAWqB,EADE,EACFA,WAAYC,EADV,EACUA,WAE/B9K,QAAQ4kB,IAAR,WACMvO,IAAO,EAAK0N,YAAYvH,OAC1B,SAFJ,yBAGoBhT,EAHpB,YAGiCqB,EAHjC,YAG+CC,EAH/C,OAKA9K,QAAQ4kB,IAAIvlB,MAAM,GAAI,CAAC,SAASia,OAAOxV,KAEzChF,KAAKolB,IAAM,WAAO,IAAD,EAC+B5P,EAAK3R,UAA3C6G,EADO,EACPA,UAAWqB,EADJ,EACIA,WAAYC,EADhB,EACgBA,WACvBvH,EAA2B+Q,EAA3B/Q,QAAS6T,EAAkB9C,EAAlB8C,cACjBpX,QAAQ4kB,IAAR,WACMvO,IAAO,EAAKkJ,UAAU/C,OACxB,SAFJ,eAGUpF,EAHV,aAG4B5N,EAH5B,YAGyCqB,EAHzC,YAGuDC,EAHvD,gBAIKsM,EAJL,KAKE7T,IC3JS,SAASmd,GAAT,GAMX,IAAD,OALD0C,EAKC,EALDA,YACApa,EAIC,EAJDA,SACA6b,EAGC,EAHDA,QACAtC,EAEC,EAFDA,SACA3b,EACC,EADDA,kBA6HA,OA3HA9H,KAAKsiB,QAAL,uCAAe,WAAOlP,GAAP,eAAA7G,EAAA,6DACPiJ,EAAO8O,EAAYlR,GADZ,SAGPoC,EAAK8M,UAHE,OAIbpY,EAAS,YAAIoa,IAJA,2CAAf,kCAAAtkB,KAAA,eAOAA,KAAKgmB,WAAL,sBAAkB,sBAAAzZ,EAAA,0FAElBvM,KAAK4iB,gBAAkB,SAACrR,EAAO1N,GAC7BygB,EAAY/S,GAAO1N,UAAYA,EAC/BygB,EAAY/S,GAAO+T,cAAcxd,GACjCoC,EAAS,YAAIoa,KAEftkB,KAAKukB,QAAU,SAAC1gB,EAAWmB,EAAM+E,GAC/Bua,EAAYvjB,KAAK,IAAI8jB,GAAK,CAAEhhB,YAAWmB,OAAM+E,QAAO2D,UAAU,KAC9DxD,EAAS,YAAIoa,IACTzgB,GAAW,EAAK+e,gBAAgB0B,EAAY5f,OAAS,EAAGb,IAE9D7D,KAAKsjB,WAAa,SAAC/R,GACjB+S,EAAYxL,OAAOvH,EAAO,GAC1BrH,EAAS,YAAIoa,KAEftkB,KAAK6d,OAAS,SAACtM,GACb,IAAM5Q,EAAO,OAAS2jB,EAAY,GAAGtf,KAAKN,OAAS,GACnD4f,EAAY/S,GAAOvM,KAAKjE,KAAK,IAAI0c,GAAS9c,EAAM8iB,IAChDvZ,EAAS,YAAIoa,KAEftkB,KAAK2b,UAAY,SAACpK,EAAO8B,GACvBiR,EAAY/S,GAAOvM,KAAK8T,OAAOzF,EAAW,GAC1CnJ,EAAS,YAAIoa,KAEftkB,KAAK0b,QAAU,SAACnK,EAAO8B,EAAW6H,GAChCA,EAAIb,UAAYtC,GAAQmD,EAAIpK,OAC5BwT,EAAY/S,GAAOvM,KAAKqO,GAAa6H,EACrChR,EAAS,YAAIoa,KAEftkB,KAAK6iB,aAAe,SAACtR,GACnB+S,EAAY/S,GAAOyT,eACnB9a,EAAS,YAAIoa,KAGftkB,KAAKyb,eAAiB,SACpBrI,EACAC,EACAF,EACAuJ,EACA8G,GAGYc,EAAYlR,GAAWpO,KAAKqO,GACpCoI,eAAetI,EAAkBuJ,EAAY8G,GACjDtZ,EAAS,YAAIoa,KAEftkB,KAAKuT,eAAiB,SACpBH,EACAC,EACAC,EACAH,EACAuJ,EACA8G,GAEYc,EAAYlR,GAAWpO,KAAKqO,GAEpC2I,aAAa1I,GAAgB,IAAIiQ,GACnCpQ,EAAiBgD,OACjBuG,EACA8G,GAEFtZ,EAAS,YAAIoa,KAGftkB,KAAK4c,kBAAoB,SAACxJ,EAAWC,EAAWvC,EAAO4L,GACzC4H,EAAYlR,GAAWpO,KAAKqO,GACpCuJ,kBAAkB9L,EAAO4L,GAAYmH,wBACzC3Z,EAAS,YAAIoa,KAEftkB,KAAKwb,kBAAoB,SAACpI,EAAWC,GACvBiR,EAAYlR,GAAWpO,KAAKqO,GACpCwQ,wBACJ3Z,EAAS,YAAIoa,KAEftkB,KAAKqjB,YAAc,SAACjQ,EAAWrJ,GAC7Bua,EAAYlR,GAAWrJ,MAAQA,EAC/BG,EAAS,YAAIoa,KAEftkB,KAAKimB,kBAAoB,SAAC7S,EAAWqF,GACnC6L,EAAYlR,GAAWqF,YAAcA,EACrCvO,EAAS,YAAIoa,KAEftkB,KAAK0f,YAAc,WACjBxV,EAAS,YAAIoa,KAEftkB,KAAK8iB,uBAAyB,SAAC1P,GACb,IAAZ2S,IACFzB,EAAYlR,GAAW2P,gBAAkBuB,EAAYlR,GAAW2P,eAC5DuB,EAAYlR,GAAW2P,eAAgBuB,EAAYlR,GAAWqO,WAC7D6C,EAAYlR,GAAWqF,YAAc,GAC1CvO,EAAS,YAAIoa,MAGjBtkB,KAAKwT,qBAAuB,SAACJ,GAE3B,IAAMjD,EAAc,GACd+V,EAAa,CAAC,aAAc,WAAY,aAgB9C,OAdoBzC,EAASd,MAAM,EAAGoD,EAAU,GAEpC1lB,SAAQ,SAAC8lB,EAAcC,GAGjC,IADA,IAAM/G,EAAQ+G,IAAWL,EAAU3S,EAAY+S,EAAazhB,OACnD9D,EAAI,EAAGA,EAAIye,EAAOze,IACzBuP,EAAYpP,KAAZ,UACKmlB,EAAWE,GADhB,YAC2B,UAAYxlB,EAAI,GAAK,KADhD,OAEIulB,EAAavlB,GAAG0X,eAAiB,eAMlCnI,GAGFnQ,K,cClIM,SAASqmB,GAAT,GAA+B,EAAX5c,QACjC,OAAO,qBAAKjB,UAAU,YAAY6B,ICJrB,ijCDIgCC,IAAI,SEJpC,WAA0B,kCCA1B,OAA0B,kCCA1B,4lCCAA,OAA0B,oCCEnCgc,I,OAAS,CAAC,IAAK,IAAK,IAAK,IAAK,MAE9BC,GAAK,SAACC,GAAD,OACTA,EAAO,KAAO,YAAc,IAFbjU,GAE2BiU,EAAO,IAAI,GAF9BF,GAAOpb,UAAUqH,EAAM,IAAItQ,eAES,KAAO,KAFpD,IAACsQ,GAGX/J,GAAY,gBAEH,SAASie,GAAT,GAMX,IALF9lB,EAKC,EALDA,KACAkD,EAIC,EAJDA,UACAgW,EAGC,EAHDA,SAGC,IAFD1Y,aAEC,SADD2Y,EACC,EADDA,SAEM4M,EAAUvlB,EAAQ,WAAa,YACrC,OACE,qBAAKqH,UAAS,UAAKA,IAAnB,SACGme,GAAchmB,GAAMkD,EAAWgW,EAAU6M,EAASvlB,GAAS2Y,KAKlE,IAAMkH,GAAY,SAACnd,EAAWgW,EAAU+M,EAAS9M,EAAU+M,GACzD,OACE,sBAAKre,UAAS,UAAKA,GAAL,aAAd,UACGoe,EADH,IACY,sBAAMpe,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,SACiF,IAC9E0iB,GAAG1M,GAFN,IAEiB,uBAAMrR,UAAS,UAAKA,GAAL,cAAf,UAA4CqR,EAA5C,OACdC,GACC,kDACiByM,GAAGzM,GADpB,IACgCA,EADhC,OAID+M,GAAaA,MAgHPF,GAAgB,CAC3B3F,aACA8F,aA9GmB,SAACjjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACnB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,wBAEY,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IACrDC,GAAY,mDAAsBA,SA2GrCiN,UAxGgB,SAACljB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OAChB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,gCAEoB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IAC7DC,GAAY,mDAAsBA,SAqGrCkN,UAlGgB,SAACnjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OAChB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,gCAEoB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IAC7DC,GAAY,mDAAsBA,SA+FrC5O,SA5Fe,SAACrH,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACf,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,oCAEuB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IAChEC,GAAY,mDAAsBA,SAyFrCmN,OAtFa,SAACpjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACb,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,yCAE4B,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IACrEC,GAAY,mDAAsBA,SAmFrCoN,QAhFc,SAACrjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACd,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,uCAEwB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IACjEC,GAAY,mDAAsBA,SA6ErCqN,UA1EgB,SAACtjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OAChB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,YACoF,IAClF,uBAAM2E,UAAS,UAAKA,GAAL,cAAf,cAA6CqR,EAA7C,OACCC,GAAY,mDAAsBA,SAuErCsN,UApEgB,SAACvjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OAChB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,YACoF,IAClF,uBAAM2E,UAAS,UAAKA,GAAL,cAAf,UAA4CyQ,SAASY,GAArD,OACCC,GAAY,mDAAsBA,SAiErChD,IA9DU,SAACjT,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACV,qBAAKtR,UAAS,UAAKA,GAAL,uBAAd,SACGwY,GACCnd,EACA,SACA6iB,OACA1U,EACA,8CACY,sBAAMxJ,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IACrDC,GAAY,mDAAsBA,YAsDzCjD,IAjDU,SAAChT,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACV,qBAAKtR,UAAS,UAAKA,GAAL,uBAAd,SACGwY,GACCnd,EACA,SACA6iB,OACA1U,EACA,iDACe,sBAAMxJ,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,IACxDC,GAAY,mDAAsBA,YAyCzCuN,WApCiB,SAACxjB,EAAWgW,EAAU6M,EAAS5M,GAA/B,OACjB,sBAAKtR,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,SACiF,IAC9EgW,EAASyN,WAFZ,IAEyBxN,GAAY,mDAAsBA,SAkC3DyN,WA/BiB,SAAC1jB,EAAWgW,EAAU6M,GAAtB,OACjB,sBAAKle,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,SAEG0T,IAAOsC,GAAU6D,OAAO,aA6B3B8J,QA1Bc,SAAC3jB,EAAWgW,EAAU6M,GAAtB,OACd,sBAAKle,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,iCAEuB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,QAwBnE4N,QArBc,SAAC5jB,EAAWgW,EAAU6M,GAAtB,OACd,sBAAKle,UAAS,UAAKA,GAAL,aAAd,UACGke,EADH,IACY,sBAAMle,UAAS,UAAKA,GAAL,eAAf,SAA6C3E,IADzD,mCAEyB,sBAAM2E,UAAS,UAAKA,GAAL,cAAf,SAA4CqR,SClIjEsF,GAAa,eACJ,SAASuI,GAAT,GAAgE,IAAD,IAAxCC,mBAAwC,MAA1B,GAA0B,EAAtB5B,EAAsB,EAAtBA,QAAS6B,EAAa,EAAbA,UAAa,EACpD3d,oBAAS,GAD2C,mBACrED,EADqE,KAC/DqR,EAD+D,KAMtEkE,EAAkBoI,EAAYzhB,QAAO,SAACsZ,EAAKhK,GAiB/C,OAhBAA,EAAKqK,iBAAmBrK,EAAK+C,iBAAiBrS,QAC5C,SAACsZ,EAAD,GAA2D,IAAnD/W,EAAkD,EAAlDA,KAAMwP,EAA4C,EAA5CA,cAAepU,EAA6B,EAA7BA,UAAWmU,EAAkB,EAAlBA,YAQtC,OAPAwH,EAAIze,KAAK,CACPJ,KAAM,YACNkZ,SAAU5B,EACV6B,SAAUrR,EACV5E,cAGK2b,EAAIhF,OACTxC,EAAYjN,KAAI,kBAAsB,CAAEpK,KAAxB,EAAGA,KAA2BkZ,SAA9B,EAASlU,MAAsC9B,mBAGnE,IAGM2b,EAAOhK,EAAKqK,iBAAiBnb,SACpC,GAEG0c,EAAauG,EAAYzhB,QAAO,SAACsZ,EAAD,UAAsBA,EAAtB,EAAQjb,OAA4BG,SAAS,GAKnF,OAHAoI,qBAAU,WACRuO,GAAQ,KACP,CAACuM,IAEF,0BAASpf,UAAS,UAAK2W,IAAvB,UACE,sBAAK3W,UAAS,UAAK2W,GAAL,YAAd,UACE,cAAC,EAAD,CAAYzV,MAAM,UAAUF,OAAQQ,EAAMP,QAhCxB,WACtB4R,GAAQ,SAACqF,GAAD,OAAYA,QAiChB,cAAC,EAAD,CACE1Q,QACE,sBAAKxH,UAAS,UAAK2W,GAAL,sBAA6B4G,GAA3C,UACE,iCAAOA,EAAU,QAAjB,OACA,iCACE,cAAC3G,GAAD,CAAOC,MAAOsI,EAAYjjB,OAAQ4a,KAAK,YACvC,cAACF,GAAD,CACEC,MAAOE,EACPD,KAAK,cACL7W,OAAQ8W,GAAmB,eAG/B,+BACE,cAACH,GAAD,CAAOC,MAAO+B,EAAY9B,KAAK,SAAS7W,OAAQ2Y,GAAc,oBAMvEpX,GACC,8BACG2d,EAAY5c,KAAI,SAACyK,EAAM5U,GAAP,OACf,cAAC,GAAD,eAAkB4U,GAAP5U,WAOvB,SAASikB,GAAT,GAUI,IACgCf,EAVlC/Z,EASC,EATDA,MASC,IARDxF,cAQC,MARQ,GAQR,EAPDV,EAOC,EAPDA,UACAmB,EAMC,EANDA,KACAP,EAKC,EALDA,QACAgc,EAIC,EAJDA,SACAwE,EAGC,EAHDA,WACA3M,EAEC,EAFDA,cACAuH,EACC,EADDA,iBACC,EAMuB5V,oBAAS,GANhC,mBAMMD,EANN,KAMYqR,EANZ,KAWD,OACE,gCACE,sBAAK7S,UAAS,UAAK2W,GAAL,aAAd,UACE,uBAAM3W,UAAS,UAAK2W,GAAL,iBAAf,UACE,cAAC,EAAD,CAAYzV,MAAM,QAAQD,QARV,WACtB4R,GAAQ,SAACqF,GAAD,OAAYA,MAOsClX,OAAQQ,IAD9D,IACwED,OAErEkb,IAAexE,GAChB,qBAAKpW,IAAKwd,GAASvd,IAAI,QAAQT,MAAO,CAAEkU,MAAO,YAI9C0C,GACD,mCACGlc,EAAOG,OACN,qBAAK2F,IAAKyd,GAAOxd,IAAI,QAAQT,MAAO,CAAEkU,MAAO,UAE7C,qBAAK1T,IAAK0d,GAAOzd,IAAI,QAAQT,MAAO,CAAEkU,MAAO,eAKpD/T,GACC,qCACE,cAACge,GAAD,CAAYnkB,UAAWA,EAAWmB,KAAMA,MACrCyb,GACD,qCACE,cAACwH,GAAD,CAAcxjB,QAASA,EAAS6T,cAAeA,MAC5C/T,EAAOG,QACR,cAACwjB,GAAD,CAAiBne,MAAO,sBAAuBiO,YAAazT,OAKlE,cAAC2jB,GAAD,CACEne,MAAK,UAAM0W,EAAqB,UAAV,QAAjB,gBACLzI,aA7CwB8L,EA6CcjE,EA5C9CiE,EAAG7iB,QACD,SAACyZ,GAAD,OAAQnW,EAAO4H,MAAK,SAACtD,GAAD,OAAOA,EAAEhF,YAAc6W,EAAE7W,WAAagF,EAAElI,OAAS+Z,EAAE/Z,YA4CjEwgB,SAAS,UAQrB,SAAS6G,GAAT,GAA0C,IAApBnkB,EAAmB,EAAnBA,UAAWmB,EAAQ,EAARA,KACvB0F,EAAsC7G,EAAtC6G,UAAWqB,EAA2BlI,EAA3BkI,WAAYC,EAAenI,EAAfmI,WAC/B,OACE,sBAAKxD,UAAS,UAAK2W,GAAL,YAAd,UACE,qBAAK3W,UAAS,UAAK2W,GAAL,WAA0B9U,IAAK8d,GAAO7d,IAAI,UACxD,sBACE9B,UAAS,UAAK2W,GAAL,eADX,mBAEKzU,EAFL,YAEkBqB,EAFlB,YAEgCC,KAChC,sBAAMxD,UAAS,UAAK2W,GAAL,iBAAf,eACCna,EAAK+F,KAAI,WAAqCnK,GAArC,IAAGyZ,EAAH,EAAGA,UAAW1U,EAAd,EAAcA,MAAOqW,EAArB,EAAqBA,aAArB,OACR,eAAC,IAAMlR,SAAP,WACE,uBAAMtC,UAAS,UAAK2W,GAAL,eAAf,YACKnD,EAAatX,QAAU,MAC1B,cAAC+Y,GAAD,CAAU9X,MAAOA,IAAS0U,UAAWA,OAEtCzZ,EAAIoE,EAAKN,OAAS,GAAK,sBAAM8D,UAAS,UAAK2W,GAAL,WAAf,iBALLve,MAQvB,sBAAM4H,UAAS,UAAK2W,GAAL,iBAAf,kBAKN,SAAS8I,GAAT,GAAsE,IAAD,IAA7CxjB,eAA6C,MAAnC2jB,GAAmC,MAA7B9P,qBAA6B,MAAb,UAAa,EACnE,OACE,sBAAK9P,UAAS,UAAK2W,GAAL,YAAd,UACE,qBAAK3W,UAAS,UAAK2W,GAAL,WAA0B9U,IAAK8d,GAAO7d,IAAI,UACxD,uBAAM9B,UAAS,UAAK2W,GAAL,aAAf,UAA4C7G,EAA5C,OACA,cAACmF,GAAD,CAAU9X,MAAOlB,OAKvB,SAASyjB,GAAT,GAAuE,IAAD,IAA3ClQ,mBAA2C,MAA7B,GAA6B,MAAzBmJ,eAAyB,SAATpX,EAAS,EAATA,MAErDL,EAAQyX,EAAU,UAAY,UAFgC,EAG5ClX,mBAASkX,GAHmC,mBAG7DnX,EAH6D,KAGvDqR,EAHuD,KAQpE,OACE,gCACE,sBAAK7S,UAAS,UAAK2W,GAAL,oBAA2BA,GAA3B,iBAAd,UACE,qBAAK3W,UAAS,UAAK2W,GAAL,WAA0B9U,IAAK8d,GAAO7d,IAAI,UACxD,uBAAMT,MAAO,CAAEH,SAASlB,UAAS,UAAK2W,GAAL,aAAjC,UACGnH,EAAYtT,OADf,IACwBqF,EADxB,OAGA,cAAC,EAAD,CAAYN,QAXM,WACtB4R,GAAQ,SAACqF,GAAD,OAAYA,MAUsBlX,OAAQQ,EAAMN,MAAO,UAAWE,KAAM,QAE7EI,GACC,mCACGgO,EAAYjN,KAAI,SAAC5J,EAAOP,GACvB,OAAO,cAAC6lB,GAAD,2BAA+BtlB,GAA/B,IAAsCA,MAAOggB,IAArBvgB,WAQ3C,IAAMwnB,GAAO,CACXnkB,KAAM,YACNE,MAAO,qBACPD,KAAM,KACNN,WAAY,0CACZC,UAAW,kCACXqD,mBAAmB,GChNfmhB,GAAW,CAAC,SAAU,OAAQ,SAAU,SAE/B,SAASC,GAAT,GAA8D,IAAhC7E,EAA+B,EAA/BA,SAAU3b,EAAqB,EAArBA,kBAerD,SAASygB,EAAT,EAA8DxC,EAASxU,GAAQ,IAAvDxH,EAAsD,EAAtDA,MAAO0O,EAA+C,EAA/CA,YAAasK,EAAkC,EAAlCA,eAC1C,OAAKhZ,EAKDgZ,IAAmBtK,EAAYxX,QAAO,SAAC4H,GAAD,OAAOA,EAAEqP,QAAMxT,OAChD,CACLyC,QAAQ,GAAD,OAAKkhB,GAAStC,GAAd,oBAAkCxU,EAAQ,EAA1C,yBACPpQ,OAAO,GAGJ,CAAEA,OAAO,GAVP,CACLgG,QAAQ,GAAD,OAAKkhB,GAAStC,GAAd,oBAAkCxU,EAAQ,EAA1C,4BACPpQ,OAAO,GAlBbnB,KAAKwoB,YAAL,sBAAmB,kDAAAjc,EAAA,8FAAuCkX,EAAvC,mBAAQgF,EAAR,KAAgBC,EAAhB,KAAsBxE,EAAtB,KAA8ByE,EAA9B,KACjBzE,EAAO7jB,SAAQ,SAACmV,GAAD,OAAUA,EAAK8M,aADb,SAGX,IAAI5e,SAAQ,SAACC,IACjB,SAASilB,EAAiBvd,GAAe,IAARzK,EAAO,uDAAH,EAC/BA,IAAMyK,EAAM3G,OAAQf,IACnB0H,EAAMzK,GAAG0hB,UAAU1b,MAAK,kBAAMgiB,EAAiBvd,EAAOzK,EAAI,MAEjEgoB,CAAiB,GAAD,mBAAKH,GAAL,YAAgBC,GAAhB,YAAyBC,QAR1B,gCAWV,CAACF,EAAQC,EAAMxE,EAAQyE,IAXb,2CA4BnB3oB,KAAK6oB,UAAL,sBAAiB,4EAAAtc,EAAA,sDAAOuc,EAAP,+BAAerF,EAAf,EACoCqF,EAAM,GAAG,GAApD/e,EADO,EACPA,MAAOub,EADA,EACAA,cAAezhB,EADf,EACeA,UAAW0N,EAD1B,EAC0BA,MAEhC3Q,EAAI,EAHE,YAGCA,EAAIkoB,EAAMpkB,QAHX,iBAIJub,EAAI,EAJA,YAIGA,EAAI6I,EAAMpkB,QAJb,sBAKLxC,EAAM4mB,EAAMloB,GAAGqf,GAAKsI,EAAaO,EAAMloB,GAAGqf,GAAIrf,EAAGqf,GAAK,IACpD9e,MANG,yCAMWe,GANX,OAIqB+d,IAJrB,uBAGmBrf,IAHnB,4BAUQ0kB,EAAcxd,GAA7B8c,EAVO,EAUPA,aAEAxY,EAAWwY,EAAW/gB,EAAU6G,WAAhC0B,QAZO,0BAeyB0c,EAAM/d,KAAI,SAAC4c,GAAD,OAC9CA,EAAY5c,KAAI,SAACyK,GAAU,IACjBxQ,EAAwCwQ,EAAxCxQ,KAAMyT,EAAkCjD,EAAlCiD,YAAa5U,EAAqB2R,EAArB3R,UAAWkG,EAAUyL,EAAVzL,MAGtC,OADAxI,OAAOC,OAAOgU,EAAM,IAAIqP,GAAKrP,IACtB,CACLxQ,OACAnB,YACAkG,QACAwO,iBAAkBE,EACfxX,QAAO,SAAC4H,GAAD,OAAOA,EAAEqP,QAChBnN,KAAI,kBAA+D,CAClElH,UADG,EAAGA,UAENoU,cAFG,EAAcA,cAGjBD,YAHG,EAA6BA,YAIhCE,KAJG,EAA0CA,KAK7CC,QALG,EAAgDA,mBA1BhD,mBAeNsQ,EAfM,KAeEC,EAfF,KAeQxE,EAfR,KAegByE,EAfhB,eAqCWvc,EAAO2c,SAC7B,CAAEN,SAAQC,OAAMxE,SAAQyE,QAAO5e,QAAOlG,aACtC0N,GAvCW,eAqCP6B,EArCO,yBAyCN,CAAEjM,QAAS,cAAehG,OAAO,EAAOiS,cAzClC,iCA0CD,CAAEjM,QAAS,+BAAgChG,OAAO,IA1CjD,4CC9BZ,SAAS6nB,GAAqBC,EAAYnhB,GAC/C,OAAOmhB,EAAWle,KAAI,SAACme,GAErB,IAAMC,EAAW,GACTpf,EAAqBmf,EAArBnf,MAAOlG,EAAcqlB,EAAdrlB,UAET4kB,EAASS,EAAGT,OAAO1d,KAAI,SAACyK,GAAD,OAC3B4T,GAAU5T,EAAM2T,EAAUrhB,GAAmB,MAEzC4gB,EAAOQ,EAAGR,KAAK3d,KAAI,SAACyK,GAAD,OACvB4T,GAAU5T,EAAM2T,EAAUrhB,GAAmB,MAEzCoc,EAASgF,EAAGhF,OAAOnZ,KAAI,SAACyK,GAAD,OAC3B4T,GAAU5T,EAAM2T,EAAUrhB,GAAmB,MAEzC6gB,EAAQO,EAAGP,MAAM5d,KAAI,SAACyK,GAAD,OACzB4T,GAAU5T,EAAM2T,EAAUrhB,GAAmB,MAM/C,OAJAqhB,EAASpoB,KAAK0nB,GACdU,EAASpoB,KAAK2nB,GACdS,EAASpoB,KAAKmjB,GACdiF,EAASpoB,KAAK4nB,GACP,CAAEF,SAAQC,OAAMxE,SAAQyE,QAAO5e,QAAOlG,gBAI1C,IAAMulB,GAAY,SAAC5T,EAAMiO,EAAU3b,EAAmB4F,GAC3D,OAAO,IAAImX,GAAJ,2BACFrP,GADE,IAELxQ,KAAMwQ,EAAKxQ,KAAK+F,KACd,SAACmQ,GAAD,OACE,IAAIuC,GAASvC,EAAIva,KAAM8iB,EAAUvI,EAAIE,WAAYF,EAAIpK,MAAOoK,EAAIc,iBAEpEtO,cACC4X,cAAcxd,I,OCxBnBL,OAAO7F,OAASA,SAChB,IAAMynB,GAAY,qBAwGlB,SAASC,GAAT,GAeI,IAdFvf,EAcC,EAdDA,MACAwH,EAaC,EAbDA,MACAkX,EAYC,EAZDA,OACAC,EAWC,EAXDA,KACAxE,EAUC,EAVDA,OACAyE,EASC,EATDA,MACA9kB,EAQC,EARDA,UACAye,EAOC,EAPDA,QACAiH,EAMC,EANDA,QACAC,EAKC,EALDA,SACAC,EAIC,EAJDA,YACA3hB,EAGC,EAHDA,kBACAsE,EAEC,EAFDA,OACAsd,EACC,EADDA,WACC,EACuBzf,oBAAS,GADhC,mBACMD,EADN,KACYqR,EADZ,OAEqCpR,oBAAS,GAF9C,mBAEM0f,EAFN,KAEqBC,EAFrB,KAWKC,EAAa,kBAAMD,GAAa,IAEhCtG,EAAU,uCAAG,sBAAA/W,EAAA,0DACbH,EADa,gCAETA,EAAOkX,WAAWzf,EAAW0N,GAFpB,OAGfsY,IACAH,IAJe,2CAAH,qDAoBhB,OATA5c,qBAAU,WACRuO,GAAQ,KACP,CAACkO,IACJzc,qBAAU,WACRuO,GAAQ,KACP,CAACmO,IACJ1c,qBAAU,WACRuO,GAAQ,KACP,CAACxX,EAAU6G,UAAW7G,EAAUkI,WAAYlI,EAAUmI,aAEvD,sBAAKxD,UAAS,UAAK6gB,GAAL,oBAAd,UACE,sBAAK7gB,UAAS,UAAK6gB,GAAL,cAAd,UACE,cAAC,EAAD,CAAY3f,MAAM,UAAUD,QAjCV,WACtB4R,GAAQ,SAACqF,GAAD,OAAYA,MAgCsClX,OAAQQ,IAC9D,uBAAMxB,UAAS,UAAK6gB,GAAL,gBAAf,kBAAmD9X,EAAQ,EAA3D,OACCoY,EACC,uBAAMnhB,UAAS,UAAK6gB,GAAL,2BAAiCA,GAAjC,gBAAf,yBACe,KACb,sBACE5f,QAAS6Z,EACT9a,UAAS,UAAK6gB,GAAL,wBAA8BA,GAA9B,yBAFX,iBAMA,sBACE5f,QAASogB,EACTrhB,UAAS,UAAK6gB,GAAL,wBAA8BA,GAA9B,wBAFX,mBAQF,sBAAM7gB,UAAS,UAAK6gB,GAAL,gBAAf,SAA8Ctf,IAGhD,uBAAMvB,UAAS,UAAK6gB,GAAL,aAAf,UACE,cAACvL,GAAD,CAAarU,QAvCE,WACrB4R,GAAQ,GACRiH,OAsCM,cAACrE,GAAD,CAAUxU,QAtDD,WACfif,EAAK,GAAGnX,MAAQA,EAChB,IAAMuX,EDrGmB,SAACrF,EAAU3b,EAAmB4F,GAEzD,IAAMyb,EAAW,CAAC,GAAI,GAAI,GAAI,IAC9B,OAAO1F,EAAS1Y,KAAI,SAACgb,EAASnlB,GAC5B,OAAOmlB,EAAQhb,KAAI,SAACyK,GAClB,IAAMsU,EAAUV,GAAU5T,EAAM2T,EAAUrhB,EAAmB4F,GAE7D,OADAyb,EAASvoB,GAAGG,KAAK+oB,GACVA,QC8FKC,CAAc,CAACtB,EAAQC,EAAMxE,EAAQyE,GAAQ7gB,GAC3D2hB,EAAYX,MAoDN,cAAC5K,GAAD,CAASzU,QAjDE,kBAAMmgB,GAAa,YAoDjC5f,GACC,uCACKye,EAAO/jB,QAAU,cAACgjB,GAAD,CAAaC,YAAac,EAAQ1C,QAAQ,aAC3D2C,EAAKhkB,QAAU,cAACgjB,GAAD,CAAaC,YAAae,EAAM3C,QAAQ,WACvD7B,EAAOxf,QAAU,cAACgjB,GAAD,CAAaC,YAAazD,EAAQ6B,QAAQ,aAC3D4C,EAAMjkB,QAAU,cAACgjB,GAAD,CAAaC,YAAagB,EAAO5C,QAAQ,gBAMvDiE,OAhMI,SAAC,GAMb,IAAD,IALJf,kBAKI,MALS,GAKT,EAJJnhB,EAII,EAJJA,kBACA2hB,EAGI,EAHJA,YACArd,EAEI,EAFJA,OACAsd,EACI,EADJA,WACI,EACoBzf,oBAAS,GAD7B,mBACGD,EADH,KACSqR,EADT,OAG0BpR,oBAAS,GAHnC,mBAGGsf,EAHH,KAGYU,EAHZ,OAI4BhgB,oBAAS,GAJrC,mBAIGuf,EAJH,KAIaU,EAJb,OAK8BjgB,mBAChC+e,GAAqBC,EAAYnhB,IAN/B,mBAKGqiB,EALH,KAKkBC,EALlB,KAQJ3iB,OAAO0iB,cAAgBA,EACvB1iB,OAAOwhB,WAAaA,EAEpB,IASMoB,EAAW,uCAAG,sBAAA9d,EAAA,6DAClB8O,GAAQ,GACR4O,GAAW,SAACvJ,GAAD,OAAYA,KAFL,SAIZ,IAAIhd,SAAQ,SAACC,IACjB,SAASilB,EAAiBvd,GAAe,IAARzK,EAAO,uDAAH,EAC/BA,IAAMyK,EAAM3G,OAAQf,IACnB2e,EAAQ1hB,EAAGyK,EAAMzK,IAAIgG,MAAK,kBAAMgiB,EAAiBvd,EAAOzK,EAAI,MAEnEgoB,CAAiBuB,MATD,2CAAH,qDAaX7H,EAAO,uCAAG,WAAO/Q,EAAP,8CAAAhF,EAAA,6DAAgBkc,EAAhB,EAAgBA,OAAQC,EAAxB,EAAwBA,KAAMxE,EAA9B,EAA8BA,OAAQyE,EAAtC,EAAsCA,MAAtC,EACU,IAAIL,GAAmB,CAC7C7E,SAAU,CAACgF,EAAQC,EAAMxE,EAAQyE,GACjC7gB,sBAFM0gB,EADM,EACNA,YADM,SAMaA,IANb,mCAMP8B,EANO,KAMJC,EANI,KAMDC,EANC,KAMEC,EANF,OAOe/B,EAAK,GAA1B3e,EAPM,EAONA,MAAOlG,EAPD,EAOCA,UA7BO4f,EA8BH,CAAEgF,OAAQ6B,EAAG5B,KAAM6B,EAAGrG,OAAQsG,EAAG7B,MAAO8B,EAAG1gB,QAAOlG,aA7BrEsmB,EA6BY5Y,GA7BZ,eAAwBkS,GACxB2G,EAAS,YAAID,IAoBC,kCAtBI,IAAI1G,IAsBR,OAAH,wDAab,OAHA3W,qBAAU,WACRsd,EAASpB,GAAqBC,EAAYnhB,MACzC,CAACmhB,IAEF,yBAASzgB,UAAS,UAAK6gB,IAAvB,SACE,cAAC,EAAD,CACEvZ,gBA/CkB,kBAAMuL,GAAQ,SAACqF,GAAD,OAAYA,MAgD5C1W,KAAMA,EACND,MACE,qCACE,cAAC,EAAD,CACEiG,QACE,iCACG,QAAS,IACTma,EAAczlB,OAAS,GAAK,cAAC0a,GAAD,CAAOC,MAAO8K,EAAczlB,cAI/D,sBAAK8D,UAAS,UAAK6gB,GAAL,qBAA2BA,GAA3B,iBAAd,UACE,cAACpc,EAAD,CAAaxD,QA/CN,WACjB2gB,EAASpB,GAAqBC,EAAYnhB,IAC1CoiB,GAAY,SAACxJ,GAAD,OAAYA,QA8Cd,cAAC5C,GAAD,CAAarU,QAAS4gB,UAf9B,SAoBGF,EAAczlB,OACb,qBAAK8D,UAAU,qCAAf,SACG2hB,EAAcpf,KAAI,SAAC0Y,EAAU7iB,GAAX,OACjB,cAAC0oB,GAAD,2BAEM7F,GAFN,IAGElS,MAAO3Q,EACP4I,OAAQQ,EACRuf,QAASA,EACTC,SAAUA,EACVlH,QAASA,EAAQpB,KAAK,GAAItgB,EAAG6iB,GAC7BgG,YAAaA,EACb3hB,kBAAmBA,EACnBsE,OAAQA,EACRsd,WAAYA,IAVP9oB,QAeX,qBAAK4H,UAAU,gCAAf,SACE,yD,OC5GL,SAASkiB,GAAT,GAAyC,IAAlB/pB,EAAiB,EAAjBA,KAAM8I,EAAW,EAAXA,QAClC,OACE,uBAAMjB,UAAU,iCAAhB,UACE,sBAAMA,UAAU,0BAAhB,SAA2C7H,IAC3C,sBAAM8I,QAASA,EAASjB,UAAU,qCAAlC,qBCWN,IAwJeib,GAxJE,YAA4C,IAAzC/Y,EAAwC,EAAxCA,UAAWqB,EAA6B,EAA7BA,WAAYC,EAAiB,EAAjBA,WACnCnI,EAAY,CAAE6G,YAAWqB,aAAYC,cACnClE,EAAsBmE,qBAAWvE,GAAjCI,kBACFoE,EAAcpE,EAAkBqE,MACpC,SAAC2C,GAAD,OAAaA,EAAQpE,YAAcA,KAE7B0B,GAAWF,EACftK,SAAO6B,cAAcyI,EAAYT,OAAOrG,gBACxC,IAFIgH,OANkD,EAS1BnC,mBAAS,IATiB,mBASnDwe,EATmD,KAS3CkC,EAT2C,OAU5B1gB,mBAAS,IAVmB,mBAUnD0e,EAVmD,KAU5CiC,EAV4C,OAW9B3gB,mBAAS,CAAC,IAAI4a,GAAK,CAAEhhB,YAAWkf,gBAAgB,MAXlB,mBAWnD2F,EAXmD,KAW7CmC,EAX6C,KAYpDC,EAAiB,CAAEpgB,YAAWqB,aAAYC,WAAY,MAZF,EAa3B/B,mBAAS,IAbkB,mBAanDia,EAbmD,KAa3C6G,EAb2C,KAcpDtH,EAAW,CAACgF,EAAQC,EAAMxE,EAAQyE,GAdkB,EAetB1e,mBAAS,IAfa,mBAenDgf,EAfmD,KAevC+B,EAfuC,OAgBvB/gB,mBAAS,CAAE9C,QAAS,GAAIhG,OAAO,IAhBR,mBAgBnD8pB,EAhBmD,KAgBrCC,EAhBqC,KAiB1DzjB,OAAOqhB,MAAQrF,EACf,IAAM0H,EAAW,SAAC7G,EAAapa,EAAU6b,EAAStC,GAAjC,OACf,IAAI7B,GAAe,CACjB0C,cACApa,WACA6b,UACAtC,WACA3b,uBAEEsjB,EAAWD,EAASzC,EAAMmC,EAAa,EAAGpH,GAC1C4H,EAAaF,EAAS1C,EAAQkC,EAAe,EAAGlH,GAChD6H,EAAYH,EAASjH,EAAQ6G,EAAc,EAAGtH,GAC9C8H,EAAYJ,EAASxC,EAAOiC,EAAc,EAAGnH,GA7BO,EA+BvB,IAAI6E,GAAmB,CACxD7E,WACA3b,sBAFM0gB,EA/BkD,EA+BlDA,YAAaK,EA/BqC,EA+BrCA,UAKfvG,EAAO,uCAAG,4BAAA/V,EAAA,sEACMic,IADN,OACRnd,EADQ,OAEdoe,EAAYpe,GAFE,2CAAH,qDAIPoe,EAAc,SAAC,GAAmC,IAAD,mBAAjChB,EAAiC,KAAzBC,EAAyB,KAAnBxE,EAAmB,KAAXyE,EAAW,KACrDkC,EAAY,YAAInC,IAChBiC,EAAc,YAAIlC,IAClBsC,EAAa,YAAI7G,IACjB0G,EAAa,YAAIjC,KAEb6C,EAAe,kBAAMN,EAAW,CAAE/pB,OAAO,EAAOgG,QAAS,MACzD+Q,GAAI,uCAAG,gCAAA3L,EAAA,sEACsBsc,IADtB,gBACH1nB,EADG,EACHA,MAAOgG,EADJ,EACIA,QAEVhG,GACHsqB,KAIFP,EAAW,CAAE/pB,QAAOgG,YACpBxC,WAAW6mB,EAAc,KATd,2CAAH,qDAYJ9B,GAAU,uCAAG,4BAAAnd,EAAA,mEAEXH,EAFW,gCAGSA,EAAOsf,SAAS7nB,GAHzB,OAGPY,EAHO,OAIbumB,EAAcvmB,GAJD,gFAOR,IAPQ,yDAAH,qDAUVgnB,GAAa,WACjBd,EAAc,IACdC,EAAa,IACbG,EAAa,IAEb,IAAMvV,EAAO,IAAIqP,GAAK,CAAEhhB,YAAWkf,gBAAgB,IAAQuC,cACzDxd,GAEF+iB,EAAY,CAACrV,KASf,OANA1I,qBAAU,WACR2e,KACA/B,OAEC,CAAChf,EAAWqB,EAAYC,EAAYlE,IAGrC,0BAASU,UAAU,aAAnB,UACE,sBAAKA,UAAU,YAAf,UACE,sBAAKA,UAAU,MAAf,UACE,cAAC,EAAD,CAAOL,KAAK,gBACc,kBAAlBugB,EAAK,GAAGnX,OACd,cAACmZ,GAAD,CAAa/pB,KAAI,qBAAgB,EAAI+nB,EAAK,GAAGnX,OAAS9H,QAASgiB,QAGnE,gCACE,uBAAMjjB,UAAU,oBAAhB,UACE,uBACEA,UAAS,qEAAgEyiB,EAAa9jB,QAA7E,6CACP8jB,EAAa9pB,MADN,KADX,UAKE,+BAAO8pB,EAAa9jB,UACpB,sBAAMsC,QAAS+hB,EAAchjB,UAAU,8BAAvC,qBAKF,iCACE,sBAAMA,UAAU,MAAMiB,QAAS6Y,EAA/B,SACE,cAACxE,GAAD,MAEF,sBAAMtV,UAAU,MAAMiB,QAASyO,GAA/B,SACE,cAACmO,GAAD,YAKN,qBAAK7d,UAAU,0BAAf,SACE,cAAC,GAAD,CAAYoZ,eAAgByJ,EAAY/G,YAAamE,MAEvD,qBAAKjgB,UAAU,0BAAf,SACE,cAAC,GAAD,CAAUoZ,eAAgBwJ,EAAU9G,YAAaoE,MAGnD,qBAAKlgB,UAAU,0BAAf,SACE,cAAC,GAAD,CAAWoZ,eAAgB2J,EAAWjH,YAAaqE,MAErD,qBAAKngB,UAAU,0BAAf,SACE,cAAC,GAAD,CACEoZ,eAAgB0J,EAChBhH,YAAaJ,EACbrgB,UAAWinB,EACXrH,SAAUA,MAGd,qBAAKjb,UAAU,0BAAf,SACE,cAAC,GAAD,CACEygB,WAAYA,EACZnhB,kBAAmBA,EACnB2hB,YAAaA,EACbrd,OAAQA,EACRsd,WAAYA,aAKpB,qBAAKlhB,UAAU,sBCjGNmjB,I,OA3DQ,WAAO,IAAD,EACgCC,cAAnDnhB,EADmB,EACnBA,YAAaC,EADM,EACNA,UAAWqB,EADL,EACKA,WAAYC,EADjB,EACiBA,WAC5C,OACE,0BAASxD,UAAU,gBAAnB,UACE,sBAAKA,UAAU,cAAf,UACE,sBACEqB,MAAO,CACLF,SAAU,OACVkiB,WAAY,SACZniB,MAAO,UACPoiB,YAAa,OACbC,WAAY,uBANhB,wBAWA,qBAAK1hB,ICxBE,q5ODwBSC,IAAI,YAatB,sBAAK9B,UAAU,MAAf,UACE,qBAAKA,UAAU,QAAf,SACE,cAACwjB,EAAD,CACEvhB,YAAaA,EACbC,UAAWA,EACXqB,WAAYA,EACZC,WAAYA,MAGhB,qBAAKxD,UAAU,QAAf,SACE,cAACqG,EAAD,CACEpE,YAAaA,EACbC,UAAWA,EACXqB,WAAYA,EACZC,WAAYA,MAGhB,qBAAKxD,UAAU,QAAf,SACE,cAACyjB,GAAD,CACExhB,YAAaA,EACbC,UAAWA,EACXqB,WAAYA,EACZC,WAAYA,cEhCTkgB,OAvBf,YAAqC,IAAtBrkB,EAAqB,EAArBA,kBAAqB,EACgBoC,mBAAS,IADzB,mBAC3BnC,EAD2B,KACRC,EADQ,KAElC,OACE,cAAC,EAAeokB,SAAhB,CACExmB,MAAO,CAAEkC,oBAAmBC,oBAAmBC,wBADjD,SAGE,cAAC,IAAD,UACE,cAAC,IAAD,CACEqkB,KAAM,CACJ,mDACA,uCACA,2BACA,iBACA,KANJ,SASE,cAAC,GAAD,WCRKC,GAZS,SAAAC,GAClBA,GAAeA,aAAuBC,UACxC,8BAAqB3lB,MAAK,YAAkD,IAA/C4lB,EAA8C,EAA9CA,OAAQC,EAAsC,EAAtCA,OAAQC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,OAAQC,EAAc,EAAdA,QAC3DJ,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAOL,GACPM,EAAQN,OCId1qB,SAAOwB,YAFK,wCAEYwD,MAAK,SAACiB,GAC5BglB,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,GAAD,CAAKllB,kBAAmBA,MAE1BmlB,SAASC,eAAe,YAO5BZ,M,gCCtBA,IAAMa,EAAKxtB,EAAQ,KACb6H,EAAmB7H,EAAQ,KAEjCC,EAAOC,QAAU,SAA0BiE,GAAuC,IAA5BhE,EAA4B,uDAAnB,GAAIC,EAAe,uCAC1EqtB,GACHntB,MAAQ,IAAIQ,KAAOR,MAAQ,IAAIC,KAC5BD,KACAuH,EAAiBhH,MAAMP,KAAM,CAACH,EAAQC,IACtCstB,EAASF,EAAGG,QAAQxpB,EAAW,CAAEypB,cAAc,IASrD,OARAF,EAAO5sB,GAAG,YAAY,SAACJ,GAAD,OAAW+sB,EAAWltB,KAAKG,EAAMO,KAAMP,EAAMD,KAAMC,MACzEgtB,EAAO5sB,GAAG,cAAc,WACtB4sB,EAAOG,aACPJ,EAAWltB,KAAK,iBAElBmtB,EAAO5sB,GAAG,WAAW,kBAAM2sB,EAAWltB,KAAK,cAE3CktB,EAAWI,WAAa,kBAAMH,EAAOG,cAC9BJ,K","file":"static/js/main.c351b921.chunk.js","sourcesContent":["const throttle = require(\"../../utils/throttle\");\n\nmodule.exports = function createDispatcher(events = {}, systemContext) {\n const Dispatcher = this || {};\n\n Dispatcher.emit = (eventName, data, event) => {\n if (events[eventName])\n events[eventName].forEach((callback) =>\n callback.apply(systemContext, [data, event])\n );\n return Dispatcher;\n };\n\n Dispatcher.on = (eventName, callback, { limit, interval } = {}) => {\n if (typeof callback !== \"function\") return Dispatcher;\n const name = callback.name;\n if (typeof interval === \"number\") callback = throttle(callback, limit, interval);\n if (!events[eventName]) events[eventName] = [];\n\n if (name) {\n //if the function has a name and it already present don't add it\n const i = events[eventName].findIndex((fn) => fn.name === callback.name);\n if (i === -1) events[eventName].push(callback);\n else events[eventName][i] = callback;\n } else events[eventName].push(callback);\n return Dispatcher;\n };\n\n Dispatcher.$clearEvent = (eventName, fn) => {\n if (!events[eventName]) return Dispatcher;\n\n if (!fn) {\n // Clear all listeners for the given event\n delete events[eventName];\n } else if (typeof fn === \"function\") {\n // Remove the listener function with the specified name from the event's listener array\n events[eventName] = events[eventName].filter((callback) => {\n return callback.name !== fn.name;\n });\n } else {\n console.error(\n \"SystemLynxError: the second parameter of the Dispatcher.$clearEvent takes the original function to the event\"\n );\n }\n\n return Dispatcher;\n };\n return Dispatcher;\n};\n","module.exports = function headerSetter(headers = {}) {\n this.setHeaders = (options) => {\n Object.assign(headers, options);\n return this;\n };\n\n this.headers = () => headers;\n return this;\n};\n","const { default: axios } = require(\"axios/lib/axios\");\nconst FormData = require(\"form-data\");\n\nmodule.exports = function createHttpClient() {\n const Client = {};\n Client.request = async ({ method = \"get\", url, body: data, headers }) => {\n method = method.toLowerCase();\n const res = await axios({ url, method, headers, data });\n if (res.status >= 400) {\n throw res.data;\n } else return res.data;\n };\n\n Client.upload = async ({ url, formData, headers }) => {\n const { file, files, __arguments } = formData;\n const form = new FormData();\n if (file) form.append(\"file\", file, file.name);\n if (files) {\n files.forEach((file) => {\n form.append(\"files\", file, file.name);\n });\n }\n if (__arguments) form.append(\"__arguments\", JSON.stringify(__arguments));\n\n const res = await axios.post(url, form, {\n headers: { ...headers, \"Content-Type\": \"multipart/form-data\" },\n });\n if (res.status >= 400) {\n throw res.data;\n } else return res.data;\n };\n\n return Client;\n};\n","\"use strict\";\nconst loadConnectionData = require(\"./components/loadConnectionData\");\nconst SocketDispatcher = require(\"./components/SocketDispatcher\");\nconst HeaderSetter = require(\"./components/HeaderSetter\");\nconst ClientModule = require(\"./components/BrowserClientModule\");\nconst HttpClient = require(\"../HttpClient/browserClient\");\n\nmodule.exports = function createClient(httpClient = HttpClient(), systemContext) {\n const Client = {};\n Client.cachedServices = {};\n\n Client.loadService = async (url, options = {}) => {\n if (Client.cachedServices[url] && !options.forceReload)\n return Client.cachedServices[url];\n\n const connData = await loadConnectionData(httpClient, url, options);\n const Service = Client.createService(connData);\n Client.cachedServices[url] = Service;\n await new Promise((resolve) => Service.on(\"connect\", resolve));\n return Service;\n };\n\n Client.createService = (connData) => {\n const events = {};\n\n if (Client.cachedServices[connData.serviceUrl])\n return Client.cachedServices[connData.serviceUrl];\n\n const Service = {};\n SocketDispatcher.apply(Service, [connData.namespace, events, systemContext]);\n HeaderSetter.apply(Service);\n Client.cachedServices[connData.serviceUrl] = Service;\n\n Service.resetConnection = async (cb) => {\n try {\n const { modules, host, port, namespace } = await loadConnectionData(\n httpClient,\n connData.serviceUrl\n );\n SocketDispatcher.apply(Service, [namespace, events, systemContext]);\n\n modules.forEach(({ namespace, route, name }) => {\n if (Service[name]) {\n Service[name].__setConnection(host, port, route, namespace);\n Service[name].emit(\"reconnect\");\n }\n });\n\n Service.emit(\"reconnect\");\n if (typeof cb === \"function\") cb();\n } catch (error) {\n console.error(\n `[SystemLynx][Client]: Failed to reconnect service @${connData.serviceUrl}`\n );\n }\n };\n\n connData.modules.forEach(\n (mod) =>\n (Service[mod.name] = ClientModule(\n httpClient,\n mod,\n connData,\n Service,\n systemContext\n ))\n );\n\n Service.on(\"disconnect\", Service.resetConnection);\n\n return Service;\n };\n\n return Client;\n};\n","module.exports = function loadConnectionData(\n httpClient,\n url,\n { limit = 3, wait = 1000 } = {}\n) {\n const errors = [];\n\n return new Promise(async function getData(resolve, reject) {\n try {\n const results = await httpClient.request({ url });\n resolve(results);\n } catch (error) {\n errors.push(error);\n\n if (errors.length < limit)\n setTimeout(() => getData(resolve, reject), errors.length * wait);\n else {\n console.error(\n `[SystemLynx][Client]: Failed to load Service @${url} after ${errors.length} attempts.\\n`\n );\n console.error(errors);\n reject(errors);\n }\n }\n });\n};\n","module.exports = function throttleByCount(func, limit = 1, interval) {\n let callCount = 0;\n let resetTimer;\n\n return function (...args) {\n callCount++;\n\n if (callCount <= limit) {\n func.apply(this, args);\n }\n\n if (!resetTimer) {\n resetTimer = setTimeout(() => {\n callCount = 0;\n resetTimer = null;\n }, interval);\n }\n };\n};\n","\"use strict\";\nconst headerSetter = require(\"./HeaderSetter\");\nconst ServiceRequestHandler = require(\"./BrowserServiceRequestHandler\");\nconst SocketDispatcher = require(\"./SocketDispatcher\");\nconst getProtocol = (url) => url.match(/^(\\w+):\\/\\//)[0];\n\nmodule.exports = function SystemLynxClientModule(\n httpClient,\n { methods, namespace, route, connectionData, name },\n { port, host, serviceUrl },\n Service,\n systemContext\n) {\n const events = {};\n const ClientModule = headerSetter.apply({});\n\n ClientModule.__setConnection = (host, port, route, namespace) => {\n ClientModule.__connectionData = () => ({ route, host, port });\n\n SocketDispatcher.apply(ClientModule, [namespace, events, systemContext]);\n };\n ClientModule.__setConnection(host, port, route, namespace);\n\n const reconnectModule = async (cb) => {\n try {\n const url = connectionData.serviceUrl + `?modules=${name}`;\n const { modules, port, host } = await loadConnectionData(url);\n const { namespace, route } = modules[0];\n ClientModule.__setConnection(host, port, route, namespace);\n\n if (typeof cb === \"function\") cb();\n } catch (error) {\n console.error(`[SystemLynx][ClientModule]: Failed to reconnect service @${url}`);\n }\n };\n const protocol = getProtocol(serviceUrl);\n methods.forEach(({ method, fn }) => {\n ClientModule[fn] = ServiceRequestHandler.apply(ClientModule, [\n httpClient,\n protocol,\n method,\n fn,\n Service,\n connectionData && reconnectModule,\n ]);\n });\n\n return ClientModule;\n};\n","\"use strict\";\n\nconst isObject = (value) =>\n typeof value === \"object\" ? (!value ? false : !Array.isArray(value)) : false;\nconst isEmpty = (obj) => Object.getOwnPropertyNames(obj).length === 0;\nconst makeQuery = (data) =>\n Object.getOwnPropertyNames(data).reduce(\n (query, name) => (query += `${name}=${data[name]}&`),\n \"?\"\n );\nmodule.exports = function ServiceRequestHandler(\n httpClient,\n protocol,\n method,\n fn,\n Service,\n reconnectModule\n) {\n return function sendRequest() {\n const __arguments = Array.from(arguments);\n\n const tryRequest = (cb, errCount = 0) => {\n const { route, port, host } = this.__connectionData();\n const singleFileURL = `${protocol}${host}:${port}/sf${route}/${fn}`;\n const multiFileURL = `${protocol}${host}:${port}/mf${route}/${fn}`;\n const defaultURL = `${protocol}${host}:${port}${route}/${fn}`;\n const { file, files } = __arguments[0] || {};\n const url = file ? singleFileURL : files ? multiFileURL : defaultURL;\n const defaultHeaders = this.headers();\n const headers = !isEmpty(defaultHeaders) ? defaultHeaders : Service.headers();\n if (url === defaultURL) {\n const query =\n method === \"get\" && isObject(__arguments[0]) ? makeQuery(__arguments[0]) : \"\";\n httpClient\n .request({\n url: `${url}${query}`,\n method,\n body: { __arguments },\n headers,\n })\n .then((results) => cb(null, results))\n .catch((err) => ErrorHandler(err, errCount, cb));\n } else {\n delete __arguments[0].file;\n delete __arguments[0].files;\n const formData = {};\n formData.__arguments = __arguments;\n if (file) formData.file = file;\n if (Array.isArray(files)) formData.files = files;\n httpClient\n .upload({\n url,\n method,\n formData,\n headers,\n })\n .then((results) => cb(null, results))\n .catch((err) => ErrorHandler(err, errCount, cb));\n }\n };\n\n const ErrorHandler = (err, errCount, cb) => {\n if (!err.isAxiosError) throw err;\n if (!err.response) throw err;\n if (!err.response.data) throw err;\n\n if (err.response.data.SystemLynxService) {\n cb(err.response.data);\n } else if (errCount <= 3) {\n errCount++;\n if (reconnectModule) reconnectModule(() => tryRequest(cb, errCount));\n else Service.resetConnection(() => tryRequest(cb, errCount));\n } else {\n console.error(`[SystemLynx][ServiceRequestHandler][Error]: ${err.message}\\n`);\n console.error(err);\n }\n };\n\n return new Promise((resolve, reject) =>\n tryRequest((err, results) => {\n if (err) reject(err);\n else resolve(results.returnValue);\n })\n );\n };\n};\n","//These are all the abstractions that make up SystemLynx\nconst createClient = require(\"./systemlynx/Client/BrowserClient\");\nconst createHttpClient = require(\"./systemlynx/HttpClient/browserClient\");\nconst createDispatcher = require(\"./systemlynx/Dispatcher/Dispatcher\");\n\nconst HttpClient = createHttpClient();\nconst Client = createClient();\nconst Dispatcher = new createDispatcher();\n\nconst systemlynx = {\n //Export these pre-created objects for convenient object destructuring\n //These are the main utilities for app development\n HttpClient,\n Client,\n Dispatcher,\n //export all modules themselves\n //all these modules export a functions\n createClient,\n createHttpClient,\n createDispatcher,\n};\nmodule.exports = systemlynx;\nwindow.systemlynx = systemlynx;\n","import React from \"react\";\n\nconst ServiceContext = React.createContext({\n SystemViewService: {},\n connectedServices: [],\n setConnectedServices: () => {},\n});\n\nexport default ServiceContext;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst Textbox = ({\n placeholderText,\n TextboxSubmit,\n text,\n setValue,\n disabled = false,\n defaultText,\n inputClassName,\n}) => {\n const enterClicked = (e) => {\n if (e.key === \"Enter\" && typeof TextboxSubmit === \"function\") TextboxSubmit(e);\n };\n\n return (\n <div className={`textbox`}>\n <input\n type=\"text\"\n value={text}\n defaultValue={defaultText}\n placeholder={placeholderText}\n onKeyDown={enterClicked}\n onChange={setValue}\n disabled={disabled}\n className={inputClassName}\n />\n </div>\n );\n};\n\nexport default Textbox;\n","import React from \"react\";\nimport \"./styles.scss\";\nimport { Link } from \"react-router-dom\";\n\nconst myLink = ({ link, add_class, text, linkClick }) => {\n const click = (e) => {\n e.stopPropagation();\n if (typeof linkClick === \"function\") linkClick();\n };\n return (\n <Link className=\"link\" to={link}>\n {text}\n </Link>\n );\n};\n\nexport default myLink;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst List = ({ children }) => {\n return <div className=\"list\">{children}</div>;\n};\n\nexport default List;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst ExpandIcon = ({\n isOpen,\n className = \"\",\n onClick,\n color = \"#48484b\",\n size: fontSize,\n}) => {\n return isOpen ? (\n <span\n style={{ color, fontSize }}\n onClick={onClick}\n className={`expandable-icon ${className}`}\n >\n &#9660;\n </span>\n ) : (\n <span\n style={{ color, fontSize }}\n onClick={onClick}\n className={`expandable-icon ${className}`}\n >\n &#x25BA;\n </span>\n );\n};\n\nexport default ExpandIcon;\n","import React, { useState } from \"react\";\nimport \"./styles.scss\";\nimport List from \"../../atoms/List/List\";\nimport ExpandIcon from \"../../atoms/ExpandableIcon/ExpandableIcon\";\n\nconst ExpandableList = ({ children, title, open = false }) => {\n const [isOpen, setState] = useState(open);\n\n const expandClick = () => {\n setState(!isOpen);\n };\n return (\n <div className=\"expandable-list\">\n <div className=\"expandable-list__button\">\n <ExpandIcon isOpen={isOpen} onClick={expandClick} />\n {title}\n </div>\n\n <div className={`expandable-list__items expandable-list__items--${!isOpen ? \"hidden\" : \"\"}`}>\n <List>{children}</List>\n </div>\n </div>\n );\n};\n\nexport default ExpandableList;\n","import React from \"react\";\nimport \"./styles.scss\";\nimport savedDocImg from \"../../assets/saved-doc.png\";\nimport missingDocImg from \"../../assets/missing-doc.png\";\n\nconst DocIcon = ({ isSaved }) => {\n return (\n <>\n <div className={`doc-icon`}>\n <img\n className={`doc-icon__img`}\n src={isSaved ? savedDocImg : missingDocImg}\n alt={isSaved ? \"Saved Doc\" : \"Missing Doc\"}\n />\n </div>\n </>\n );\n};\n\nexport default DocIcon;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport \"./styles.scss\";\nimport testMissingImg from \"../../assets/test-missing.png\";\nimport testSavedImg from \"../../assets/test-saved.png\";\nconst TestsIcon = ({ isSaved, className }) => {\n return (\n <div className={`doc-icon`}>\n <img\n className={`doc-icon__img ${className && className}`}\n src={isSaved ? testSavedImg : testMissingImg}\n alt=\"missing tests\"\n />\n </div>\n );\n};\n\nexport default TestsIcon;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport \"./styles.scss\";\nimport ExpandableList from \"../ExpandableList/ExpandableList\";\nimport MyLink from \"../../atoms/Link/Link\";\nimport DocIcon from \"../../atoms/DocsIcon/DocsIcon\";\nimport TestsIcon from \"../../atoms/TestsIcon/TestsIcon\";\n\nconst ServerModulesList = ({\n projectCode,\n serviceId,\n modules,\n selectedModuleName,\n selectedMethodName,\n specList,\n}) => {\n const className = \"server-module\";\n\n return (\n <React.Fragment>\n {modules.map(({ name, methods }, i) => {\n const isSelected = selectedModuleName === name;\n const isSaved = specList.docs.includes(`${name}.md`);\n return (\n <ExpandableList\n open={selectedModuleName === name}\n key={i}\n title={\n <span\n className={`system-nav__link system-nav__link--selected-${\n !selectedMethodName && isSelected\n } ${name === \"Plugin\" && className + \"__name--plugin\"}`}\n >\n <MyLink link={`/${projectCode}/${serviceId}/${name}`} text={name} />\n <span className={`${className}__docs-icon`}>\n <DocIcon isSaved={isSaved} />\n </span>\n </span>\n }\n >\n {methods.map(({ fn }, i) => {\n const isSavedDoc = !!specList.docs.includes(`${name}.${fn}.md`);\n const isSavedTest = !!specList.tests.includes(`${name}.${fn}.json`);\n return (\n <div\n key={i}\n className={`${className}__methods system-nav__link--selected-${\n fn === selectedMethodName && isSelected\n }`}\n >\n <MyLink\n key={i}\n link={`/${projectCode}/${serviceId}/${name}/${fn}`}\n text={\n <span>\n {`.${fn}(`}\n <span style={{ fontWeight: \"bold\" }}>...</span>\n {\")\"}\n </span>\n }\n />\n <div className={`${className}__docs-icon`}>\n <DocIcon isSaved={isSavedDoc} />\n <TestsIcon isSaved={isSavedTest} />\n </div>\n </div>\n );\n })}\n </ExpandableList>\n );\n })}\n </React.Fragment>\n );\n};\n\nexport default ServerModulesList;\n","import React, { useEffect, useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport ServiceContext from \"../../ServiceContext\";\nimport TextBox from \"../../atoms/Textbox/Textbox\";\nimport Link from \"../../atoms/Link/Link\";\nimport ExpandableList from \"../../molecules/ExpandableList/ExpandableList\";\nimport ServerModulesList from \"../../molecules/ServerModulesList/ServerModulesList\";\nimport DocIcon from \"../../atoms/DocsIcon/DocsIcon\";\nimport \"./styles.scss\";\nimport { Client } from \"systemlynx\";\n\nconst SystemNav = ({ projectCode, serviceId, moduleName, methodName }) => {\n const { SystemViewService, setConnectedServices, connectedServices } =\n useContext(ServiceContext);\n const serviceData = connectedServices.find(\n (serviceData) =>\n serviceData.serviceId === serviceId && serviceData.projectCode === projectCode\n );\n const { Plugin } = serviceData\n ? Client.createService(serviceData.system.connectionData)\n : {};\n const { SystemView } = SystemViewService;\n\n const fetchProject = async (pc = projectCode) => {\n try {\n const results = await SystemView.getServices(pc);\n setConnectedServices(results);\n return results;\n } catch (error) {\n console.error(error);\n setConnectedServices([]);\n }\n };\n\n const history = useHistory();\n const SearchInputSubmit = async (e) => {\n const project = await fetchProject(e.target.value);\n if (project.length)\n if (project[0].projectCode) history.push(`/${project[0].projectCode}`);\n };\n\n useEffect(() => {\n if (connectedServices.length)\n SystemView.on(\n `spec-list-updated:${projectCode}`,\n function updateSpecList({ specList, serviceId }) {\n const serviceData = connectedServices.find(\n (serviceData) =>\n serviceData.serviceId === serviceId &&\n serviceData.projectCode === projectCode\n );\n if (serviceData) {\n serviceData.specList = specList;\n setConnectedServices([...connectedServices]);\n }\n }\n );\n }, [projectCode, connectedServices]);\n useEffect(() => {\n if (projectCode) fetchProject(projectCode);\n }, []);\n useEffect(() => {\n if (Plugin) Plugin.on(`reconnect`, fetchProject);\n }, [Plugin, connectedServices]);\n return (\n <section className=\"system-nav\">\n <div className=\"container\">\n <div className=\"row system-nav__section\">\n <div className=\"col-12\">\n <TextBox\n defaultText={projectCode}\n placeholderText=\"projectCode\"\n TextboxSubmit={SearchInputSubmit}\n />\n </div>\n </div>\n <div className=\"row system-nav__section\">\n <div className=\"col-12 \">\n <NavigationLinks\n connectedServices={connectedServices}\n projectCode={projectCode}\n selectedServiceId={serviceId}\n selectedModuleName={moduleName}\n selectedMethodName={methodName}\n />\n </div>\n </div>\n </div>\n <div className=\"scroll-buffer\"></div>\n </section>\n );\n};\n\nconst NavigationLinks = ({\n connectedServices,\n projectCode,\n selectedServiceId,\n selectedModuleName,\n selectedMethodName,\n}) => {\n return connectedServices.map(({ system, serviceId, specList }, i) => {\n const { serviceUrl } = system.connectionData;\n const isSaved = specList.docs.includes(`${serviceId}.md`);\n const isSelected = selectedServiceId === serviceId;\n return (\n <ExpandableList\n open={isSelected}\n key={i}\n title={\n <span\n className={`system-nav__link system-nav__link--selected-${\n !selectedModuleName && isSelected\n }`}\n >\n <>\n <Link link={`/${projectCode}/${serviceId}`} text={serviceId} />\n <span>\n <a\n className=\"system-nav__service-url\"\n href={serviceUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {serviceUrl}\n </a>\n </span>\n </>\n <span className=\"server-module__docs-icon\">\n <DocIcon isSaved={isSaved} />\n </span>\n </span>\n }\n >\n <ServerModulesList\n selectedModuleName={selectedModuleName}\n selectedMethodName={selectedMethodName}\n projectCode={projectCode}\n serviceId={serviceId}\n modules={system.connectionData.modules}\n specList={specList}\n />\n </ExpandableList>\n );\n });\n};\n\nexport default SystemNav;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst DescriptionBox = ({ text, setValue }) => {\n return (\n <div className=\"description-box\">\n <textarea\n className=\"description-box__textbox\"\n name=\"description-box\"\n id=\"description-box\"\n value={text}\n onChange={\n setValue\n ? (e) => {\n setValue(e.target.value);\n }\n : null\n }\n ></textarea>\n </div>\n );\n};\n\nexport default DescriptionBox;\n","import React from \"react\";\nimport \"./styles.scss\";\nimport CLEAR_ICON from \"../../assets/clear.png\";\n\nconst Button = ({ children, submit }) => {\n return (\n <button className=\"button\" onClick={submit}>\n {children}\n </button>\n );\n};\n\nexport function ClearButton({ onClick }) {\n return (\n <span className={`clear-button btn`} onClick={onClick}>\n <img src={CLEAR_ICON} alt=\"clear\" />\n </span>\n );\n}\nexport default Button;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB80lEQVRoge2YzysEYRyHl7XZxJHTJn8AJzdFkRAlB/6DPSiJktKWcmBFDq5qnR3YC0XKUS4iadlcuVDEzY/w+rzNqNmad/add953vrs1n3oue9nn2V/z7sRi0cIZY6wPXIAnsA2aqJ2kB9lh8MFKl6P2kppAnu+R2q3sPOT5zqn9PFdGnj/eS+0oHOSGwLtA/hOMUjsKF8lTrdrlByN5ikXyVIvkqRbJU63i5SHQChbBCSiCa5AHaTDOvE+VI5TiCbAGvgSCXqOVtwMyCuKVIW8HxMGOT3mazzyeNAm6wQKYczzOP0Z5HwETYQm3gDGwAc7sV865VcWItEnpTpADd5IyKhG7puT5jaNvSXHnsj4jrkwF7CvIq0QUTMjXgaMAAXwrkhHHJgJqwWHAANmIjPYA+wmnwA0Tn1l0RPArdspUQCN4CSj/v2VBRNbLQUfEjKYAtwh+7EiYDuBf5oLGiHWjwoKIAfCrMWKWImJTY8A8RUA9uNQU0BV6gB2RAvcB5fm5P0kSYEe0g9cAAadk8o6IHvCmGBD+r5Db7HfiQSGgcm6VQKaN+fti85/iZmrvkjHriroEfiQCitS+wkGuH9w6ZN3u+2xRe3qOWceOafDMrJtZzvFTZwe1o9Qg2gAmmfWP7gDsMaqLV5BBugbEqT2qbn8w989Geyq+1AAAAABJRU5ErkJggg==\"","import React, { useState, useEffect } from \"react\";\nimport \"./styles.scss\";\nimport Button from \"../../atoms/Button/Button\";\n\nconst EditBox = ({\n formSubmit,\n mainObject,\n hiddenForm,\n onCancel,\n open = false,\n stateChange,\n}) => {\n const [editMode, setEditMode] = useState(open);\n const editBoxClicked = () => setEditMode(true);\n const cancelClicked = () => {\n if (typeof onCancel === \"function\") onCancel();\n setEditMode(false);\n };\n\n const saveClicked = () => {\n formSubmit(setEditMode);\n //setEditMode(false);\n };\n // useEffect(() => {\n // setEditMode(false);\n // }, [stateChange]);\n return (\n <div className={`edit-box edit-box--${editMode ? \"edit\" : \"read\"}`}>\n <div\n onClick={editBoxClicked}\n className={`edit-box__main edit-box__main--${editMode ? \"hidden\" : \"visible\"}`}\n >\n {mainObject}\n </div>\n <div\n className={`edit-box__form edit-box__form--${editMode ? \"visible\" : \"hidden\"}`}\n >\n <div className=\"row\">{hiddenForm}</div>\n\n <div className=\"edit-box__button\">\n <Button submit={saveClicked}>Save</Button>\n <Button submit={cancelClicked}>Close</Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default EditBox;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst Title = ({ text, style }) => {\n return (\n <span style={style} className=\"title\">\n {text}\n </span>\n );\n};\n\nexport default Title;\n","import React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { dracula } from \"react-syntax-highlighter/dist/cjs/styles/prism\";\nimport remarkGfm from \"remark-gfm\";\n\nimport \"./styles.scss\";\n\nconst Markdown = ({ children }) => {\n return (\n <div className=\"markdown\">\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n renderers={{ code: CodeBlock }}\n components={{\n code({ node, inline, className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || \"\");\n return !inline && match ? (\n <SyntaxHighlighter\n children={String(children).replace(/\\n$/, \"\")}\n style={dracula}\n language={match[1]}\n PreTag=\"div\"\n {...props}\n />\n ) : (\n <code className={className} {...props}>\n {children}\n </code>\n );\n },\n }}\n >\n {children}\n </ReactMarkdown>\n </div>\n );\n};\n\nfunction CodeBlock({ value, language }) {\n return (\n <SyntaxHighlighter language={language} style={dracula}>\n {value || \"\"}\n </SyntaxHighlighter>\n );\n}\n\nexport default Markdown;\n","import React, { useState, useContext, useEffect } from \"react\";\nimport \"./styles.scss\";\nimport DescriptionBox from \"../../atoms/DescriptionBox/DescriptionBox\";\nimport EditBox from \"../../molecules/EditBox/EditBox\";\nimport Title from \"../../atoms/Title/Title\";\nimport Markdown from \"../../atoms/Markdown/Markdown\";\nimport ServiceContext from \"../../ServiceContext\";\nimport { Client } from \"systemlynx\";\n\nexport default function Documentation({\n projectCode,\n serviceId,\n moduleName,\n methodName,\n}) {\n const { connectedServices } = useContext(ServiceContext);\n\n const service = connectedServices.find(\n (service) => service.serviceId === serviceId && service.projectCode === projectCode\n );\n const { Plugin } = service ? Client.createService(service.system.connectionData) : {};\n\n const [doc, setDocument] = useState({\n documentation: \"\",\n namespace: { serviceId, moduleName, methodName },\n });\n\n const fetchDocument = async (Plugin) => {\n setDocument({\n documentation: \"\",\n namespace: { serviceId, moduleName, methodName },\n });\n try {\n if (Plugin) {\n const results = await Plugin.getDoc({\n serviceId,\n moduleName,\n methodName,\n });\n setDocument(results);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n useEffect(() => {\n fetchDocument(Plugin);\n }, [methodName, moduleName, serviceId, Plugin]);\n\n useEffect(() => {\n // if (Plugin) Plugin.on(`reconnect`, fetchDocument.bind({}, Plugin));\n }, [Plugin]);\n return (\n <section className=\"documentation\">\n <div className=\"documentation-view\">\n <div className=\"row\">\n <DocTitle\n serviceId={serviceId}\n moduleName={moduleName}\n methodName={methodName}\n />\n </div>\n <div className=\"row documentation-view__data-table\">\n <DocDescription doc={doc} setDocument={setDocument} Plugin={Plugin} />\n </div>\n </div>\n </section>\n );\n}\n\nconst DocTitle = ({ serviceId, moduleName, methodName, variable_name = \"...\" }) => {\n return (\n <Title\n style={{ marginBottom: \"5px\" }}\n text={\n <span className=\"documentation-view__title\">\n {methodName && moduleName && serviceId ? (\n <>\n {`${serviceId}.${moduleName}.${methodName}`}\n <span className=\"documentation-view__parentheses\">(</span>\n <span className=\"documentation-view__parameter btn\">{variable_name}</span>\n <span className=\"documentation-view__parentheses\">)</span>\n </>\n ) : moduleName && serviceId ? (\n <>{`${serviceId}.${moduleName}`}</>\n ) : (\n serviceId && <>{`${serviceId}`}</>\n )}\n </span>\n }\n />\n );\n};\n\nconst DocDescription = ({ doc, setDocument, Plugin }) => {\n const { serviceId, methodName, moduleName } = doc;\n const [text, setText] = useState(doc.documentation);\n const saveDocument = async (setFormDisplay) => {\n if (Plugin) {\n try {\n const results = await Plugin.saveDoc({ ...doc, documentation: text });\n setDocument(results);\n setFormDisplay(false);\n } catch (error) {\n console.error(error);\n }\n }\n };\n\n const updateDoc = (documentation) => setText(documentation);\n const cancel = () => setText(doc.documentation);\n\n useEffect(() => {\n setText(doc.documentation);\n }, [doc]);\n return (\n <EditBox\n mainObject={\n <Markdown children={text || \"Use markdown to create your documentation here\"} />\n }\n hiddenForm={<DescriptionBox text={text || \"\"} setValue={updateDoc} />}\n formSubmit={saveDocument}\n stateChange={[serviceId, methodName, moduleName]}\n onCancel={cancel}\n />\n );\n};\n","import React from \"react\";\nimport \"./styles.scss\";\nimport ExpandIcon from \"../../atoms/ExpandableIcon/ExpandableIcon\";\n\nconst ExpandableSection = ({\n children,\n title,\n color = \"#2aa198\",\n open,\n lock,\n toggleExpansion,\n}) => {\n return (\n <div className=\"expandable-section\">\n <div className=\"expandable-section__title\">\n <span\n className={`expandable-section__btn expandable-section__btn--hide-${lock}`}\n onClick={toggleExpansion}\n >\n <ExpandIcon color={color} isOpen={open} />\n </span>\n {title}\n </div>\n\n <div\n className={`expandable-section__items expandable-section__items--${\n !open ? \"hidden\" : \"\"\n }`}\n >\n {children}\n </div>\n </div>\n );\n};\n\nexport default ExpandableSection;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst TestCaption = ({ caption, useInput = false, onChange, title }) => {\n const className = \"test-caption\";\n const clickHandle = (e) => {\n typeof onChange === \"function\" && onChange(e.target.value);\n };\n return (\n <div className={`${className}`}>\n <span className={`${className}__title`}>{caption}</span>\n <span\n className={`${className}__description-input ${className}__description-input--visible-${useInput}`}\n >\n <input\n value={title}\n type=\"text\"\n placeholder=\"describe the test...\"\n onChange={clickHandle}\n />\n </span>\n </div>\n );\n};\n\nexport default TestCaption;\n","import { useState, useEffect, useRef } from \"react\";\nimport \"./styles.scss\";\n\nconst AutoCompleteBox = ({\n suggestions,\n value = \"\",\n className,\n onSubmit,\n onChange,\n onBlur,\n disabled = false,\n placeholder,\n filterSuggestion = true,\n requireSelection = true,\n}) => {\n const [filteredSuggestions, setFilteredSuggestions] = useState([]);\n const [activeSuggestionIndex, setActiveSuggestionIndex] = useState(0);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [input, setInput] = useState(value);\n const inputRef = useRef(null);\n\n useEffect(() => setInput(value), [value]);\n const change = (e) => {\n const userInput = e.target.value;\n\n // Filter our suggestions that don't contain the user's input\n const unLinked = filterSuggestion\n ? suggestions.filter(\n (suggestion) => suggestion.toLowerCase().indexOf(userInput.toLowerCase()) > -1\n )\n : suggestions;\n\n setInput(e.target.value);\n setFilteredSuggestions(unLinked);\n setActiveSuggestionIndex(0);\n\n if (\n (!requireSelection && unLinked.indexOf(userInput) > -1) ||\n (!requireSelection &&\n unLinked.length <= 1 &&\n userInput.length > (unLinked[0] || \"\").length)\n )\n setShowSuggestions(false);\n else setShowSuggestions(true);\n if (typeof onChange === \"function\") onChange(e.target.value);\n };\n const completeSuggestion = (text) => {\n if (typeof onSubmit === \"function\") onSubmit(text);\n setFilteredSuggestions([]);\n setInput(text);\n setActiveSuggestionIndex(0);\n setShowSuggestions(false);\n };\n const onClick = (e) => {\n const text = e.target.innerText.substr(0, e.target.innerText.length);\n completeSuggestion(text);\n };\n const blur = (e) => {\n typeof onBlur === \"function\" && onBlur(e.target.value);\n };\n\n const onKeyDown = (event) => {\n if (event.keyCode === 13) {\n inputRef.current.blur();\n completeSuggestion(filteredSuggestions[activeSuggestionIndex]);\n }\n\n // Check if the Up arrow key is pressed\n if (event.keyCode === 40) {\n if (activeSuggestionIndex < filteredSuggestions.length - 1)\n setActiveSuggestionIndex(activeSuggestionIndex + 1);\n }\n\n // Check if the Down arrow key is pressed\n if (event.keyCode === 38) {\n if (activeSuggestionIndex) setActiveSuggestionIndex(activeSuggestionIndex - 1);\n }\n };\n const SuggestionsListComponent = () => {\n return filteredSuggestions.length ? (\n <div className=\"auto-complete__suggestions\">\n {filteredSuggestions.map((suggestion, index) => {\n let className;\n // Flag the active suggestion with a class\n\n className =\n index === activeSuggestionIndex\n ? \"auto-complete__suggestion auto-complete__suggestion--active\"\n : \"auto-complete__suggestion \";\n\n return (\n <span className={className} key={suggestion} onClick={onClick}>\n {suggestion}\n </span>\n );\n })}\n </div>\n ) : (\n <div className=\"auto-complete__suggestions\">\n <div className=\"auto-complete__suggestion auto-complete__suggestion--empty\">\n <em>no match</em>\n </div>\n </div>\n );\n };\n\n return (\n <div className=\"auto-complete\">\n <input\n className={className + \" auto-complete__input\"}\n type=\"text\"\n onChange={change}\n onKeyDown={onKeyDown}\n onBlur={blur}\n value={input}\n disabled={disabled}\n placeholder={placeholder}\n ref={inputRef}\n />\n {showSuggestions && input && <SuggestionsListComponent />}\n </div>\n );\n};\n\nexport default AutoCompleteBox;\n","import React, { useState, useEffect } from \"react\";\nimport \"./styles.scss\";\n\nconst JsonTextBox = ({ obj, onSubmit, onCancel }) => {\n const [prettyJson, setPrettyJson] = useState(JSON.stringify(obj, undefined, 2));\n const [isJson, setIsJson] = useState(true);\n const [json, setJson] = useState(obj);\n\n const checkJsonString = (e) => {\n const str = e.target.value;\n setPrettyJson(str);\n try {\n JSON.parse(str);\n } catch (e) {\n setIsJson(false);\n return false;\n }\n setIsJson(true);\n setJson(JSON.parse(str));\n return true;\n };\n const submit = () => {\n if (isJson && typeof onSubmit === \"function\") onSubmit(json);\n };\n const cancel = () => {\n setIsJson(false);\n setJson(obj);\n setPrettyJson(JSON.stringify(obj, undefined, 2));\n if (typeof onCancel === \"function\") onCancel();\n };\n useEffect(() => {\n setPrettyJson(JSON.stringify(obj, undefined, 2));\n setIsJson(!!obj);\n setJson(obj);\n }, [obj]);\n return (\n <div className=\"json-text-box\">\n <div className=\"json-text-box__background-overlay\"></div>\n <textarea\n className={`json-text-box__textbox json-text-box__textbox--is-json-${isJson}`}\n name=\"json-text-box\"\n id=\"json-text-box\"\n value={prettyJson}\n onChange={checkJsonString}\n ></textarea>\n <div className=\"json-text-box__btn-container\">\n <span\n onClick={submit}\n className={`json-text-box__btn json-text-box__btn--is-json-${isJson}`}\n >\n {isJson ? \"save\" : \"json\"}\n </span>\n <span onClick={cancel} className={`json-text-box__btn json-text-box__btn--cancel`}>\n x\n </span>\n </div>\n </div>\n );\n};\n\nexport default JsonTextBox;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst Selector = ({\n options = [],\n values = [],\n selected_option,\n onSelect,\n className,\n controlledOption,\n}) => {\n return (\n <select\n className={className}\n defaultValue={selected_option}\n onChange={onSelect}\n value={controlledOption}\n >\n {options.map((option, i) => (\n <option key={i} value={values[i]}>\n {option}\n </option>\n ))}\n </select>\n );\n};\n\nexport default Selector;\n","import React from \"react\";\nimport \"./styles.scss\";\nimport Selector from \"../Selector/Selector\";\nconst options = [\n \"string\",\n \"number\",\n \"date\",\n \"boolean\",\n \"object\",\n \"array\",\n \"undefined\",\n \"null\",\n \"target\",\n];\n\nconst TypeSelector = ({ default_type = \"object\", onSelect, className = \"\" }) => {\n const class_name = \"type-selector\";\n return (\n <Selector\n className={`${class_name} ${className}`}\n options={options}\n onSelect={onSelect}\n controlledOption={default_type}\n />\n );\n};\n\nexport default TypeSelector;\n","import React from \"react\";\nimport AutoCompleteBox from \"../AutoCompleteBox/AutoCompleteBox\";\nimport \"./styles.scss\";\n\nconst TargetSelector = ({\n controller,\n target_namespace,\n testIndex,\n arg_index,\n className,\n target_index,\n}) => {\n const submit = (value) => {\n controller.setTargetValue(testIndex, arg_index, target_index, value, [\"input\"], 0);\n };\n //gather suggestions\n //create a onchange fn to update target value as user types\n //submit fn should fill text box (already automatic) and then update target value\n return (\n <div className={`target-selector`}>\n <AutoCompleteBox\n className={`target-selector__auto-complete ${className}`}\n suggestions={controller.getTargetSuggestions(testIndex)}\n onSubmit={submit}\n onChange={submit}\n value={target_namespace}\n placeholder={\"beforeTest.Action1.results...\"}\n requireSelection={false}\n />\n </div>\n );\n};\n\nexport default TargetSelector;\n","import React from \"react\";\nimport \"./styles.scss\";\n\nconst Toggle = ({ round, isChecked, onChange }) => {\n return (\n <label className={`switch ${round ? \"round\" : \"\"}`}>\n <input type=\"checkbox\" checked={isChecked} onChange={onChange} />\n <span className={`slider ${round ? \"round\" : \"\"}`}></span>\n </label>\n );\n};\n\nexport default Toggle;\n","const fileTypes = {\n txt: \"text/plain\",\n csv: \"text/csv\",\n json: \"application/json\",\n pdf: \"application/pdf\",\n doc: \"application/msword\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xls: \"application/vnd.ms-excel\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ppt: \"application/vnd.ms-powerpoint\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n};\n\nexport default function createMockFile(fileName) {\n // Split the file name and extension\n const fileParts = fileName.split(\".\");\n const fileExtension = fileParts.pop();\n const fileNameWithoutExtension = fileParts.join(\".\");\n\n if (fileTypes[fileExtension]) {\n // Create a new Blob object with your mock file content\n const fileContent = `Mock content for ${fileNameWithoutExtension}.${fileExtension}`;\n const blob = new Blob([fileContent], { type: fileTypes[fileExtension] });\n\n // Create a new File object using the Blob\n const mockFile = new File([blob], fileName, { type: fileTypes[fileExtension] });\n\n return mockFile;\n }\n\n return `ERROR: Invalid file extension -> ${fileExtension}`;\n}\n","import moment from \"moment\";\nimport { getType } from \"../../../molecules/ValidationInput/validator\";\nimport createMockFile from \"./createMockFile\";\nexport const rnb = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);\nexport const isObjectLike = (value) =>\n [\"object\", \"array\", \"string\"].indexOf(getType(value)) > -1;\n\nexport const isTargetNamespace = (str) =>\n /^(?:before|main|after)Test\\.Action\\d+\\.(?:error|results)(?:\\[(?:\\d+)\\]|\\.(?:(?![0-9])[a-zA-Z0-9$_]+(?:\\[(?:\\d+)\\])?))*$/.test(\n str\n );\nexport const targetValueFnRegex =\n /tv\\((?:before|main|after)Test\\.Action\\d+\\.(?:error|results)(?:\\[(?:\\d+)\\]|\\.(?:(?![0-9])[a-zA-Z0-9$_]+(?:\\[(?:\\d+)\\])?))*\\)/g;\nexport const isTargetValueFn = (str) =>\n /^tv\\((?:before|main|after)Test\\.Action\\d+\\.(?:error|results)(?:\\[(?:\\d+)\\]|\\.(?:(?![0-9])[a-zA-Z0-9$_]+(?:\\[(?:\\d+)\\])?))*\\)$/.test(\n str\n );\nexport const isEqualArrays = (a, b) => a.join(\".\") === b.join(\".\"); //specifically for arrays of strings\nexport const isValidNamespace = (str) => /^(?![0-9])[a-zA-Z0-9$_]+$/.test(str); //_id\nexport const startsWithNameAndArray = (str) => /^\\w+(\\[\\d+\\])+/.test(str); //users[0]\nexport const isNameAndArray = (str) => /^\\w+(\\[\\d+\\])+$/.test(str); //users[0]\nexport const endsWithArrayIndex = (str) => /\\w+(\\[\\d+\\])+$/.test(str); //users[0].docs[3]...\nexport const getLastArrayNamespace = (str) => (str.match(/(\\w+(\\[\\d+\\])+)$/) || [str])[0];\n\nexport const parseIndex = (nsp) => parseInt((nsp.match(/\\[(\\d+)\\]$/) || [null, \"0\"])[1]);\nexport const replaceFirstIndex = (nsp, insert = \"0\") =>\n nsp.replace(/(\\[\\d+\\])/, `[${insert}]`);\nexport const replaceLastIndex = (nsp, insert = \"0\") =>\n nsp.replace(/(\\[\\d+\\])$/, `[${insert}]`);\n\nexport const replaceAllIndices = (nsp, insert = \"0\") =>\n nsp.replace(/(\\[\\d+\\])/g, `[${insert}]`);\n\nexport const getArrayNamespaces = (str) =>\n str\n .split(/(\\w+(\\[\\d+\\])+)/)\n .filter(isNameAndArray)\n .reduce((sum, nsp) => {\n //split by indexes in case of nested arrays\n const indices = nsp.split(/(\\[\\d+\\])/).filter((n) => n);\n const [name] = indices.splice(0, 1);\n return sum.concat(\n indices.map((index, i) => {\n return name + indices.slice(0, i + 1).join(\"\");\n }, [])\n );\n }, []);\nexport const switchArrayIndices = (nsp, replace) => {\n // normalize nsp and replace nsp\n const n = replaceAllIndices(nsp);\n const r = replaceAllIndices(replace);\n // match the normalized namespaces\n if (n.substr(0, r.length) === r) {\n // create new namespace by concatenating\n const n = nsp.split(\".\");\n const r = replace.split(\".\");\n n.splice(...[0, r.length, ...r]);\n return n.join(\".\");\n } else return nsp;\n};\n\n//separate prop names from other prop names and indices (ie. 'test.results[0][0]'...);\nexport const mapNamespace = (nsp) =>\n nsp.split(/(?:\\.|\\[|\\])/g).filter((str) => str.trim());\n\nexport const obj = function ObjectParser(obj) {\n const parser = {};\n\n const parseObject = (keys) =>\n keys.reduce(([placeholder], key) => [placeholder?.[key], placeholder, key], [obj]);\n\n parser.parse = (keys) => {\n if (Array.isArray(keys)) {\n return parseObject(keys);\n } else if (typeof keys === \"string\") {\n return parseObject(mapNamespace(keys));\n } else\n throw Error(\n \"ObjectParser.parse requires a string namespace or an array of keys a the first parameter.\"\n );\n };\n\n parser.get = (keys) => {\n if (Array.isArray(keys)) {\n return parseObject(keys)[0];\n } else if (typeof keys === \"string\") {\n return parseObject(mapNamespace(keys))[0];\n } else\n throw Error(\n \"ObjectParser.get requires a string namespace or an array of keys a the first parameter.\"\n );\n };\n\n parser.apply = (keys, newValue) => {\n if (Array.isArray(keys)) {\n const [currentValue, placeholder, key] = parseObject(keys);\n placeholder[key] = newValue;\n } else if (typeof keys === \"string\") {\n const [currentValue, placeholder, key] = parseObject(mapNamespace(keys));\n placeholder[key] = newValue;\n } else\n throw Error(\n \"ObjectParser.apply requires a string namespace or an array of keys a the first parameter.\"\n );\n };\n parser.clone = () => JSON.parse(JSON.stringify(obj));\n\n parser.isEmpty = () => Object.getOwnPropertyNames(obj).length === 0;\n\n return parser;\n};\n\nexport const arr = function ArrayParser(arr) {\n const parser = this || {};\n\n parser.randomIndex = () => rnb(0, arr.length - 1);\n\n parser.randomItem = () => arr[parser.randomIndex()];\n return parser;\n};\n\nconst isFnRegEx = /^\\w+\\(([^,)]*(,[^,)]*)*)\\)$/;\nconst parseArgs = (str) => str.split(\",\").map((value) => value.trim());\nexport const isFunction = (str) => isFnRegEx.test(str);\nexport const isDateFunction = (str) => /^[dD]ate\\(([^,)]*(,[^,)]*)*)\\)$/.test(str);\nconst isMockFileFunction = (str) => /^mockFile\\(([^,)]*(,[^,)]*)*)\\)$/.test(str);\nconst isMockFilesFunction = (str) => /^mockFiles\\(([^,)]*(,[^,)]*)*)\\)$/.test(str);\n\nexport const strFn = (str) => {\n if (isDateFunction(str)) {\n const [fullStr, args] = str.match(isFnRegEx);\n return moment(args).toJSON();\n }\n if (isMockFileFunction(str)) {\n const [fullStr, args] = str.match(isFnRegEx);\n return createMockFile(args);\n }\n if (isMockFilesFunction(str)) {\n const [fullStr, args] = str.match(isFnRegEx);\n return parseArgs(args).map(createMockFile);\n }\n return str;\n};\n\nwindow.moment = moment;\nwindow.strFn = strFn;\n","import moment from \"moment\";\nimport {\n arr,\n obj,\n parseIndex,\n replaceLastIndex,\n switchArrayIndices,\n} from \"../../organisms/TestPanel/components/test-helpers\";\n\nexport function evaluate(value, namespace, savedEval = {}, shouldSave) {\n const type = getType(value);\n const validations = savedEval.validations || [];\n const expected_type = savedEval.expected_type || type;\n const save = shouldSave || !!savedEval.save;\n const indexed = savedEval.indexed;\n const errors = getErrors({ type, value, validations, expected_type });\n return {\n namespace,\n expected_type,\n validations,\n save,\n indexed,\n type,\n value,\n errors,\n };\n}\n\nexport function validateResults() {\n const { results, response_type, savedEvaluations, editMode } = this;\n const savedEvalClone = [...savedEvaluations];\n const shouldSave = !savedEvaluations.length;\n const evaluations = [];\n const errors = [];\n\n function getSavedIndices(data, nsp) {\n const randomIndex = () => {\n // get all matching indices and rename them\n // so they can be found later during getSavedEval\n const index = arr(data).randomIndex();\n const new_nsp = replaceLastIndex(nsp, index);\n savedEvalClone.forEach((e) => {\n if (!e.indexed) e.namespace = switchArrayIndices(e.namespace, new_nsp);\n });\n return index;\n };\n const savedIndices = savedEvalClone\n .filter(({ namespace }) => {\n return replaceLastIndex(namespace) === nsp;\n })\n .map((e) => {\n if (e.indexed) {\n return parseIndex(e.namespace);\n } else {\n return randomIndex();\n }\n });\n return savedIndices.length ? savedIndices : [randomIndex()];\n }\n const getSavedEval = (nsp) => {\n const i = savedEvalClone.findIndex(({ namespace }) => {\n return replaceLastIndex(namespace) === replaceLastIndex(nsp);\n });\n return i > -1 ? savedEvalClone.splice(i, 1)[0] : {};\n };\n const addEvaluation = (evaluation) => {\n evaluation.errors.forEach(\n (e) => evaluation.save && errors.push({ ...e, namespace: evaluation.namespace })\n );\n evaluations.push(evaluation);\n };\n\n //evaluate based on the result only in edit mode\n if (editMode)\n (function recursiveEval(data, namespace) {\n const evaluation = evaluate(data, namespace, getSavedEval(namespace), shouldSave);\n addEvaluation(evaluation);\n if (evaluation.type === \"object\") {\n Object.getOwnPropertyNames(data).forEach((prop) => {\n recursiveEval(data[prop], `${namespace}.${prop}`);\n });\n } else if (evaluation.type === \"array\") {\n const indices = getSavedIndices(data, `${namespace}[0]`);\n indices.forEach((index) => recursiveEval(data[index], `${namespace}[${index}]`));\n }\n })(results, response_type);\n\n //evaluate based on the saved evaluations\n\n // if (!editMode) {\n const objParser = new obj({ [response_type]: results });\n savedEvalClone.forEach(({ namespace, ...e }) => {\n const value = objParser.get(namespace);\n if (e.save) addEvaluation(evaluate(value, namespace, e));\n });\n // }\n\n Object.assign(this, {\n evaluations: evaluations.sort((e1, e2) => e1.namespace.localeCompare(e2.namespace)),\n errors,\n });\n}\n\nexport function getErrors({ type, value, validations, expected_type }) {\n if (type !== expected_type && expected_type !== \"mixed\")\n return [{ name: \"typeError\", expected: expected_type, received: type }];\n\n switch (type) {\n case \"number\":\n return validateNumber(value, validations);\n case \"date\":\n return validateDate(value, validations);\n case \"string\":\n return validateString(value, validations);\n case \"array\":\n return validateArray(value, validations);\n case \"boolean\":\n return validateBoolean(value, validations);\n case \"null\":\n case \"undefined\":\n default:\n return [];\n }\n}\n\nexport function getType(value) {\n switch (true) {\n case typeof value === \"object\":\n if (!value) return \"null\";\n else if (Array.isArray(value)) return \"array\";\n else return \"object\";\n case typeof value === \"string\":\n if (moment(value).isValid()) return \"date\";\n else return \"string\";\n case typeof value === \"number\":\n return \"number\";\n case typeof value === \"boolean\":\n return \"boolean\";\n case typeof value === \"undefined\":\n return \"undefined\";\n default:\n return \"?\";\n }\n}\n\nexport const defaultValue = (data_type) => {\n switch (data_type) {\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"date\":\n return moment().toJSON();\n case \"boolean\":\n return false;\n case \"array\":\n return [];\n case \"object\":\n return {};\n case \"null\":\n return null;\n case \"target\":\n return \"\";\n case \"undefined\":\n default:\n return undefined;\n }\n};\n\nconst validateLength = (item, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"lengthEquals\" && item.length !== value)\n return errors.concat({ name, expected: value, received: item.length });\n if (name === \"maxLength\" && item.length > value)\n return errors.concat({ name, expected: value, received: item.length });\n if (name === \"minLength\" && item.length < value)\n return errors.concat({ name, expected: value, received: item.length });\n return errors;\n }, []);\n\nconst validateArray = (arr, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"includes\" && !arr.includes(value))\n return errors.concat({ name, expected: value, received: arr });\n return errors;\n }, validateLength(arr, validations));\n\nconst validateString = (str, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"strEquals\" && str !== value)\n return errors.concat({ name, expected: value, received: str });\n //str.match() returns null when there is no match\n if ((name === \"isLike\") & !str.match(new RegExp(value, \"gi\")))\n return errors.concat({ name, expected: value, received: str });\n if (\n name === \"isOneOf\" &&\n typeof value === \"string\" &&\n !value\n .split(\",\")\n .map((v) => v.trim())\n .includes(str)\n )\n return errors.concat({ name, expected: value, received: str });\n return errors;\n }, validateLength(str, validations));\n\nconst validateNumber = (num, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"numEquals\" && num !== value)\n return errors.concat({ name, expected: value, received: num });\n if (name === \"max\" && num > value)\n return errors.concat({ name, expected: value, received: num });\n if (name === \"min\" && num < value)\n return errors.concat({ name, expected: value, received: num });\n if (\n name === \"isOneOf\" &&\n typeof value === \"string\" &&\n !value\n .split(\",\")\n .map((v) => parseInt(v))\n .includes(num)\n )\n return errors.concat({ name, expected: value, received: num });\n return errors;\n }, []);\n\nconst validateBoolean = (bool, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"boolEquals\" && bool !== value)\n return errors.concat({ name, expected: value, received: bool });\n return errors;\n }, []);\n\nconst validateDate = (datetime, validations) =>\n validations.reduce((errors, { name, value }) => {\n if (name === \"dateEquals\" && !moment(datetime).isSame(value))\n return errors.concat({ name, expected: value, received: datetime });\n if (name === \"maxDate\" && moment(datetime).isAfter(value))\n return errors.concat({ name, expected: value, received: datetime });\n if (name === \"minDate\" && moment(datetime).isBefore(value))\n return errors.concat({ name, expected: value, received: datetime });\n return errors;\n }, []);\n","import React, { useState } from \"react\";\nimport moment from \"moment\";\nimport ReactJson from \"react-json-view\";\nimport JsonTextBox from \"../../atoms/JsonTextBox/JsonTextBox\";\nimport ExpandableIcon from \"../../atoms/ExpandableIcon/ExpandableIcon\";\nimport TypeSelector from \"../../atoms/TypeSelector/TypeSelector\";\nimport TargetSelector from \"../TargetSelector/TargetSelector\";\nimport Toggle from \"../../atoms/Toggle/Toggle\";\nimport { getType, defaultValue } from \"../ValidationInput/validator\";\nimport \"./styles.scss\";\nconst className = \"args\";\nconst Args = ({ args, controller, testIndex, locked }) => {\n const add = () => controller.addArg(testIndex);\n\n return (\n <>\n {args.length > 0 ? (\n <div className={`${className}`}>\n {args.map((arg, i) => (\n <ArgData\n key={i}\n arg={arg}\n name={`arguments[${i}]`}\n testIndex={testIndex}\n i={i}\n controller={controller}\n locked={locked}\n />\n ))}\n </div>\n ) : (\n \"\"\n )}\n {locked ? (\n \"\"\n ) : (\n <span className={`${className}__add-btn btn`} onClick={add}>\n +\n </span>\n )}\n </>\n );\n};\nconst ArgData = ({ arg, testIndex, i, controller, locked, name }) => {\n const { input_type } = arg;\n const [isOpen, setOpen] = useState(true);\n const showData = () => {\n setOpen(!isOpen);\n };\n const inputTypeChanged = (e) => {\n arg.input_type = e.target.value;\n arg.input = defaultValue(arg.input_type);\n controller.checkTargetValues(testIndex, i, 0);\n if (arg.input_type === \"target\")\n controller.addTargetValue(testIndex, i, \"\", [\"input\"], 0);\n controller.editArg(testIndex, i, arg);\n };\n\n const deleteArg = () => {\n controller.deleteArg(testIndex, i);\n };\n\n const is12 =\n input_type === \"object\" ||\n input_type === \"array\" ||\n input_type === \"string\" ||\n input_type === \"date\" ||\n input_type === \"target\";\n return !isOpen ? (\n <div className={`${className}__name-display`}>\n <ArgName name={name} isOpen={isOpen} showData={showData} />\n </div>\n ) : (\n <div className={`${className}__data container`} key={i}>\n <div className={`row no-gutters justify-content-start align-items-center`}>\n <div className={`col`}>\n <div className={`${className}__from-container`}>\n <ArgName name={name} isOpen={isOpen} showData={showData} />\n </div>\n </div>\n <div className={`col`}>\n <div className={`${className}__type`}>\n <TypeSelector default_type={input_type} onSelect={inputTypeChanged} />\n </div>\n </div>\n <div className={`col${!is12 ? -0 : \"\"}`}></div>\n <div className={`col${is12 ? -12 : \"\"}`}>\n <ArgDataForm\n arg={arg}\n i={i}\n testIndex={testIndex}\n controller={controller}\n is12={is12}\n />\n </div>\n </div>\n {locked ? (\n \"\"\n ) : (\n <span\n className={`${className}__data__delete-btn btn delete-btn`}\n onClick={deleteArg}\n >\n x\n </span>\n )}\n </div>\n );\n};\nconst ArgName = ({ name, isOpen, showData }) => {\n return (\n <div className={`${className}__name`}>\n <ExpandableIcon\n isOpen={isOpen}\n ClassName={`${className}__expand-btn`}\n onClick={showData}\n color=\"#556c82\"\n />{\" \"}\n <span className={`${className}__name__text`}>{name + \"\"}</span>\n </div>\n );\n};\nconst ArgDataForm = ({ arg, testIndex, i, controller, is12 }) => {\n const { input, input_type, targetValues } = arg;\n const [jsonBoxVisible, setJsonBoxVisible] = useState(false);\n const showJsonTxb = () => setJsonBoxVisible(true);\n const hideJsonTxb = () => setJsonBoxVisible(false);\n const inputChanged = (e) => {\n if (e.target.type === \"number\") arg.input = parseInt(e.target.value);\n else if (e.target.type === \"checkbox\") arg.input = e.target.checked;\n else arg.input = e.target.value;\n controller.editArg(testIndex, i, arg);\n };\n const jsonTextboxSubmit = (new_object) => {\n arg.input = new_object;\n controller.editArg(testIndex, i, arg);\n controller.checkTargetValues(testIndex, i);\n hideJsonTxb();\n };\n const jsonObjectSubmit = ({ updated_src, namespace, name, new_value }) => {\n jsonTextboxSubmit(updated_src || {});\n const source_map = namespace;\n source_map.push(name);\n source_map.unshift(\"input\");\n if (typeof new_value === \"string\")\n controller.parseTargetValues(testIndex, i, new_value, source_map);\n else controller.checkTargetValues(testIndex, i);\n };\n\n const adjustSize = (e) => {\n const new_lines = e.target.value.length / 38;\n const new_height = Math.min(33 + new_lines * 18, 320);\n e.target.style.height = `${new_height}px`;\n };\n\n const textboxChanged = (e) => {\n //adjustSize(e);\n inputChanged(e);\n controller.parseTargetValues(testIndex, i, e.target.value, [\"input\"]);\n };\n return (\n <div className={`${className}__form ${is12 ? className + \"__form--is12\" : \"\"}`}>\n {input_type === \"undefined\" || input_type === \"null\" ? (\n <span className={`${className}__form__${input_type}`}>{input + \"\"}</span>\n ) : input_type === \"string\" ? (\n <div className={`textbox`}>\n <textarea\n className={`${className}__form__input ${className}__form__input--${input_type}`}\n value={input}\n onChange={textboxChanged}\n onFocus={adjustSize}\n />\n <ArgValue value={arg.value()} hide={!targetValues.length} />\n </div>\n ) : input_type === \"number\" ? (\n <div className={`textbox`}>\n <input\n className={`${className}__form__input ${className}__form__input--${input_type}`}\n type={input_type}\n name=\"arg-input\"\n autoComplete=\"off\"\n value={input}\n onChange={inputChanged}\n />\n </div>\n ) : input_type === \"boolean\" ? (\n <div className=\"row justify-content-around\">\n <Toggle isChecked={input} onChange={inputChanged} round={true} />{\" \"}\n <span\n className={`${className}__form__value--boolean ${className}__form__value--boolean--${input}`}\n >\n {(input === true) + \"\"}\n </span>\n </div>\n ) : input_type === \"date\" ? (\n <input\n className={`${className}__form__input ${className}__form__input--${input_type}`}\n type={\"datetime-local\"}\n name=\"arg-input\"\n autoComplete=\"off\"\n value={input}\n onChange={inputChanged}\n />\n ) : input_type === \"object\" || input_type === \"array\" ? (\n <span className={`${className}__form__${input_type}`}>\n <div\n className={`${className}__json-txb ${className}__json-txb--show-${jsonBoxVisible}`}\n >\n <JsonTextBox\n onSubmit={jsonTextboxSubmit}\n onCancel={hideJsonTxb}\n obj={input}\n />\n </div>\n <ReactJson\n src={input}\n name={false}\n onAdd={jsonObjectSubmit}\n onEdit={jsonObjectSubmit}\n onDelete={jsonObjectSubmit}\n displayObjectSize={false}\n displayDataTypes={false}\n collapsed={true}\n />\n <ArgValue value={arg.value()} hide={!targetValues.length} />\n <span\n className={`${className}__add-json-btn btn ${className}__json-txb--show-${!jsonBoxVisible}`}\n onClick={showJsonTxb}\n >\n +JSON\n </span>\n </span>\n ) : input_type === \"target\" ? (\n ((value) => (\n <div className={`${className}__form__${input_type}`}>\n <TargetSelector\n controller={controller}\n target_namespace={targetValues[0].target_namespace}\n testIndex={testIndex}\n arg_index={i}\n target_index={0}\n className={`${className}__form__input ${className}__form__input--${input_type}`}\n />\n <ArgValue value={value} hide={!targetValues.length} />\n </div>\n ))(arg.value())\n ) : (\n <span className={`${className}__value`}>{input + \"\"}</span>\n )}\n </div>\n );\n};\n\nexport function Argument({ value }) {\n const data_type = getType(value);\n return (\n <>\n {data_type === \"undefined\" || data_type === \"null\" ? (\n <span className={`${className}__value__${data_type}`}>{value + \"\"}</span>\n ) : data_type === \"string\" ? (\n <span className={`${className}__value__${data_type}`}>\n <span className={`${className}__quote`}>\"</span>\n {value}\n <span className={`${className}__quote`}>\"</span>\n </span>\n ) : data_type === \"number\" ? (\n <span className={`${className}__value__${data_type}`}>{value + \"\"}</span>\n ) : data_type === \"boolean\" ? (\n <span\n className={`${className}__value__${data_type} ${className}__value__${data_type}--${\n value + \"\"\n }`}\n >\n {(value === true) + \"\"}\n </span>\n ) : data_type === \"date\" ? (\n <span className={`${className}__value__${data_type}`}>\n {moment(value).format() + \"\"}\n </span>\n ) : data_type === \"object\" || data_type === \"array\" ? (\n <span className={`${className}__value__${data_type}`}>\n <ReactJson\n src={value}\n name={false}\n displayObjectSize={false}\n displayDataTypes={false}\n collapsed={true}\n />\n </span>\n ) : (\n <span className={`${className}__value__${data_type}`}>{value + \"\"}</span>\n )}\n </>\n );\n}\nconst ArgValue = (props) => {\n return (\n <div className={`${className}__value ${props.hide && className + \"__value--hide\"}`}>\n <Argument {...props} />\n </div>\n );\n};\n\nexport default Args;\n","export default __webpack_public_path__ + \"static/media/test-icon.2b1ada73.svg\";","export default __webpack_public_path__ + \"static/media/x.f680188c.svg\";","import React from \"react\";\nimport TEST_ICON from \"../../assets/test-icon.svg\";\nimport EDIT_ICON from \"../../assets/edit.png\";\nimport X_BUTTON from \"../../assets/x.svg\";\nimport \"./styles.scss\";\n\nexport default function RunTestIcon({ onClick }) {\n return (\n <img\n className=\"btn\"\n onClick={onClick}\n style={{ width: \"16px\" }}\n src={TEST_ICON}\n alt={\"Run Test\"}\n />\n );\n}\n\nexport function EditIcon({ onClick }) {\n return (\n <img\n className=\"btn\"\n style={{ width: \"16px\" }}\n src={EDIT_ICON}\n alt={\"Edit Test\"}\n onClick={onClick}\n />\n );\n}\n\nexport function XButton({ onClick }) {\n return (\n <img\n className=\"btn\"\n style={{ width: \"10px\" }}\n src={X_BUTTON}\n alt={\"Delete Test\"}\n onClick={onClick}\n />\n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAC6UlEQVRYhe2XS0zUQBiAIZp48O5F49mDXj3ogUTb0m3rSjstK8tieGiyEokYNCrG9+Oga2JAl6iBEJWAAY0EWRVEMKIIEhV5+V7RcBAuGGM0Gud3Zne76ra8ZBo8+CeTJm3m/775MzOdSUpyKDjFWMxLWh4voa2crKUahjHHKVZiJHOSdlBQ0HdeRmA28q5PULQljsPJiIMUqHvz8LnqK1DT2ALFhwOmyCgvq0sdgwsyaqGgbP8W3PtuBN5+/BpvlXUNICg68AoacUIiWViDTlM4KT1cCt3+A26281evEwE9UgnOZSxjBieTrYzCM7L9WErzgLjWA/Wt920lzEqQag3zvLqAGZyWve/9KITaH4KkrptQoqS8KjYntONM4SZgMomXo59AdKdj0r+HOXwqEuGxL+DWszDp/8oR+O8SspphkaDvY8uyzjH4eBKdg2FAmbmYbEw/BAmtYAqvvdkGmjcHQve67SXc6ZDmWY8jO6OsFk4LTvbzU7Rj1sYC3DP0wRZOAQryQcfAa8v3i/U3IntEbPbvYgq/3HwnCte80PTgieV757Mw6Jl5OAavmE34rI78P/zfhycJLnSGdvTm+MFunbf3Po8vtVtdT63wwV9wMpCiacFpkE5d0X+6DjWhZgvg0Zth2L7vKLR097GHi6I4j5PRZ0nLJKXToxKNVgm7NqOym7Fa1jiaYNOeE1BcWh2XqLrW5DycBj0c0CQHKhrgbOuLKUkwg9PgJNSbSg4Jwab+iMBkEkzhoqguIomwL39nHD6RBFN4ZPQufQNNti1QYRFIlAheqJnZbLcVkFAtTRiou2srUNr4GHIK90Z/pX/5Sx03UlJS5pKEY25PLjaBZc0DcKgyBJv3l0B6bkH8ehVrWJD0I0zgNHiXtpIm9uXvgKJj5UDngej24PidTkbfyEmojRyhdguysZwKM4PToBfJhBHS8vaTO95JTlJlnvfNZwq0CCjIT0Y4RMBV5Jm9SjYWOgpMiJ9tL1I8e9w8UAAAAABJRU5ErkJggg==\"","const string = {\n options: [\n \"Equals:\",\n \"Min Length:\",\n \"Max Length:\",\n \"Length Equals:\",\n \"Is Like:\",\n \"Is One Of:\",\n ],\n values: [\"strEquals\", \"minLength\", \"maxLength\", \"lengthEquals\", \"isLike\", \"isOneOf\"],\n inputs: [\"text\", \"number\", \"number\", \"number\", \"text\", \"text\"],\n};\nconst number = {\n options: [\"Equals:\", \"Min:\", \"Max:\", \"Is One Of:\"],\n values: [\"numEquals\", \"min\", \"max\", \"isOneOf\"],\n inputs: [\"number\", \"number\", \"number\", \"text\"],\n};\nconst array = {\n options: [\"Min Length:\", \"Max Length:\", \"Length Equals:\", \"Includes:\"],\n values: [\"minLength\", \"maxLength\", \"lengthEquals\", \"includes\"],\n inputs: [\"number\", \"number\", \"number\", \"text\"],\n};\nconst date = {\n options: [\"Equals:\", \"Min:\", \"Max:\"],\n values: [\"dateEquals\", \"minDate\", \"maxDate\"],\n inputs: [\"datetime-local\", \"datetime-local\", \"datetime-local\"],\n};\nconst boolean = { options: [\"Equals:\"], values: [\"boolEquals\"], inputs: [\"checkbox\"] };\nconst object = { options: [], values: [], inputs: [] };\nconst target = {\n options: [\n //string\n \"Equals (str):\",\n \"Min Length (str):\",\n \"Max Length (str):\",\n \"Length Equals (str):\",\n \"Is Like:\",\n \"Is One Of (str):\",\n //number\n \"Equals (num):\",\n \"Min (num):\",\n \"Max (num):\",\n \"Is One Of (num):\",\n //array\n \"Min Length (arr):\",\n \"Max Length (arr):\",\n \"Length Equals (arr):\",\n \"Includes:\",\n //date\n \"Date Equals:\",\n \"Min Date:\",\n \"Max Date:\",\n //boolean\n \"Equals (bool)\",\n ],\n values: [\n //string\n \"strEquals\",\n \"minLength\",\n \"maxLength\",\n \"lengthEquals\",\n \"isLike\",\n \"isOneOf\",\n //number\n \"numEquals\",\n \"min\",\n \"max\",\n \"isOneOf\",\n //array\n \"minLength\",\n \"maxLength\",\n \"lengthEquals\",\n \"includes\",\n //date\n \"dateEquals\",\n \"minDate\",\n \"maxDate\",\n //boolean\n \"boolEquals\",\n ],\n inputs: [\n //string\n \"text\",\n \"number\",\n \"number\",\n \"number\",\n //number\n \"text\",\n \"text\",\n \"number\",\n \"number\",\n \"number\",\n \"text\",\n //array\n \"number\",\n \"number\",\n \"number\",\n \"text\",\n //date\n \"datetime-local\",\n \"datetime-local\",\n \"datetime-local\",\n \"checkbox\",\n ],\n};\nconst options = { array, number, date, boolean, string, object, target };\nexport default options;\nexport const inputToTypes = {\n text: \"string\",\n number: \"number\",\n \"datetime-local\": \"date\",\n checkbox: \"boolean\",\n};\n","import React, { useState } from \"react\";\nimport Selector from \"../../atoms/Selector/Selector\";\nimport Toggle from \"../../atoms/Toggle/Toggle\";\nimport options from \"./ValidationOptions\";\nimport \"./styles.scss\";\n\nconst ValidationInput = ({\n type,\n name,\n value,\n className = \"\",\n onSelect,\n onInputChanged,\n}) => {\n const [inputType, setType] = useState(\n options[type].inputs[Math.max(options[type].values.indexOf(name), 0)]\n );\n\n const select = (e) => {\n const validation_type = e.target.value;\n const i = options[type].values.findIndex((v) => v === validation_type);\n setType(options[type].inputs[i]);\n\n onSelect(e.target.value);\n };\n const inputChanged = (e) => {\n if (e.target.type === \"number\") onInputChanged(parseInt(e.target.value));\n else if (e.target.type === \"checkbox\") onInputChanged(e.target.checked);\n else onInputChanged(e.target.value);\n };\n const classname = \"validation-input\";\n return (\n <div className={`validation-input ${className}`}>\n <Selector\n className={`${classname}__selector`}\n options={options[type].options}\n values={options[type].values}\n controlledOption={name}\n onSelect={select}\n />\n {type !== \"boolean\" ? (\n <input\n className={`${classname}__input`}\n type={inputType}\n name=\"validtion-input\"\n autoComplete=\"off\"\n value={value}\n onChange={inputChanged}\n />\n ) : (\n <>\n <Toggle isChecked={value} onChange={inputChanged} round={true} />{\" \"}\n <span\n className={`${classname}__value--boolean ${classname}__value--boolean--${value}`}\n >\n {(value === true) + \"\"}\n </span>\n </>\n )}\n </div>\n );\n};\n\nexport default ValidationInput;\n","import \"./styles.scss\";\nconst CLASS_NAME = \"count\";\n\nexport default function Count({ count, stat, type }) {\n return (\n <span className={`${CLASS_NAME} ${CLASS_NAME}__${type}`}>\n {count} {stat && <span className={`${CLASS_NAME}__stat`}>{stat}</span>}\n </span>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport ExpandableSection from \"../../molecules/ExpandableSection/ExpandableSection\";\nimport ValidationInput from \"../../molecules/ValidationInput/ValidationInput\";\nimport ValidationOptions, {\n inputToTypes,\n} from \"../../molecules/ValidationInput/ValidationOptions\";\nimport TypeSelector from \"../../atoms/TypeSelector/TypeSelector\";\nimport { getErrors, defaultValue } from \"../../molecules/ValidationInput/validator\";\nimport Count from \"../../atoms/Count\";\nimport { endsWithArrayIndex } from \"./components/test-helpers\";\n\nconst validationCount = (evaluations) =>\n evaluations.reduce((sum, e) => (e.save ? e.validations.length + 1 : 0) + sum, 0);\nexport default function Evaluations({ test, updateTests }) {\n const { evaluations, errors } = test;\n const [open, setOpen] = useState(false);\n const [saveAll, setSaveAll] = useState(!test.savedEvaluations.length);\n const [totalValidations, setTotalValidations] = useState(\n validationCount(test.evaluations)\n );\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n\n const updateEvaluation = (evaluation) => {\n evaluation.errors = getErrors(evaluation);\n test.addEvaluation(evaluation);\n test.errors = test.getErrors();\n updateTests();\n };\n\n const addValidation = (x) => {\n const { expected_type } = evaluations[x];\n const input_type = ValidationOptions[expected_type].inputs[0];\n evaluations[x].validations.push({\n name: ValidationOptions[expected_type].values[0],\n value: defaultValue(inputToTypes[input_type]),\n });\n updateEvaluation(evaluations[x]);\n setTotalValidations(validationCount(evaluations));\n };\n\n const deleteValidation = (x, y) => {\n evaluations[x].validations.splice(y, 1);\n updateEvaluation(evaluations[x]);\n setTotalValidations(validationCount(evaluations));\n };\n\n const updateValidations = (x, y, p, v) => {\n evaluations[x].validations[y][p] = v;\n updateEvaluation(evaluations[x]);\n };\n\n const updateExpectedType = (x, e) => {\n evaluations[x].expected_type = e.target.value;\n evaluations[x].validations = [];\n updateEvaluation(evaluations[x]);\n };\n\n const updateSaveStatus = (x, save) => {\n evaluations[x].save = save;\n updateEvaluation(evaluations[x]);\n setTotalValidations(validationCount(evaluations));\n };\n\n const toggleAllSaveStatuses = () => {\n setSaveAll(!saveAll);\n test.evaluations = test.evaluations.map((e) => ({ ...e, save: !saveAll }));\n test.errors = test.getErrors();\n updateTests();\n setTotalValidations(validationCount(evaluations));\n };\n\n useEffect(() => {\n if (test.test_end !== null) {\n updateTests(test.evaluations);\n } else {\n updateTests([]);\n }\n if (test.test_end !== null) setTotalValidations(validationCount(test.evaluations));\n }, [test.evaluations, test.test_end]);\n\n return (\n <div className={`evaluations evaluations--visible-${evaluations.length > 0}`}>\n <ExpandableSection\n open={open}\n toggleExpansion={toggleExpansion}\n title={\n <>\n <div className={`evaluations__title evaluations--error-${errors.length > 0}`}>\n <span className=\"evaluations__namespace\">\n {errors.length > 0 ? \"Test Failed: \" : \"Test Passed: \"}\n </span>\n <span\n className={`evaluations__type evaluations--error-${errors.length > 0}`}\n >\n <Count count={errors.length} type={errors.length && \"error\"} /> errors\n </span>\n <Count count={totalValidations} />{\" \"}\n <span className=\"evaluations__total\">Total</span>\n </div>\n <input\n className=\"evaluations__checkbox\"\n type=\"checkbox\"\n checked={saveAll}\n onChange={toggleAllSaveStatuses}\n />\n </>\n }\n >\n {evaluations.map(\n (\n { namespace, type, expected_type, save, errors, validations, indexed, value },\n i\n ) => {\n return (\n <EvaluationRow\n key={i}\n namespace={namespace}\n type={type}\n expected_type={expected_type}\n errors={errors}\n validations={validations}\n index={i}\n addValidation={addValidation}\n deleteValidation={deleteValidation}\n updateValidations={updateValidations}\n updateExpectedType={updateExpectedType}\n updateSaveStatus={updateSaveStatus}\n updateTests={updateTests}\n save={save}\n test={test}\n indexed={indexed}\n value={value}\n />\n );\n }\n )}\n </ExpandableSection>\n </div>\n );\n}\n\nconst EvaluationRow = ({\n namespace,\n type,\n expected_type,\n errors,\n validations,\n index,\n addValidation,\n deleteValidation,\n updateValidations,\n updateExpectedType,\n updateSaveStatus,\n updateTests,\n save,\n test,\n indexed,\n value,\n}) => {\n const calcWidth = (text = \"\") => Math.ceil(text.length / 0.12);\n const [type_width, setWidth] = useState(calcWidth(0));\n const style = { \"--type-width\": type_width + \"px\" };\n const [open, setOpen] = useState(errors.length && validations.length);\n\n const typeError = !!errors.find(({ name }) => name === \"typeError\");\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n const onSelect = (i, e) => {\n updateExpectedType(i, e);\n setWidth(calcWidth(e.target.value));\n };\n const toggleSave = () => updateSaveStatus(index, !save);\n useEffect(\n () => setWidth(calcWidth(expected_type)),\n\n [expected_type, type_width]\n );\n\n useEffect(() => {\n if (errors.length && validations.length) setOpen(true);\n }, [errors]);\n return (\n <ExpandableSection\n open={open}\n toggleExpansion={toggleExpansion}\n title={\n <>\n <div className={`evaluations__title`} style={style}>\n {endsWithArrayIndex(namespace) ? (\n <ArrayNamespace\n updateTests={updateTests}\n namespace={namespace}\n test={test}\n indexed={indexed}\n value={value}\n />\n ) : (\n <span\n className={`evaluations__namespace evaluations--error-${\n errors.length > 0\n }`}\n >\n {namespace}:{\" \"}\n </span>\n )}\n <TypeSelector\n default_type={expected_type}\n onSelect={onSelect.bind(this, index)}\n />\n <span\n className={`evaluations__type-error-msg \n evaluations__type-error-msg--${typeError} \n evaluations--error-${typeError}`}\n >\n (received {type})\n </span>\n {!!validations.length && <Count count={validations.length} />}\n </div>\n <input\n className=\"evaluations__checkbox\"\n type=\"checkbox\"\n checked={save}\n onChange={toggleSave}\n />\n </>\n }\n >\n <div className=\"evaluations__row\">\n <span\n className={`evaluations__input evaluations__input--visible-${\n expected_type !== \"object\" &&\n expected_type !== \"null\" &&\n expected_type !== \"undefined\"\n }`}\n >\n <div className=\"evaluations__add-btn-container\">\n <span\n className=\"evaluations__add-validation-btn btn\"\n onClick={addValidation.bind(this, index)}\n >\n +\n </span>\n </div>\n <div className=\"evaluations__validation-container\">\n {validations.map(({ name, value }, i) => {\n const isError = !!errors.find(({ name: errName }) => errName === name);\n return (\n <div className=\"evaluations__validation\" key={i}>\n <ValidationInput\n className={`evaluations--error-${isError} evaluations__validation__input`}\n type={expected_type}\n name={name}\n value={value}\n onSelect={updateValidations.bind(this, index, i, \"name\")}\n onInputChanged={updateValidations.bind(this, index, i, \"value\")}\n />\n <span\n className=\"evaluations__validation__delete-btn btn\"\n onClick={deleteValidation.bind(this, index, i)}\n >\n x\n </span>\n </div>\n );\n })}\n </div>\n </span>\n </div>\n </ExpandableSection>\n );\n};\n\nfunction ArrayNamespace({ namespace, errorCount, updateTests, test, indexed, value }) {\n const [name = \"\", index = \"\"] = namespace.split(/(\\[\\d+\\])$/);\n const [open, setOpen] = useState(false);\n const [isIndexed, setIsIndexed] = useState(!!indexed);\n const [testIndex, setIndex] = useState(parseInt(index.substr(1, index.length - 1)));\n\n const inputChange = (e) => setIndex(parseInt(e.target.value));\n const add = () => {\n // push ensures that the evaluation namespace is add and not overwritten\n test.savedEvaluations.push({\n namespace: `${name}[${testIndex + 1}]`,\n save: true,\n indexed: true,\n });\n\n if (!indexed)\n //add the current index because the test will only use the one\n //saved index, but we need the current index to stay as well\n test.addSavedIndices(namespace, `${name}[${testIndex}]`);\n\n test.validate();\n updateTests();\n setOpen(false);\n };\n const show = () => setOpen(true);\n\n const hide = () => {\n test.removeSavedIndices(namespace);\n if (isIndexed) {\n test.addSavedIndices(namespace, `${name}[${testIndex}]`);\n } else {\n const e = test.evaluations.find((e) => e.namespace === namespace);\n if (e) {\n e.indexed = false;\n e.expected_type = undefined;\n test.addEvaluation(e);\n }\n }\n test.validate();\n updateTests();\n setOpen(false);\n };\n const handleCheck = (e) => setIsIndexed(e.target.checked);\n\n useEffect(() => setIsIndexed(!!indexed), [indexed]);\n useEffect(() => {\n const [name = \"\", index = \"\"] = namespace.split(/(\\[\\d+\\])$/);\n setIndex(parseInt(index.substr(1, index.length - 1)));\n }, [namespace]);\n\n return (\n <span className={`evaluations__namespace evaluations--error-${errorCount > 0}`}>\n <span>{name}</span>\n {!open ? (\n <span\n onClick={show}\n className={`evaluations__index-button btn evaluations__index-button--indexed-${isIndexed}`}\n >\n {index}\n </span>\n ) : (\n <span className={`evaluations__index-button`}>\n <span className=\"evaluations__brackets\">{\"[\"}</span>\n {isIndexed ? (\n <input\n className=\"evaluations__index-input\"\n type={\"number\"}\n onChange={inputChange}\n min={0}\n //max={value.length}\n value={testIndex}\n />\n ) : (\n <span className=\"evaluations__random\">random</span>\n )}\n <input\n className=\"evaluations__index-checkbox\"\n checked={isIndexed}\n onChange={handleCheck}\n type={\"checkbox\"}\n />\n <span onClick={add} className=\"evaluations__add-index-btn btn\">\n +\n </span>\n <span className=\"evaluations__brackets\">{\"]\"}</span>\n <span onClick={hide} className=\"evaluations__clear-error btn\">\n ×\n </span>\n </span>\n )}\n :{\" \"}\n </span>\n );\n}\n","export default __webpack_public_path__ + \"static/media/eval-icon.c95744a8.svg\";","import React, { useContext, useEffect, useState } from \"react\";\nimport AutoCompleteBox from \"../../molecules/AutoCompleteBox/AutoCompleteBox\";\nimport Args, { Argument } from \"../../molecules/Args/Args\";\nimport ServiceContext from \"../../ServiceContext\";\nimport \"./styles.scss\";\nimport RunTestIcon from \"../../atoms/RunTestIcon\";\nimport Evaluations from \"../TestPanel/Evaluations\";\nimport EVAL_ICON from \"../../assets/eval-icon.svg\";\n\nconst ScratchPad = ({\n TestController,\n test,\n testIndex = 0,\n dynamic = false,\n staticArguments = false,\n}) => {\n const placeholder = \"service.module.method \";\n const { projectCode, serviceId, moduleName, methodName } = test.namespace;\n const [nsp, setNsp] = useState(\n methodName ? `${serviceId}.${moduleName}.${methodName}` : \"\"\n );\n const [text_length, setLength] = useState(placeholder.length + 0.4);\n const [test_suggestions, setSuggestions] = useState([]);\n const { connectedServices } = useContext(ServiceContext);\n const [testResults, setTestResults] = useState(test.results);\n\n const runTest = async () => {\n TestController.runTest(testIndex);\n };\n const createSuggestions = () => {\n const new_suggestions = [];\n connectedServices.forEach((service) => {\n service.system.connectionData.modules.forEach((mod) => {\n mod.methods.forEach((method) => {\n new_suggestions.push(`${service.serviceId}.${mod.name}.${method.fn}()`);\n });\n });\n });\n setSuggestions(new_suggestions);\n };\n\n const changeConnection = (namespaces) => {\n //remove open-close parentheses\n namespaces = namespaces.slice(0, -2);\n const [serviceId, moduleName, methodName] = namespaces.split(\".\");\n TestController.updateNamespace(testIndex, { serviceId, moduleName, methodName });\n };\n\n const clearResponse = () => {\n TestController.resetResults(testIndex);\n };\n const resetLength = () => setLength(placeholder.length + 0.4);\n\n const toggleValidationStatus = () => {\n TestController.updateValidationStatus(testIndex);\n };\n useEffect(() => {\n setTestResults(test.results);\n }, [test.results]);\n useEffect(() => createSuggestions(), [projectCode, connectedServices]);\n useEffect(() => {\n const new_namespace = methodName ? `${serviceId}.${moduleName}.${methodName}` : \"\";\n setNsp(new_namespace);\n setLength((new_namespace || placeholder).length + 0.4);\n }, [test.namespace, connectedServices]);\n\n const style = { \"--text-length\": text_length ? text_length + \"ch\" : \"auto\" };\n return (\n <div className=\"scratchpad\" style={style}>\n <div className=\"scratchpad__test-data-container\">\n <div className=\"scratchpad__btn-container\">\n <span className=\"scratchpad__run-test-btn btn\" onClick={runTest}>\n <RunTestIcon />\n </span>\n </div>\n <div className=\"scratchpad__test-data\">\n <AutoCompleteBox\n className=\"scratchpad__test-method-input\"\n suggestions={test_suggestions}\n onSubmit={changeConnection}\n value={`${nsp}`}\n disabled={!dynamic}\n placeholder={placeholder}\n onBlur={resetLength}\n />\n <span className=\"scratchpad__test-data__parentheses\">{\"(\"}</span>\n <Args\n args={test.args}\n controller={TestController}\n testIndex={testIndex}\n locked={staticArguments}\n />\n <span className=\"scratchpad__test-data__parentheses\">{\")\"}</span>\n </div>\n <div\n className={`scratchpad__response-data scratchpad__response-data--visible-${\n test.test_end !== null\n }`}\n >\n <span\n onClick={clearResponse}\n className={`scratchpad__response-data__clear-btn btn`}\n >\n x\n </span>\n <span onClick={toggleValidationStatus} className={`scratchpad__eval-btn btn`}>\n {test.shouldValidate ? (\n <img style={{ width: 12 }} src={EVAL_ICON} alt=\"eval\" />\n ) : (\n \" + \"\n )}\n </span>\n\n <div className=\"scratchpad__response-value\">\n <span className={`scratchpad__response-type`}>{test.response_type}:</span>\n <Argument value={testResults} />\n </div>\n </div>\n <Evaluations\n updateTests={TestController.updateTests.bind({}, testIndex)}\n test={test}\n />\n </div>\n </div>\n );\n};\n\nexport default ScratchPad;\n","import React, { useEffect, useState } from \"react\";\nimport ExpandableSection from \"../../molecules/ExpandableSection/ExpandableSection\";\nimport TestCaption from \"../../molecules/TestCaption/TestCaption\";\nimport ScratchPad from \"../ScratchPad/ScratchPad\";\n\nimport \"./styles.scss\";\n\nconst TestContainer = ({\n open: _open,\n title,\n children,\n dynamic,\n TestController,\n test,\n testIndex,\n title_color,\n staticArguments,\n multiTest,\n}) => {\n const className = \"test-container\";\n const [open, setOpen] = useState(_open);\n\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n const deleteTest = () => {\n TestController.deleteTest(testIndex);\n };\n\n const updateTitle = (text) => {\n TestController.updateTitle(testIndex, text);\n };\n useEffect(() => {}, [test.title]);\n return (\n <section className={className}>\n <ExpandableSection\n toggleExpansion={toggleExpansion}\n open={open}\n title_color={title_color || \"#0d8065\"}\n title={\n <>\n <TestCaption\n onChange={updateTitle}\n caption={<b>{title}</b>}\n useInput={true}\n title={test.title || \"\"}\n />\n {multiTest && (\n <span\n className={`${className}__delete-btn btn delete-btn`}\n onClick={deleteTest}\n >\n x\n </span>\n )}\n </>\n }\n >\n <ScratchPad\n TestController={TestController}\n test={test}\n testIndex={testIndex}\n dynamic={dynamic}\n staticArguments={staticArguments}\n />\n {children}\n </ExpandableSection>\n </section>\n );\n};\n\nexport default TestContainer;\n","import {\n isTargetValueFn,\n isTargetNamespace,\n targetValueFnRegex,\n obj,\n isEqualArrays,\n isFunction,\n strFn,\n} from \"./test-helpers\";\n\nexport function TargetValue(target_namespace, source_map = [], source_index = 0) {\n this.target_namespace = target_namespace;\n this.source_map = source_map;\n this.source_index = source_index;\n}\nexport default function Argument(\n name,\n FullTest,\n input_type = \"object\",\n input = {},\n targetValues = []\n) {\n this.name = \"argument:\";\n this.input = input;\n this.input_type = input_type;\n this.data_type = \"\";\n this.targetValues = targetValues;\n\n this.value = () => {\n return this.targetValues.reduce((arg, { source_map, target_namespace: nsp }) => {\n const [value, placeholder, key] = obj(arg).parse(source_map);\n\n if (isTargetValueFn(nsp)) {\n placeholder[key] = value\n .trim()\n .replace(nsp, getTargetValue(nsp.substring(3, nsp.length - 1)));\n } else if (isTargetNamespace(nsp)) {\n placeholder[key] = getTargetValue(nsp);\n } else {\n placeholder[key] = strFn(nsp);\n }\n\n return arg;\n //creating a deep copy in order to lose refs to original\n }, obj(this).clone()).input;\n };\n\n this.parseTargetValues = (input, source_map) => {\n //extract one or more target replacer text from string (i.e. \"tv(beforeTest.Action1.error)\")\n Array.from(input.matchAll(targetValueFnRegex)).forEach((match) => {\n this.addTargetValue(match[0], source_map, match.index);\n });\n if (isTargetNamespace(input) || isFunction(input))\n this.addTargetValue(input, source_map, 0);\n\n return this;\n };\n\n this.checkTargetNamespaces = () => {\n // check target namespaces against current input for deletion\n //keep if the target value string still exist on this.input...\n this.targetValues = this.targetValues.filter(\n ({ target_namespace, source_map, source_index }) => {\n const value = obj(this).get(source_map);\n return (\n typeof value === \"string\" &&\n value.indexOf(target_namespace, source_index) === source_index\n );\n }\n );\n return this;\n };\n\n this.addTargetValue = (target_namespace, source_map = [], source_index) => {\n //check to see if target value already exists first\n this.targetValues.findIndex(\n (tv) =>\n tv.target_namespace === target_namespace &&\n isEqualArrays(tv.source_map, source_map) &&\n tv.source_index === source_index\n ) === -1 &&\n this.targetValues.push(new TargetValue(target_namespace, source_map, source_index));\n return this;\n };\n\n const getTargetValue = (input) => {\n const [test, action] = input.split(\".\");\n const nsp = input\n .replace(test, { beforeTest: 0, mainTest: 1, Events: 2, afterTest: 3 }[test])\n .replace(action, parseInt(action.replace(\"Action\", \"\")) - 1)\n .replace(\"error\", \"results\");\n return obj(FullTest).get(nsp);\n };\n}\n","import React, { useState } from \"react\";\nimport ExpandableSection from \"../../molecules/ExpandableSection/ExpandableSection\";\nimport TestCaption from \"../../molecules/TestCaption/TestCaption\";\nimport TestContainer from \"../TestContainer/TestContainer\";\nimport Argument from \"../TestPanel/components/Argument.class\";\n\nimport \"./styles.scss\";\nimport Count from \"../../atoms/Count\";\n\nconst MultiTestSection = ({\n caption,\n TestController,\n TestSection,\n dynamic,\n namespace,\n arg = {},\n staticArguments,\n}) => {\n const className = \"multi-test-section\";\n const [open, setOpen] = useState(false);\n\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n\n const addTest = () => {\n TestController.addTest(\n namespace,\n arg.name && [new Argument(arg.name, arg.FullTest, arg.input_type)]\n );\n TestSection.length === 1 && setOpen(true);\n };\n return (\n <section className={className}>\n <ExpandableSection\n toggleExpansion={toggleExpansion}\n open={open}\n title={\n <>\n <TestCaption\n caption={\n <span>\n {caption}{\" \"}\n {TestSection.length > 0 && <Count count={TestSection.length} />}\n </span>\n }\n />\n <AddButton onClick={addTest} className={className} />\n </>\n }\n title_color=\"#0d8065\"\n >\n <div className={`${className}__test-data`}>\n {TestSection.length > 0 ? (\n TestSection.map((test, i) => (\n <TestContainer\n key={i}\n TestController={TestController}\n test={test}\n testIndex={i}\n title={`${i + 1}:`}\n title_color={\"#4b53b3\"}\n dynamic={dynamic}\n open={true}\n staticArguments={staticArguments}\n multiTest\n />\n ))\n ) : (\n <span>no actions</span>\n )}\n </div>\n </ExpandableSection>\n </section>\n );\n};\n\nconst AddButton = ({ onClick, className }) => {\n return (\n <span className={`${className}__add-btn btn`} onClick={onClick}>\n +\n </span>\n );\n};\nexport default MultiTestSection;\n","import React from \"react\";\nimport MultiTestSection from \"../../MultiTestSection/MultiTestSection\";\nimport \"./styles.scss\";\n\nconst BeforeTest = ({ TestSection, TestController }) => {\n return (\n <MultiTestSection\n dynamic={true}\n TestSection={TestSection}\n TestController={TestController}\n caption=\"Before\"\n />\n );\n};\n\nexport default BeforeTest;\n","import React from \"react\";\nimport MultiTestSection from \"../../MultiTestSection/MultiTestSection\";\nimport \"./styles.scss\";\n\nconst AfterTest = ({ TestSection, TestController }) => {\n return (\n <MultiTestSection\n dynamic={true}\n TestSection={TestSection}\n TestController={TestController}\n caption=\"After\"\n />\n );\n};\n\nexport default AfterTest;\n","import React from \"react\";\nimport TestContainer from \"../../TestContainer/TestContainer\";\n\nimport \"./styles.scss\";\n\nconst MainTest = ({ TestController, TestSection }) => {\n return (\n <section className=\"current-data-section\">\n <TestContainer\n title=\"Main:\"\n open={true}\n test={TestSection[0]}\n testIndex={0}\n TestController={TestController}\n />\n </section>\n );\n};\n\nexport default MainTest;\n","import React from \"react\";\nimport MultiTestSection from \"../../MultiTestSection/MultiTestSection\";\nimport \"./styles.scss\";\n\nconst EventsTest = ({ TestSection, TestController, namespace, FullTest, connection }) => {\n return (\n <MultiTestSection\n dynamic={false}\n TestSection={TestSection}\n TestController={TestController}\n namespace={namespace}\n arg={{ name: \"event_name\", input_type: \"string\", FullTest }}\n caption=\"Events\"\n staticArguments={true}\n />\n );\n};\n\nexport default EventsTest;\n","import { validateResults } from \"../../../molecules/ValidationInput/validator\";\nimport { Client } from \"systemlynx\";\nimport moment from \"moment\";\nimport { getArrayNamespaces, getLastArrayNamespace, obj } from \"./test-helpers\";\n\nexport default function Test({\n namespace,\n args,\n title,\n shouldValidate = false,\n savedEvaluations = [],\n index,\n editMode = true,\n}) {\n const logger = new TestLogger(this);\n this.index = index;\n this.connection = {};\n this.title = title;\n this.args = args || [];\n this.editMode = editMode;\n this.shouldValidate = shouldValidate || !!savedEvaluations.length;\n this.namespace = namespace || {\n serviceId: \"\",\n moduleName: \"\",\n methodName: \"\",\n };\n this.clearResults = () => {\n this.results = null;\n this.response_type = \"\";\n this.test_start = null;\n this.test_end = null;\n this.evaluations = [];\n this.savedEvaluations = obj(savedEvaluations).clone();\n this.errors = [];\n return this;\n };\n\n this.clearResults();\n\n this.getErrors = () => {\n this.errors = this.evaluations\n .filter(({ save }) => save)\n .reduce(\n (sum, { errors, namespace }) =>\n sum.concat(errors.map((e) => ({ ...e, namespace }))),\n []\n );\n return this.errors;\n };\n\n this.validate = validateResults.bind(this);\n\n this.runTest = async () => {\n const { serviceId, moduleName, methodName } = this.namespace;\n const args = this.args.map((arg) => arg.value());\n\n this.test_start = moment().toJSON();\n const Module = this.connection[serviceId][moduleName];\n if (methodName === \"on\") {\n const eventTest = (e) => {\n this.results = e;\n this.test_end = moment().toJSON();\n this.response_type = \"event\";\n this.shouldValidate && this.validate();\n logger.end();\n Module.$clearEvent(args[0], eventTest);\n };\n logger.start(args);\n Module.on(args[0], eventTest);\n } else {\n try {\n logger.start(args);\n this.results = await Module[methodName](...args);\n this.test_end = moment().toJSON();\n this.response_type = \"results\";\n this.shouldValidate && this.validate();\n logger.end();\n } catch (error) {\n this.test_end = moment().toJSON();\n this.results = error;\n this.response_type = \"error\";\n this.shouldValidate && this.validate();\n logger.end();\n }\n }\n return this;\n };\n\n this.getConnection = (connectedServices) => {\n const { serviceId } = this.namespace;\n\n if (connectedServices.length > 0) {\n const service = connectedServices.find(\n (service) => service.serviceId === serviceId\n );\n if (!service) {\n console.warn(\"connection data not found\");\n return this;\n }\n const { connectionData } = service.system;\n\n this.connection[serviceId] = Client.createService(connectionData);\n }\n\n return this;\n };\n\n this.addEvaluation = (evaluation) => {\n const savedEval = this.savedEvaluations.find(\n ({ namespace }) => namespace === evaluation.namespace\n );\n if (savedEval) Object.assign(savedEval, evaluation);\n else this.savedEvaluations.push(evaluation);\n };\n this.removeEvaluation = (namespace) => {\n const index = this.savedEvaluations.findIndex((e) => e.namespace === namespace);\n if (index > -1) return this.savedEvaluations.splice(index, 1)[0];\n else return {};\n };\n\n this.addSavedIndices = (arrayNamespace, newArrayNamespace) => {\n //break namespace into multiple array namespaces\n const nspList = getArrayNamespaces(arrayNamespace);\n this.evaluations.forEach((e) => {\n if (nspList.includes(getLastArrayNamespace(e.namespace))) {\n e.namespace = e.namespace.replace(arrayNamespace, newArrayNamespace);\n e.indexed = true;\n e.expected_type = undefined;\n this.addEvaluation(e);\n }\n });\n };\n this.removeSavedIndices = (namespace) => {\n this.savedEvaluations = this.savedEvaluations.filter(\n (e) => !e.namespace.includes(namespace) //|| !e.indexed\n );\n };\n}\n\nfunction TestLogger(test) {\n this.start = (args) => {\n const { serviceId, moduleName, methodName } = test.namespace;\n\n console.log(\n `[${moment(this.test_start).format(\n \"L LTS\"\n )}]> [invoking]:${serviceId}.${moduleName}.${methodName}()`\n );\n console.log.apply({}, [\"args:\"].concat(args));\n };\n this.end = () => {\n const { serviceId, moduleName, methodName } = test.namespace;\n const { results, response_type } = test;\n console.log(\n `[${moment(this.test_end).format(\n \"L LTS\"\n )}]> [${response_type}]:${serviceId}.${moduleName}.${methodName}()`,\n `${response_type}:`,\n results\n );\n };\n}\n","import { getType } from \"../../../molecules/ValidationInput/validator\";\nimport Test from \"./Test.class\";\nimport Argument, { TargetValue } from \"./Argument.class\";\nexport default function TestController({\n TestSection,\n setState,\n section,\n FullTest,\n connectedServices,\n}) {\n this.runTest = async (testIndex) => {\n const test = TestSection[testIndex];\n //run only one test\n await test.runTest();\n setState([...TestSection]);\n };\n\n this.runAllTest = async () => {};\n\n this.updateNamespace = (index, namespace) => {\n TestSection[index].namespace = namespace;\n TestSection[index].getConnection(connectedServices);\n setState([...TestSection]);\n };\n this.addTest = (namespace, args, title) => {\n TestSection.push(new Test({ namespace, args, title, editMode: true }));\n setState([...TestSection]);\n if (namespace) this.updateNamespace(TestSection.length - 1, namespace);\n };\n this.deleteTest = (index) => {\n TestSection.splice(index, 1);\n setState([...TestSection]);\n };\n this.addArg = (index) => {\n const name = \"arg\" + (TestSection[0].args.length + 1);\n TestSection[index].args.push(new Argument(name, FullTest));\n setState([...TestSection]);\n };\n this.deleteArg = (index, arg_index) => {\n TestSection[index].args.splice(arg_index, 1);\n setState([...TestSection]);\n };\n this.editArg = (index, arg_index, arg) => {\n arg.data_type = getType(arg.input);\n TestSection[index].args[arg_index] = arg;\n setState([...TestSection]);\n };\n this.resetResults = (index) => {\n TestSection[index].clearResults();\n setState([...TestSection]);\n };\n\n this.addTargetValue = (\n testIndex,\n arg_index,\n target_namespace,\n source_map,\n source_index\n ) => {\n //check to see if target value already exists first\n const arg = TestSection[testIndex].args[arg_index];\n arg.addTargetValue(target_namespace, source_map, source_index);\n setState([...TestSection]);\n };\n this.setTargetValue = (\n testIndex,\n arg_index,\n target_index,\n target_namespace,\n source_map,\n source_index\n ) => {\n const arg = TestSection[testIndex].args[arg_index];\n\n arg.targetValues[target_index] = new TargetValue(\n target_namespace.trim(),\n source_map,\n source_index\n );\n setState([...TestSection]);\n };\n\n this.parseTargetValues = (testIndex, arg_index, input, source_map) => {\n const arg = TestSection[testIndex].args[arg_index];\n arg.parseTargetValues(input, source_map).checkTargetNamespaces();\n setState([...TestSection]);\n };\n this.checkTargetValues = (testIndex, arg_index) => {\n const arg = TestSection[testIndex].args[arg_index];\n arg.checkTargetNamespaces();\n setState([...TestSection]);\n };\n this.updateTitle = (testIndex, title) => {\n TestSection[testIndex].title = title;\n setState([...TestSection]);\n };\n this.updateEvaluations = (testIndex, evaluations) => {\n TestSection[testIndex].evaluations = evaluations;\n setState([...TestSection]);\n };\n this.updateTests = () => {\n setState([...TestSection]);\n };\n this.updateValidationStatus = (testIndex) => {\n if (section !== 1) {\n TestSection[testIndex].shouldValidate = !TestSection[testIndex].shouldValidate;\n if (TestSection[testIndex].shouldValidate) TestSection[testIndex].validate();\n else TestSection[testIndex].evaluations = [];\n setState([...TestSection]);\n }\n };\n this.getTargetSuggestions = (testIndex) => {\n //get target value suggestion (namespaces) for previous test including sub test\n const suggestions = [];\n const test_names = [\"beforeTest\", \"mainTest\", \"afterTest\"];\n //exclude all test sections following current section\n const targetTests = FullTest.slice(0, section + 1);\n\n targetTests.forEach((test_section, sIndex) => {\n //also exclude current test and the tests that follow from the suggestions\n const count = sIndex === section ? testIndex : test_section.length;\n for (let i = 0; i < count; i++) {\n suggestions.push(\n `${test_names[sIndex]}.${\"Action\" + (i + 1) + \".\"}${\n test_section[i].response_type || \"results\"\n }`\n );\n }\n });\n\n return suggestions;\n };\n\n return this;\n}\n","import React from \"react\";\nimport \"./styles.scss\";\nimport icon from \"../../assets/icons-save-60.png\";\nexport default function SaveIcon({ onClick }) {\n return <img className=\"save-icon\" src={icon} alt=\"Save\" />;\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAABmJLR0QA/wD/AP+gvaeTAAACxUlEQVRoge2bu08UURSHv3tnd4k8Fh/gIooS4jskULC7xmQbCxopNrGysCQWJvho1L9AK6zt1UItNKFRokbR6BAKDATFRKNC1I0I7hI1+8heC2CjRGBmM+PAZb5qinvO/L7Mzrl3ixEA0Wi0SUp5BegEalg7fBZC3FVKnTdNM2OlQMzLDgObXQ7nGkKI0WAweGRgYODrimvj8fht4Fj1llYie48TCG1ctmD88SkA7tx/4UjYckl2HgKgoqqR7I9PlqUlcz9jIntWll2NNLX1UFHViFKqNZ/PP0wkEvXLrZfMv7OBirUnC2AEa2hqO12SzuVyT6LRaMNS6+X/DOcWRrC6JA3sl1I+WkraMeELZ7q5eO6kU+1sY1XaMeHXYyO8Gn3pVLuysCItgacband7EtAN5qR7StKGYfT/OcikaZqJne1nvUvoAssNMi2G1r/415OOx+NhGYvFnn0c7vU6nyssftJKqctSCHH4V/qt19lcwwhW03iwGwAhRDLgVOMDrW0IIZxq5yihyq0Ll9scE77Ue9WpVq6i7dBaCl9Yd2wLB0K1AJ4eI8dGhv/KYgfbQysciTE90e/pH4VSloa47RrbwnXNXQBkUoMUcmnbN3SCQKiWcCRG3a6j9mvtFggZoL4lSX1L0vbNVgP+0NIdX1h3fGHdsbwtqWKBqQ99c/tv1pv9dzGl/bi5CyGtqVgWnnrfx/REf9nh3KCQS5cyWT0XWBbOpAYBCLecwKjcXkY85yn8nGT23TUyqUHLwpbf4YVj5GqRBQhU7gCwdcRdd0PLF9YdX1h3fGHd8YV1xxfWHV9Yd3xh3fGFdccX1h1fWHd8Yd1Zl8KzAIXsd4+juEc+O7NwmZbAA4Avb65rKZ3PzpAavwGAUuqe6Ojo2GcYxnNgk7fRXOcb0C6HhobGi8VimxDiFmDpc7Y1RkYpdRNoN01z8jdt+MmCQb8hrgAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/check.c17549c7.svg\";","export default __webpack_public_path__ + \"static/media/error.1d9e99c1.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAIRlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABCgAwAEAAAAAQAAABAAAAAAx28c8QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KGV7hBwAAAN5JREFUOBHdUb0OAUEQnlm3rURC4hU0GqHTUXDINTwkyTWciwSFVjQUHkIhUdq7GzuSlSU52ZZpdma++b75WYCfN3TZwA+DNSEUSUk/nswuNkfYQZ7PZF3YRC9Z96bjil3nJABKjgDoLJDqBalif+GXjIjTClzcn46rQt63AFjT4YGk6kaD6OoxOAiDHSC02c83paFXv4a+x0onWs8VCLMXki/wjggg4owzcTgfllPlbfgOGeGREq/DP+J0RJuMBCdD5gmeN2Dnm6VJYfnZ2dQ7TaC73jKAvd3ZCPzB+wCMN1SA1tt9JwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/loading.10ca842f.gif\";","import moment from \"moment/moment\";\n\nconst vowels = [\"a\", \"e\", \"i\", \"o\", \"u\"];\nconst isVowel = (str) => vowels.includes((str + \"\").toLowerCase());\nconst an = (word) =>\n word + \"\" === \"undefined\" ? \"\" : isVowel((word + \"\")[0]) ? \"an\" : \"a\";\nconst className = \"error-message\";\n\nexport default function ValidationMessage({\n name,\n namespace,\n expected,\n error = true,\n received,\n}) {\n const PRETEXT = error ? \"Expected\" : \"Expecting\";\n return (\n <div className={`${className}`}>\n {ErrorMessages[name](namespace, expected, PRETEXT, error && received)}\n </div>\n );\n}\n\nconst typeError = (namespace, expected, pretext, received, amendment) => {\n return (\n <div className={`${className}__message`}>\n {pretext} <span className={`${className}__namespace`}>{namespace}</span> to be{\" \"}\n {an(expected)} <span className={`${className}__expected`}>{expected} </span>\n {received && (\n <span>\n (but received {an(received)} {received})\n </span>\n )}\n {amendment && amendment}\n </div>\n );\n};\nconst lengthEquals = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a\n length of <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst maxLength = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a\n maximum length of <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst minLength = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to have a\n minimum length of <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst includes = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to include\n the following value: <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst isLike = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be like\n the following expression: <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst isOneOf = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be one of\n the following values: <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst strEquals = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to equal{\" \"}\n <span className={`${className}__expected`}>\"{expected}\"</span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst numEquals = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to equal{\" \"}\n <span className={`${className}__expected`}>{parseInt(expected)} </span>\n {received && <span>, but received {received}</span>}\n </div>\n);\nconst max = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message-container`}>\n {typeError(\n namespace,\n \"number\",\n PRETEXT,\n undefined,\n <span>\n less than <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </span>\n )}\n </div>\n);\nconst min = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message-container`}>\n {typeError(\n namespace,\n \"number\",\n PRETEXT,\n undefined,\n <span>\n greater than <span className={`${className}__expected`}>{expected}</span>\n {received && <span>, but received {received}</span>}\n </span>\n )}\n </div>\n);\nconst boolEquals = (namespace, expected, PRETEXT, received) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be{\" \"}\n {expected.toString()} {received && <span>, but received {received}</span>}\n </div>\n);\nconst dateEquals = (namespace, expected, PRETEXT) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be\n {moment(expected).format(\"L LTS\")}\n </div>\n);\nconst minDate = (namespace, expected, PRETEXT) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be a\n date/time later than <span className={`${className}__expected`}>{expected}</span>\n </div>\n);\nconst maxDate = (namespace, expected, PRETEXT) => (\n <div className={`${className}__message`}>\n {PRETEXT} <span className={`${className}__namespace`}>{namespace}</span> to be a\n date/time earlier than <span className={`${className}__expected`}>{expected}</span>\n </div>\n);\nexport const ErrorMessages = {\n typeError,\n lengthEquals,\n maxLength,\n minLength,\n includes,\n isLike,\n isOneOf,\n strEquals,\n numEquals,\n max,\n min,\n boolEquals,\n dateEquals,\n minDate,\n maxDate,\n};\n","import React, { useEffect, useState } from \"react\";\nimport Count from \"../../atoms/Count\";\nimport TestCaption from \"../TestCaption/TestCaption\";\nimport CHECK from \"../../assets/check.svg\";\nimport ERROR from \"../../assets/error.svg\";\nimport ARROW from \"../../assets/arrow.png\";\nimport LOADING from \"../../assets/loading.gif\";\nimport \"./styles.scss\";\nimport ExpandIcon from \"../../atoms/ExpandableIcon/ExpandableIcon\";\nimport { Argument } from \"../Args/Args\";\nimport ValidationMessage from \"../ValidationInput/ValidationMessages\";\n\nconst CLASS_NAME = \"test-summary\";\nexport default function TestSummary({ testSection = [], section, isTesting }) {\n const [open, setOpen] = useState(false);\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n\n const validationCount = testSection.reduce((sum, test) => {\n test.totalValidations = test.savedEvaluations.reduce(\n (sum, { type, expected_type, namespace, validations }) => {\n sum.push({\n name: \"typeError\",\n expected: expected_type,\n received: type,\n namespace,\n });\n\n return sum.concat(\n validations.map(({ name, value }) => ({ name, expected: value, namespace }))\n );\n },\n []\n );\n\n return (sum += test.totalValidations.length);\n }, 0);\n\n const errorCount = testSection.reduce((sum, { errors }) => (sum += errors.length), 0);\n\n useEffect(() => {\n setOpen(true);\n }, [isTesting]);\n return (\n <section className={`${CLASS_NAME}`}>\n <div className={`${CLASS_NAME}__header`}>\n <ExpandIcon color=\"#0d8065\" isOpen={open} onClick={toggleExpansion} />\n\n <TestCaption\n caption={\n <div className={`${CLASS_NAME}__caption--${section}`}>\n <span>{section + \" Test\"}:</span>\n <span>\n <Count count={testSection.length} stat=\"actions\" />\n <Count\n count={validationCount}\n stat=\"validations\"\n type={!!validationCount && \"caution\"}\n />\n </span>\n <span>\n <Count count={errorCount} stat=\"errors\" type={!!errorCount && \"error\"} />\n </span>\n </div>\n }\n />\n </div>\n {open && (\n <div>\n {testSection.map((test, i) => (\n <Test key={i} {...test} />\n ))}\n </div>\n )}\n </section>\n );\n}\nfunction Test({\n title,\n errors = [],\n namespace,\n args,\n results,\n test_end,\n test_start,\n response_type,\n totalValidations,\n}) {\n const filterPassingValidations = (tv) =>\n tv.filter(\n (v) => !errors.find((e) => e.namespace === v.namespace && e.name === v.name)\n );\n\n const [open, setOpen] = useState(false);\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n\n return (\n <div>\n <div className={`${CLASS_NAME}__actions`}>\n <span className={`${CLASS_NAME}__action-text`}>\n <ExpandIcon color=\"black\" onClick={toggleExpansion} isOpen={open} /> {title}\n </span>\n {!!test_start && !test_end && (\n <img src={LOADING} alt=\"check\" style={{ width: \"18px\" }} />\n )}\n {/* <img src={LOADING} alt=\"check\" style={{ width: \"18px\" }} /> */}\n\n {!!test_end && (\n <>\n {errors.length ? (\n <img src={ERROR} alt=\"check\" style={{ width: \"18px\" }} />\n ) : (\n <img src={CHECK} alt=\"check\" style={{ width: \"18px\" }} />\n )}\n </>\n )}\n </div>\n {open && (\n <>\n <TestMethod namespace={namespace} args={args} />\n {!!test_end && (\n <>\n <TestResponse results={results} response_type={response_type} />\n {!!errors.length && (\n <TestValidations title={\"failing validations\"} validations={errors} />\n )}\n </>\n )}\n\n <TestValidations\n title={`${!test_end ? \"total\" : \"passing\"} validations`}\n validations={filterPassingValidations(totalValidations)}\n isError={false}\n />\n </>\n )}\n </div>\n );\n}\n\nfunction TestMethod({ namespace, args }) {\n const { serviceId, moduleName, methodName } = namespace;\n return (\n <div className={`${CLASS_NAME}__method`}>\n <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt=\"arrow\" />\n <span\n className={`${CLASS_NAME}__namespace`}\n >{`${serviceId}.${moduleName}.${methodName}`}</span>\n <span className={`${CLASS_NAME}__parentheses`}>(</span>\n {args.map(({ data_type, value, targetValues }, i) => (\n <React.Fragment key={i}>\n <span className={`${CLASS_NAME}__parameter`}>\n {!!targetValues.length && \"tv:\"}\n <Argument value={value()} data_type={data_type} />\n </span>\n {i < args.length - 1 && <span className={`${CLASS_NAME}__comma`}>,</span>}\n </React.Fragment>\n ))}\n <span className={`${CLASS_NAME}__parentheses`}>)</span>\n </div>\n );\n}\n\nfunction TestResponse({ results = mock, response_type = \"results\" }) {\n return (\n <div className={`${CLASS_NAME}__method`}>\n <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt=\"arrow\" />\n <span className={`${CLASS_NAME}__results`}>{response_type}:</span>\n <Argument value={results} />\n </div>\n );\n}\n\nfunction TestValidations({ validations = [], isError = true, title }) {\n // const color = ;\n const color = isError ? \"#f44336\" : \"#2aa198\";\n const [open, setOpen] = useState(isError);\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n\n return (\n <div>\n <div className={`${CLASS_NAME}__method ${CLASS_NAME}__validations`}>\n <img className={`${CLASS_NAME}__arrow`} src={ARROW} alt=\"arrow\" />\n <span style={{ color }} className={`${CLASS_NAME}__results`}>\n {validations.length} {title}:\n </span>\n <ExpandIcon onClick={toggleExpansion} isOpen={open} color={\"#2aa198\"} size={10} />\n </div>\n {open && (\n <>\n {validations.map((error, i) => {\n return <ValidationMessage key={i} {...error} error={isError} />;\n })}\n </>\n )}\n </div>\n );\n}\n\nconst mock = {\n host: \"localhost\",\n route: \"/bu/api/basketball\",\n port: 4100,\n serviceUrl: \"http://localhost:4100/bu/api/basketball\",\n namespace: \"http://localhost:2923/vRwTJOske\",\n SystemLynxService: true,\n};\n","import Test from \"./Test.class\";\n\nconst sections = [\"Before\", \"Main\", \"Events\", \"After\"];\n\nexport default function FullTestController({ FullTest, connectedServices }) {\n this.runFullTest = async ([Before, Main, Events, After] = FullTest) => {\n Events.forEach((test) => test.runTest());\n\n await new Promise((resolve) => {\n function recursiveRunTest(tests, i = 0) {\n if (i === tests.length) resolve();\n else tests[i].runTest().then(() => recursiveRunTest(tests, i + 1));\n }\n recursiveRunTest([...Before, ...Main, ...After]);\n });\n\n return [Before, Main, Events, After];\n };\n\n function validateTest({ title, evaluations, shouldValidate }, section, index) {\n if (!title)\n return {\n message: `${sections[section]}: Action ${index + 1} description is required`,\n error: true,\n };\n if (shouldValidate && !evaluations.filter((e) => e.save).length)\n return {\n message: `${sections[section]}: Action ${index + 1} validations required`,\n error: true,\n };\n\n return { error: false };\n }\n this.saveTests = async (Tests = FullTest) => {\n const { title, getConnection, namespace, index } = Tests[1][0];\n\n for (let i = 0; i < Tests.length; i++) {\n for (let x = 0; x < Tests.length; x++) {\n const res = Tests[i][x] ? validateTest(Tests[i][x], i, x) : {};\n if (res.error) return res;\n }\n }\n\n const { connection } = getConnection(connectedServices);\n\n const { Plugin } = connection[namespace.serviceId];\n\n if (Plugin) {\n const [Before, Main, Events, After] = Tests.map((testSection) =>\n testSection.map((test) => {\n const { args, evaluations, namespace, title } = test;\n //resetting scope of test\n Object.assign(test, new Test(test));\n return {\n args,\n namespace,\n title,\n savedEvaluations: evaluations\n .filter((e) => e.save)\n .map(({ namespace, expected_type, validations, save, indexed }) => ({\n namespace,\n expected_type,\n validations,\n save,\n indexed,\n })),\n };\n })\n );\n\n const testIndex = await Plugin.saveTest(\n { Before, Main, Events, After, title, namespace },\n index\n );\n return { message: \"Test Saved!\", error: false, testIndex };\n } else return { message: \"Plugin Plugin not connected!\", error: true };\n };\n}\n","import Argument from \"../TestPanel/components/Argument.class\";\nimport Test from \"../TestPanel/components/Test.class\";\n\nexport function initializeSavedTests(savedTests, connectedServices) {\n return savedTests.map((ft) => {\n // context matters\n const newTests = [];\n const { title, namespace } = ft;\n\n const Before = ft.Before.map((test) =>\n resetTest(test, newTests, connectedServices, false)\n );\n const Main = ft.Main.map((test) =>\n resetTest(test, newTests, connectedServices, false)\n );\n const Events = ft.Events.map((test) =>\n resetTest(test, newTests, connectedServices, false)\n );\n const After = ft.After.map((test) =>\n resetTest(test, newTests, connectedServices, false)\n );\n newTests.push(Before);\n newTests.push(Main);\n newTests.push(Events);\n newTests.push(After);\n return { Before, Main, Events, After, title, namespace };\n });\n}\n\nexport const resetTest = (test, FullTest, connectedServices, editMode) => {\n return new Test({\n ...test,\n args: test.args.map(\n (arg) =>\n new Argument(arg.name, FullTest, arg.input_type, arg.input, arg.targetValues)\n ),\n editMode,\n }).getConnection(connectedServices);\n};\n\nexport const resetFullTest = (FullTest, connectedServices, editMode) => {\n //context matters\n const newTests = [[], [], [], []];\n return FullTest.map((section, i) => {\n return section.map((test) => {\n const newTest = resetTest(test, newTests, connectedServices, editMode);\n newTests[i].push(newTest);\n return newTest;\n });\n });\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Client } from \"systemlynx\";\nimport Count from \"../../atoms/Count\";\nimport ExpandIcon from \"../../atoms/ExpandableIcon/ExpandableIcon\";\nimport RunTestIcon, { EditIcon, XButton } from \"../../atoms/RunTestIcon\";\nimport ExpandableSection from \"../../molecules/ExpandableSection/ExpandableSection\";\nimport TestCaption from \"../../molecules/TestCaption/TestCaption\";\nimport TestSummary from \"../../molecules/TestSummary\";\nimport FullTestController from \"../TestPanel/components/FullTestController\";\nimport { initializeSavedTests, resetFullTest } from \"./transformTests\";\nimport \"./styles.scss\";\nimport { ClearButton } from \"../../atoms/Button/Button\";\n\nwindow.Client = Client;\nconst CLASSNAME = \"test-saved-section\";\n\nconst SavedTests = ({\n savedTests = [],\n connectedServices,\n setFullTest,\n Plugin,\n fetchTests,\n}) => {\n const [open, setOpen] = useState(false);\n const toggleExpansion = () => setOpen((state) => !state);\n const [openAll, setOpenAll] = useState(false);\n const [closeAll, setCloseAll] = useState(false);\n const [savedTestList, setTests] = useState(\n initializeSavedTests(savedTests, connectedServices)\n );\n window.savedTestList = savedTestList;\n window.savedTests = savedTests;\n\n const updateTests = (i, FullTest) => {\n savedTestList[i] = { ...FullTest };\n setTests([...savedTestList]);\n };\n const clearTests = () => {\n setTests(initializeSavedTests(savedTests, connectedServices));\n setCloseAll((state) => !state);\n };\n\n const runAllTests = async () => {\n setOpen(true);\n setOpenAll((state) => !state);\n // await Promise.all(savedTestList.map((FullTest, i) => runTest(i, FullTest)));\n await new Promise((resolve) => {\n function recursiveRunTest(tests, i = 0) {\n if (i === tests.length) resolve();\n else runTest(i, tests[i]).then(() => recursiveRunTest(tests, i + 1));\n }\n recursiveRunTest(savedTestList);\n });\n };\n\n const runTest = async (index, { Before, Main, Events, After }) => {\n const { runFullTest } = new FullTestController({\n FullTest: [Before, Main, Events, After],\n connectedServices,\n });\n\n const [B, M, E, A] = await runFullTest();\n const { title, namespace } = Main[0];\n updateTests(index, { Before: B, Main: M, Events: E, After: A, title, namespace });\n };\n useEffect(() => {\n setTests(initializeSavedTests(savedTests, connectedServices));\n }, [savedTests]);\n return (\n <section className={`${CLASSNAME}`}>\n <ExpandableSection\n toggleExpansion={toggleExpansion}\n open={open}\n title={\n <>\n <TestCaption\n caption={\n <span>\n {\"Saved\"}{\" \"}\n {savedTestList.length > 0 && <Count count={savedTestList.length} />}\n </span>\n }\n />\n <div className={`${CLASSNAME}__buttons ${CLASSNAME}__top-buttons`}>\n <ClearButton onClick={clearTests} />\n <RunTestIcon onClick={runAllTests} />\n </div>\n </>\n }\n >\n {savedTestList.length ? (\n <div className=\"test-saved-section__test-container\">\n {savedTestList.map((FullTest, i) => (\n <TestDetails\n key={i}\n {...FullTest}\n index={i}\n isOpen={open}\n openAll={openAll}\n closeAll={closeAll}\n runTest={runTest.bind({}, i, FullTest)}\n setFullTest={setFullTest}\n connectedServices={connectedServices}\n Plugin={Plugin}\n fetchTests={fetchTests}\n />\n ))}\n </div>\n ) : (\n <div className=\"test-saved-section__test-data\">\n <span>no saved tests</span>\n </div>\n )}\n </ExpandableSection>\n </section>\n );\n};\n\nfunction TestDetails({\n title,\n index,\n Before,\n Main,\n Events,\n After,\n namespace,\n runTest,\n openAll,\n closeAll,\n setFullTest,\n connectedServices,\n Plugin,\n fetchTests,\n}) {\n const [open, setOpen] = useState(true);\n const [showDeleteMsg, setDeleteMsg] = useState(false);\n const toggleExpansion = () => {\n setOpen((state) => !state);\n };\n const editTest = () => {\n Main[0].index = index;\n const Tests = resetFullTest([Before, Main, Events, After], connectedServices);\n setFullTest(Tests);\n };\n const hideDelete = () => setDeleteMsg(false);\n const showDelete = () => setDeleteMsg(true);\n const deleteTest = async () => {\n if (Plugin) {\n await Plugin.deleteTest(namespace, index);\n hideDelete();\n fetchTests();\n }\n };\n const runTestHandler = () => {\n setOpen(true);\n runTest();\n };\n useEffect(() => {\n setOpen(true);\n }, [openAll]);\n useEffect(() => {\n setOpen(false);\n }, [closeAll]);\n useEffect(() => {\n setOpen(false);\n }, [namespace.serviceId, namespace.moduleName, namespace.methodName]);\n return (\n <div className={`${CLASSNAME}__test-container`}>\n <div className={`${CLASSNAME}__test-row`}>\n <ExpandIcon color=\"#4caf50\" onClick={toggleExpansion} isOpen={open} />\n <span className={`${CLASSNAME}__test-index`}>Test {index + 1}:</span>\n {showDeleteMsg ? (\n <span className={`${CLASSNAME}__delete-prompt ${CLASSNAME}__test-title`}>\n Delete test?{\" \"}\n <span\n onClick={deleteTest}\n className={`${CLASSNAME}__delete-btn ${CLASSNAME}__delete-btn--yes btn`}\n >\n Yes\n </span>\n <span\n onClick={hideDelete}\n className={`${CLASSNAME}__delete-btn ${CLASSNAME}__delete-btn--no btn`}\n >\n No\n </span>\n </span>\n ) : (\n <span className={`${CLASSNAME}__test-title`}>{title}</span>\n )}\n\n <span className={`${CLASSNAME}__buttons`}>\n <RunTestIcon onClick={runTestHandler} />\n <EditIcon onClick={editTest} />\n <XButton onClick={showDelete} />\n </span>\n </div>\n {open && (\n <>\n {!!Before.length && <TestSummary testSection={Before} section=\"Before\" />}\n {!!Main.length && <TestSummary testSection={Main} section=\"Main\" />}\n {!!Events.length && <TestSummary testSection={Events} section=\"Events\" />}\n {!!After.length && <TestSummary testSection={After} section=\"After\" />}\n </>\n )}\n </div>\n );\n}\nexport default SavedTests;\n","import \"./styles.scss\";\n\nexport function CurrentTest({ name, onClick }) {\n return (\n <span className=\"status-indicator saved-message\">\n <span className=\"status-indicator__title\">{name}</span>\n <span onClick={onClick} className=\"status-indicator__clear-button btn\">\n ×\n </span>\n </span>\n );\n}\n\nexport function ErrorStatus({ message }) {\n return <span className=\"status-indicator\">{message}</span>;\n}\n","import React, { useState, useContext, useEffect } from \"react\";\nimport BeforeTest from \"./BeforeTest/BeforeTest\";\nimport AfterTest from \"./AfterTest/AfterTest\";\nimport MainTest from \"./MainTest/MainTest\";\nimport EventsTest from \"./EventsTest/EventsTest\";\nimport ServiceContext from \"../../ServiceContext\";\nimport Test from \"./components/Test.class\";\nimport TestController from \"./components/TestController.class\";\nimport \"./styles.scss\";\nimport RunTestIcon from \"../../atoms/RunTestIcon\";\nimport SaveIcon from \"../../atoms/SaveIcon/SaveIcon\";\nimport SavedTests from \"../SavedTests/SavedTests\";\nimport { Client } from \"systemlynx\";\nimport FullTestController from \"./components/FullTestController\";\nimport Title from \"../../atoms/Title/Title\";\nimport { CurrentTest } from \"../../atoms/StatusIndicator/StatusIndicator\";\n\nconst FullTest = ({ serviceId, moduleName, methodName }) => {\n const namespace = { serviceId, moduleName, methodName };\n const { connectedServices } = useContext(ServiceContext);\n const serviceData = connectedServices.find(\n (service) => service.serviceId === serviceId\n );\n const { Plugin } = serviceData\n ? Client.createService(serviceData.system.connectionData)\n : {};\n const [Before, setTestBefore] = useState([]);\n const [After, setTestAfter] = useState([]);\n const [Main, setTestMain] = useState([new Test({ namespace, shouldValidate: true })]);\n const eventNamespace = { serviceId, moduleName, methodName: \"on\" };\n const [Events, setEventTest] = useState([]);\n const FullTest = [Before, Main, Events, After];\n const [savedTests, setSavedTests] = useState([]);\n const [saveResponse, setMessage] = useState({ message: \"\", error: false });\n window.Tests = FullTest;\n const testCtrl = (TestSection, setState, section, FullTest) =>\n new TestController({\n TestSection,\n setState,\n section,\n FullTest,\n connectedServices,\n });\n const MainCtrl = testCtrl(Main, setTestMain, 1, FullTest);\n const BeforeCtrl = testCtrl(Before, setTestBefore, 0, FullTest);\n const EventCtrl = testCtrl(Events, setEventTest, 2, FullTest);\n const AfterCtrl = testCtrl(After, setTestAfter, 3, FullTest);\n\n const { runFullTest, saveTests } = new FullTestController({\n FullTest,\n connectedServices,\n });\n\n const runTest = async () => {\n const tests = await runFullTest();\n setFullTest(tests);\n };\n const setFullTest = ([Before, Main, Events, After]) => {\n setTestMain([...Main]);\n setTestBefore([...Before]);\n setEventTest([...Events]);\n setTestAfter([...After]);\n };\n const clearMessage = () => setMessage({ error: false, message: \"\" });\n const save = async () => {\n const { error, message } = await saveTests();\n\n if (!error) {\n resetTests();\n //fetchTests();\n }\n\n setMessage({ error, message });\n setTimeout(clearMessage, 4000);\n };\n\n const fetchTests = async () => {\n try {\n if (Plugin) {\n const results = await Plugin.getTests(namespace);\n setSavedTests(results);\n }\n } catch (error) {\n return [];\n }\n };\n const resetTests = () => {\n setTestBefore([]);\n setTestAfter([]);\n setEventTest([]);\n //get connection for the main test and set state\n const test = new Test({ namespace, shouldValidate: true }).getConnection(\n connectedServices\n );\n setTestMain([test]);\n };\n\n useEffect(() => {\n resetTests();\n fetchTests();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [serviceId, moduleName, methodName, connectedServices]);\n\n return (\n <section className=\"test-panel\">\n <div className=\"container\">\n <div className=\"row\">\n <Title text=\"Scratch Pad\" />\n {typeof Main[0].index === \"number\" && (\n <CurrentTest name={`Saved Test ${1 + Main[0].index}`} onClick={resetTests} />\n )}\n </div>\n <div>\n <span className=\"row test__buttons\">\n <span\n className={`test-panel__error-message test-panel__error-message--hide-${!saveResponse.message} test-panel__error-message--error-${\n saveResponse.error\n } `}\n >\n <span>{saveResponse.message}</span>\n <span onClick={clearMessage} className=\"test-panel__clear-error btn\">\n ×\n </span>\n </span>\n\n <span>\n <span className=\"btn\" onClick={runTest}>\n <RunTestIcon />\n </span>\n <span className=\"btn\" onClick={save}>\n <SaveIcon />\n </span>\n </span>\n </span>\n\n <div className=\"row test-panel__section\">\n <BeforeTest TestController={BeforeCtrl} TestSection={Before} />\n </div>\n <div className=\"row test-panel__section\">\n <MainTest TestController={MainCtrl} TestSection={Main} />\n </div>\n\n <div className=\"row test-panel__section\">\n <AfterTest TestController={AfterCtrl} TestSection={After} />\n </div>\n <div className=\"row test-panel__section\">\n <EventsTest\n TestController={EventCtrl}\n TestSection={Events}\n namespace={eventNamespace}\n FullTest={FullTest}\n />\n </div>\n <div className=\"row test-panel__section\">\n <SavedTests\n savedTests={savedTests}\n connectedServices={connectedServices}\n setFullTest={setFullTest}\n Plugin={Plugin}\n fetchTests={fetchTests}\n />\n </div>\n </div>\n </div>\n <div className=\"scroll-buffer\"></div>\n </section>\n );\n};\n\nexport default FullTest;\n","import React from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport SystemNavigator from \"../../organisms/SystemNavigator/SystemNavigator\";\nimport Documentation from \"../../organisms/Documentation/Documentation\";\nimport TestPanel from \"../../organisms/TestPanel/TestPanel\";\nimport LOGO from \"../../assets/sysly.png\";\nimport \"./styles.scss\";\n\nconst SystemViewPage = () => {\n const { projectCode, serviceId, moduleName, methodName } = useParams();\n return (\n <section className=\"system-viewer\">\n <div className=\"page-header\">\n <span\n style={{\n fontSize: \"28px\",\n fontFamily: \"Malkor\",\n color: \"#6886ba\",\n marginRight: \"10px\",\n textShadow: \"1px 1px 2px #d6cbca\",\n }}\n >\n SystemView\n </span>\n <img src={LOGO} alt=\"logo\" />\n {/* <span\n style={{\n fontSize: \"28px\",\n fontFamily: \"Malkor\",\n color: \"#6886ba\",\n marginLeft: \"10px\",\n textShadow: \"1px 1px 2px #d6cbca\",\n }}\n >\n SystemLynx\n </span> */}\n </div>\n <div className=\"row\">\n <div className=\"col-3\">\n <SystemNavigator\n projectCode={projectCode}\n serviceId={serviceId}\n moduleName={moduleName}\n methodName={methodName}\n />\n </div>\n <div className=\"col-6\">\n <Documentation\n projectCode={projectCode}\n serviceId={serviceId}\n moduleName={moduleName}\n methodName={methodName}\n />\n </div>\n <div className=\"col-3\">\n <TestPanel\n projectCode={projectCode}\n serviceId={serviceId}\n moduleName={moduleName}\n methodName={methodName}\n />\n </div>\n </div>\n </section>\n );\n};\n\nexport default SystemViewPage;\n","export default \"data:image/png;base64,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\"","import React, { useState } from \"react\";\nimport SystemView from \"./pages/SystemView/SystemView\";\nimport ServiceContext from \"./ServiceContext\";\nimport { BrowserRouter as Router, Route, Redirect } from \"react-router-dom\";\nfunction App({ SystemViewService }) {\n const [connectedServices, setConnectedServices] = useState([]);\n return (\n <ServiceContext.Provider\n value={{ SystemViewService, connectedServices, setConnectedServices }}\n >\n <Router>\n <Route\n path={[\n \"/:projectCode/:serviceId/:moduleName/:methodName\",\n \"/:projectCode/:serviceId/:moduleName\",\n \"/:projectCode/:serviceId\",\n \"/:projectCode/\",\n \"/\",\n ]}\n >\n <SystemView />\n </Route>\n </Router>\n </ServiceContext.Provider>\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n// import \"./assets/fonts/FontsFree-Net-SFMono-Regular.ttf\";\n// import \"./assets/fonts/Malkor-Regular.ttf\";\nimport { Client } from \"systemlynx\";\n\nconst url = \"http://localhost:3000/systemview/api\";\n\nClient.loadService(url).then((SystemViewService) => {\n ReactDOM.render(\n <React.StrictMode>\n <App SystemViewService={SystemViewService} />\n </React.StrictMode>,\n document.getElementById(\"root\")\n );\n});\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","\"use strict\";\nconst io = require(\"socket.io-client\");\nconst createDispatcher = require(\"../../Dispatcher/Dispatcher\");\n\nmodule.exports = function SocketDispatcher(namespace, events = {}, systemContext) {\n const dispatcher =\n (this || {}).on && (this || {}).emit\n ? this\n : createDispatcher.apply(this, [events, systemContext]);\n const socket = io.connect(namespace, { reconnection: false });\n socket.on(\"dispatch\", (event) => dispatcher.emit(event.name, event.data, event));\n socket.on(\"disconnect\", () => {\n socket.disconnect();\n dispatcher.emit(\"disconnect\");\n });\n socket.on(\"connect\", () => dispatcher.emit(\"connect\"));\n\n dispatcher.disconnect = () => socket.disconnect();\n return dispatcher;\n};\n"],"sourceRoot":""}