{"version":3,"sources":["modules/time-recording/state/initial.ts","util/collection.ts","util/index.ts","modules/time-recording/state/index.ts","modules/stock-management/icons/scan.svg","api/auth.ts","service/auth.ts","service/TokenStore.ts","api/api.ts","util/offline.ts","modules/time-recording/state/action/manual.ts","modules/time-recording/state/action/transaction.ts","util/uuid.ts","state/ui/actions.ts","state/ui/busy/index.ts","state/ui/index.ts","state/user/action.ts","state/user/index.ts","modules/stock-management/api/StockApi.ts","modules/stock-management/constants/error.ts","modules/stock-management/state/action/item/fetch.ts","modules/stock-management/state/action/item/update.ts","modules/stock-management/state/action.ts","modules/stock-management/state/reducer/inventory.ts","modules/stock-management/state/action/debug.ts","modules/stock-management/state/reducer/relocation.ts","modules/stock-management/state/reducer/label.ts","modules/stock-management/state/reducer/module.ts","modules/stock-management/state/reducer/index.ts","state/module/index.ts","state/reducers.ts","state/configureStore.ts","state/actions.ts","state/index.ts","views/Overview.tsx","modules/helper.tsx","modules/time-recording/components/EventList.tsx","modules/time-recording/views/Manuel/DateTitle.tsx","modules/time-recording/views/Manuel/AlertDialog.tsx","modules/time-recording/views/Manuel/DeleteAction.tsx","modules/time-recording/views/Manuel/AddDialog.tsx","components/RadioButtonGroup.tsx","components/RadioButton.tsx","util/date.ts","modules/time-recording/events/index.ts","modules/time-recording/views/CheckinForm.tsx","context/UsernameContext.ts","modules/time-recording/views/Manuel/CheckinDialog.tsx","modules/time-recording/views/Manuel.tsx","modules/time-recording/views/CurrentJob/AddOrder.tsx","modules/time-recording/views/CurrentJob/AddProject.tsx","modules/time-recording/views/CurrentJob/AddOther.tsx","modules/time-recording/views/CurrentJob/index.tsx","modules/time-recording/views/CheckInOut.tsx","modules/time-recording/views/Auto.tsx","modules/time-recording/views/Index.tsx","modules/time-recording/index.tsx","modules/time-recording/config.ts","components/SoftBlink.tsx","util/scanner.ts","modules/stock-management/views/inventory/Inventory.tsx","modules/stock-management/views/inventory/SelectDraft.tsx","modules/stock-management/views/inventory/Main.tsx","modules/stock-management/state/action/relocation/index.ts","modules/stock-management/views/relocation/Relocation.tsx","hooks/useFetch.ts","hooks/useAuthenticatedFetch.ts","context/ModuleContext.ts","modules/stock-management/views/label/AdditionalFields.tsx","modules/stock-management/views/label/LabelView.tsx","modules/stock-management/views/inquiry/InquiryView.tsx","modules/stock-management/views/productlabel/ProductLabel.tsx","modules/stock-management/views/Main.tsx","modules/stock-management/index.tsx","modules/stock-management/config.ts","modules/tools/views/base36/ItemList.tsx","modules/tools/views/base36/FeatureList.tsx","modules/tools/views/base36/ManuelInput.tsx","util/number.ts","modules/tools/atoms/base36.ts","modules/tools/views/base36/Index.tsx","modules/tools/views/delivery/DeliveryCard.tsx","modules/tools/views/delivery/Index.tsx","modules/tools/views/Main.tsx","modules/tools/index.tsx","modules/tools/state/index.ts","hooks/useLocation.ts","modules/tools/views/base36/Tabs.tsx","modules/tools/components/AppBarTabs.tsx","modules/tools/config.ts","modules/config.ts","components/TitleBar.tsx","components/Center.tsx","views/Login.tsx","service/UpdateNotificationService.ts","components/UpdateNotification.tsx","components/NotificationManager.tsx","util/role.ts","views/Main.tsx","components/AppDrawer.tsx","theme.ts","app.base.tsx","serviceWorker.js","index.ts"],"names":["transactionType","id","label","type","lang","next","absenceType","elementType","activityType","toMap","nodes","keySelector","reduce","result","node","assertNever","value","toOrderedById","collection","byId","list","map","initialState","data","checkinout","x","absence","activity","element","transaction","current","checkin","manual","mergeEvents","a","b","index","v","b0","a0","deleted","push","getOrderedList","state","filter","item","undefined","getCurrentTransaction","username","getCheckinTypes","getAbsenceTypes","getElementTypes","getActivityTypes","getCheckin","getManualEntries","reducer","action","produce","draft","TRANSACTION_OPEN","event","events","TRANSACTION_CLOSE","TRANSACTION_EVENT_ADD","entry","find","transactionId","module","exports","Auth","store","client_","token_","store_","callbacks_","this","ClientOAuth2","clientId","clientSecret","authorizationUri","accessTokenUri","scopes","callback","c","forEach","cb","load","token","createToken","decoded","jwt_decode","accessToken","exp","expires","Date","save","clear","password","owner","getToken","saveToken","emit","refresh","logout","Error","af","input","init","req","Request","credentials","headers","set","fetch","response","status","json","body","error","console","e","sub","role","auth","key_","client","dataToken","localStorage","setItem","JSON","stringify","Promise","resolve","getItem","parse","reject","removeItem","API_BASE_URL","replace","getAuthenticatedFetch","Api","request","url","method","Headers","createOfflineMeta","offline","effect","fetchManualTimeEntries","dispatch","ok","fetchManualTimeEntriesSuccess","statusText","FetchManualTimeEntriesFailure","deleteManuelTimeEntry","meta","addManualTimeEntry","transactionOpen","generateUuid","transactionClose","transactionEventAdd","fetchTransactions","then","log","UUID","format","drawerOpen","open","busy","isBusyAction","uiMeta","busyReducer","drawer","uiReducer","userLoginSuccess","roles","pending","failedLogin","user","defaultHeaders","mode","defaultHandler","apiCall","uri","options","handler","message","responseBody","errorMessage","TypeError","getDrafts","warehouse","barcode","getQty","location","sku","moveItem","from","to","quantity","qty","updateItem","fetchPendingItems","res","confirmLocationComplete","stockFetchItemFailure","notification","severity","source","stockFetchItemSuccess","stockUpdateItemSuccess","draftId","stockUpdateItemFailure","getErrorReason","errorCode","i18n","stockDraftsLoadSuccess","drafts","stockDismissError","stockFetchPendingItemsSuccess","items","stockFetchPendingItemsFailure","stockConfirmLocationCompleteSuccess","stockConfirmLocationCompleteFailure","fetchingItem","updatingItem","notifications","scanned","previousLocation","pendingItems","err","currentItem","printers","ui","fetchingLabels","fetchingPrinters","errorLabels","errorPrinters","errorLabelRequest","requestingLabel","toString","combineReducers","inventory","relocation","length","retarget","fn","selector","t","getInventoryCurrentWarehouse","s","getInventoryDrafts","getInventoryCurrentItem","getInventoryScannedItem","getInventoryScannedLocation","getInventoryPreviousLocation","getInventoryPendingItems","getInventoryIsLoadingItem","getInventoryIsUpdatingItem","getInventoryNotifications","getCurrentItem","getRelocationRequest","getModuleNotifications","timeRecording","stockManagement","_version","rootReducer","offlineConfig","discard","_action","_retries","logger","createLogger","collapsed","isBusy","isBusy_","getDrawerOpenState","getDrawerOpenState_","getUsername","getUsername_","isLoggedIn","isLoggedIn_","getLoginPending","getLoginPending_","getLoginFailed","getLoginFailed_","getUserRoles","getUserRoles_","stateVersion","upgradeTransform","createTransform","inState","key","outState","info","createStore","compose","applyMiddleware","thunkMiddleware","persistOptions","transforms","Overview","style","padding","variant","gutterBottom","React","createOfflineStoreEnhancer","config","keyPrefix","createModuleStore","moduleKey","version","middleware","createModule","App","props","formatEventTime","date","EventList","activityTypes","orderNo","elementTypes","absenceTypes","currentEvent","restTitle","currentTitle","getSecondaryText","getSecondaryAction","secondaryAction","dense","backgroundColor","green","getEventIcon","aria-label","primary","formatEventTitle","secondary","connect","DateTitle","onClick","fullWidth","InputProps","readOnly","fontSize","inputProps","startAdornment","position","marginTop","AlertDialog","onConfirm","onHandleClose","onClose","aria-labelledby","aria-describedby","color","red","autoFocus","DeleteAction","clickHandler","useMemo","isValidNumber","q","isNaN","fieldStyle","useOutlinedSelect","useState","labelWidth","setLabelWidth","useCallback","findDOMNode","getBoundingClientRect","width","AddOrderForm","onChange","ref","parseInt","target","elementNumber","disabled","endAdornment","AddOtherForm","AddAbsence","isEntryValid","withMobileDialog","fullScreen","day","setEntry","onCancel","onAddEntry","RadioButtonGroup","handleChange","currentTarget","title","name","required","component","children","RadioButton","control","formatDate","toISOString","checkIn","createOtherActivityEvent","createOrderActivityEvent","createProjectActivityEvent","Block","styled","div","ButtonBar","CheckInOut","onCheckinChange","setState","onAbsenceChange","onCheckinClick","onCheckin","ownProps","UsernameContext","CheckinDialog","setOpen","onCheckinCallback","useEffect","CheckinForm","Manuel","dayjs","startOf","addEvent","onDeleteClick","eventToDelete","onHandleDeleteCancel","onHandleDelete","deleteEntry","onHandleAddCancel","onHandleAdd","addEntry","formatDuration","duration","Math","floor","leftPad","rest","fetchEntries","classes","entries","minDate","subtract","toDate","maxDate","add","now","filteredEntries","isSame","isCheckedIn","findIndex","utils","DayjsUtils","className","root","picker","TextFieldComponent","fab","withStyles","theme","paddingTop","spacing","unit","paddingBottom","mixins","gutters","bottom","right","AddOrder","onOrderNumberChange","onAdd","history","goBack","marginLeft","AddOther","onElementTypeChange","selectedActivity","onActivityChange","activities","LowerRightButton","views","urlPart","view","icon","ShoppingCart","AddProject","Receipt","Flag","CurrentJob","newDialogOpen","onNewDialogClose","onNewDialogChoose","match","onAddClick","Icon","button","reverse","Switch","View","Route","path","render","renderEventList","renderNewDialog","renderViews","onCheckoutClick","absenceLabel","lastActivityDate","paragraph","renderCheckin","renderCheckout","checkedIn","MyBottomNavigation","BottomNavigation","MainView","Auto","currentView","Alarm","default","Assignment","onValueChange","_event","getPath","exact","Redirect","pathname","indexOf","renderView","getActiveView","showLabels","NavigationButton","Index","urlAuto","urlManual","Provider","renderProps","TimeRecordingModule","Timer","TimeRecording","kf","keyframes","SoftBlink","easing","Scanner","onSuccess","detectType","scanHandle","scannedSymbols","isContainer","substr","toUpperCase","onKeyup","ch","window","clearTimeout","shiftKey","setTimeout","scanTimeout","getBarcodeType","addEventListener","removeEventListener","symbols","control1","control2","ScanInput","container","alignItems","xs","Inventory","scanner","confirmChecked","scannedBardcode","showLoader","scanItem","scanLocation","handleCloseDialog","scanClear","containerIsClosed","showConfirmAlreadyCountedDialog","accept","showAlreadyCountedDialog","confirm","handleSaveQuantity","params","scannedItem","scannedLocation","overrideQuantity","previouslyCounted","dialogResult","parseFloat","showDialog","tracking","loadingItem","showDialogLoader","onQuantityChange","Number","renderLoader","left","top","marginRight","onConfirmNullClick","onCancelNullClick","revertLocation","onPropsChanged","destroy","nextProps","clearPreviousLocationAndItems","fetchItem","n","flex","onKeyDown","checked","_","fontWeight","renderAlreadyCounted","renderLocationChanged","justify","textAlign","src","scanIcon","alt","renderDialog","stockScannedItem","stockScannedLocation","qtyInStockLoc","stockFetchItem","_stockUpdateItem","warn","stockUpdateItem","_stockFetchPendingItems","stockFetchPendingItems","_stockConfirmLocationComplete","stockConfirmLocationComplete","SelectDraft","navigate","setDraft","select","size","ViewBase","StockManagement","navigateToView","relativePath","draftsLoad","nextWarehouse","prefix","stockDraftsLoad","dismissError","clearState","stockRelocationFetchItemSuccess","stockRelocationFetchItemFailure","stockRelocationCommitSuccess","stockRelocationCommitFailure","Relocation","qtyInput","clearNotificationsHandle","quantityInput","onItemScanned","step","getActiveStep","setSourceLocation","setDestLocation","onQuantityKeypress","isValidQuantityInput","test","onQuantityCommit","setQuantity","onCommit","commit","onClear","onItemFetched","clearNotifications","focus","locationDest","locationSource","activeStep","orientation","elevation","completed","toFixed","marginBottom","inputRef","catch","stockRelocationFetchItem","stockRelocationSetItem","stockRelocationSetSourceLocation","stockRelocationSetDestinationLocation","stockRelocationSetQuantity","_stockRelocationCommit","stockRelocationCommit","fetchReducer","isLoading","createUseFetch","useReducer","cancelled","useAuthenticatedFetch","ModuleContext","toast","timeout","DateFieldRender","field","setValue","onChangeCallback","utcOffset","margin","displayLabel","NumberFieldRender","defaultValue","StringFieldRender","ChoiceFieldRender","values","AdditionalFields","fields","setValues","setFieldValue","fieldName","newValues","defaultValues","f","useChangeCallback","useFormState","initialValue","useErrorToast","errorObject","LabelView","context","useContext","useRef","confirmedBarCode","setConfirmedBarcode","onBarcodeChanged","setBarcode","onQtyChanged","onLabelTypeChanged","setLabel","printer","onPrinterChanged","setPrinter","additionaValues","setAdditionalValues","labelSku","additionalFields","qtyIsValid","onSerialNumberKeypress","labelTypes","isLoadingLabelTypes","labelTypesError","configuration","isLoadingConfiguration","configurationError","defaultQty","loadingIndicator","display","justifyContent","flexGrow","onKeyPress","flexShrink","helperText","getId","performInquiry","text","InquiryItemRow","active","setActive","onMouseDown","onMouseUp","onTouchStart","onTouchEnd","selected","align","prioDate","searchTypeEnum","errorBar","palette","dark","setResult","setBusy","setErrorMessage","showDetails","setShowDetails","finally","onSubmit","preventDefault","onItemClick","itemName","locationName","lastUpdate","statusBalanceId","inputMode","stopPropagation","onKeyUp","line","ContentProps","autoHideDuration","qtySmall","onSmallQtyChanged","setQtySmall","qtyLarge","onLargeQtyChanged","setQtyLarge","qtyBoxSmall","onBoxSmallQtyChanged","setQtyBoxSmall","qtyBoxLarge","onBoxLargeQtyChanged","setQtyBoxLarge","itemNumber","onItemNumberChanged","setItemNumber","Item","searchType","setTypeOfSearch","onItemBlur","resEdition","edition","row","Manufacturing","Purchase","onBlur","defaultLoc","snackbarStyles","success","CheckCircleIcon","warning","amber","WarningIcon","ErrorIcon","CustomSnackBarContent","setCurrentWarehouse","renderSnackbar","renderNavigationButtons","buttons","route","hasRole","mnotifications","InventoryMain","Label","Inquiry","ProductLabel","stockSetWarehouse","Stock","module_","Domain","ItemList","ItemListItem","itemDescription","FeatureList","features","onFeatureCheck","onCheckboxChange","feature","i","bit","getBase2String","base36","grouping","maxSize","padStart","firstGroupLen","groups","join","formatGroupedBinary","ManualInput","base36value","binaryValue","setBinaryValue","searchStatusAtom","atom","additionalItemsCount","itemsCount","fetchFeatures","maxWidth","background","paper","code","setSearchStatus","useSetRecoilState","setbase36value","setBusyIndicatorVisible","DeliveryContext","useQuery","featuresConfiguration","featureIsLoading","lookupResult","itemsIsLoading","on","additionalItems","featureList","fc","baseUrl","DeliveryCard","delivery","deliveryNumber","weights","setWeights","setTracking","addParcel","ws","onWeightChange","es","arr","slice","update","onPrintLabelsClick","w","parcels","p","parcelNumber","name1","name2","name3","street1","zipCode","city","countryNum","weight","ParcelWeight","number","onTextFieldChange","setDelivery","query","setQuery","keyCode","queryClient","QueryClient","Main","onFeaturesClick","onDeliveryClick","Features","Delivery","blacklist","ToolsModule","useLocation","setLocation","listen","tabRoutes","isMatch","matchUrl","matchPath","useLocationTabs","urls","max","getUrl","joinUrl","Base36Tabs","useRecoilValue","activeTab","AppBarTabs","MainComponent","tabs","createElement","withRouter","TitleBar","toggleDrawer","isDrawerOpen","modules","Center","fullHeight","LoginForm","Login","passwordInput","onLoginClick","login","onUsernameChange","onPasswordChange","loginFailed","loginDisabled","loginPending","reason","callbacks","styles","yellowButton","yellow","YellowButton","other","UpdateNotification","updateAvailable","hasUpdate","setHasUpdate","UpdateNotificationService","useUpdateAvailable","anchorOrigin","vertical","horizontal","reload","variantIcon","InfoIcon","SnackbarIcon","cx","iconVariant","NotificationSnackbarContent","NotificationManagerWithStyles","opacity","messages","onDismiss","snacks","isAllowed","allowedRoles","wilcards","substring","openDrawer","closeDrawer","drawerIsOpen","contextData","onDismissNotification","m","viewProps","loggedIn","userRoles","Component","moduleRoutes","AppDrawer","onModuleClick","onLogoutClick","onCheckForUpdate","navigator","serviceWorker","getRegistration","reg","onPrinterSetup","refreshToken","predicate","process","env","guldmann_mobility_env","createMuiTheme","main","document","visibilityState","isAuthenticated","onLine","checkAuthPromise","loadToken","tokenData","jwtDecode","isLocalhost","Boolean","hostname","registerValidSW","swUrl","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","app","getElementById","URL","href","origin","contentType","get","ready","unregister","checkValidServiceWorker"],"mappings":"8HAEA,wIAAO,IAAMA,EAAgC,CACzC,CAAEC,GAAI,KAAMC,MAAO,sBAAyCC,KAAM,KAAOC,KAAM,QAASC,KAAM,MAC9F,CAAEJ,GAAI,KAAMC,MAAO,qBAAyCC,KAAM,MAAOC,KAAM,SAC/E,CAAEH,GAAI,KAAMC,MAAO,oCAAyCC,KAAM,KAAOC,KAAM,QAASC,KAAM,MAC9F,CAAEJ,GAAI,KAAMC,MAAO,mCAAyCC,KAAM,MAAOC,KAAM,SAC/E,CAAEH,GAAI,KAAMC,MAAO,wCAAyCC,KAAM,KAAOC,KAAM,QAASC,KAAM,MAC9F,CAAEJ,GAAI,KAAMC,MAAO,uCAAyCC,KAAM,MAAOC,KAAM,UAGtEE,EAAyB,CAClC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,SACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,aACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,qCACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,2BACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,2BACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,UACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,gBACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,mBACvC,CAAE,GAAM,IAAK,KAAQ,QAAS,MAAS,gBACvC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,wBACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,iBACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,cACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,mBACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,mBACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,iBACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,uBAG/BC,EAA4B,CACrC,CAAE,GAAM,MAAO,KAAQ,QAAS,MAAS,SACzC,CAAE,GAAM,MAAO,KAAQ,QAAS,MAAS,eAGhCC,EAA8B,CACvC,CAAE,GAAM,IAAK,KAAQ,QAAU,MAAS,6BACxC,CAAE,GAAM,IAAK,KAAQ,QAAU,MAAS,0BACxC,CAAE,GAAM,IAAK,KAAQ,QAAU,MAAS,aACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,cACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,OACxC,CAAE,GAAM,KAAM,KAAQ,QAAS,MAAS,qB,iGCzC/BC,EAAQ,SAAQC,EAAgBC,GAAxB,OACjBD,EAAME,QAAO,SAACC,EAAQC,GAElB,OADAD,EAAOF,EAAYG,IAASA,EACrBD,IACR,M,iCCJP,kCAAO,IAAME,EAAc,SAACC,M,ibCUtBC,G,OAAgB,SAAIC,EAAiBP,GAArB,MAA2D,CAC7EQ,KAAMV,YAAMS,EAAYP,GACxBS,KAAMF,EAAWG,IAAIV,MAGnBW,EACN,CACIC,KACA,CACIC,WAAYP,EAAcjB,KAAiB,SAAAyB,GAAC,OAAIA,EAAExB,MAClDyB,QAAST,EAAcX,KAAa,SAAAmB,GAAC,OAAIA,EAAExB,MAC3C0B,SAAUV,EAAcT,KAAc,SAAAiB,GAAC,OAAIA,EAAExB,MAC7C2B,QAASX,EAAcV,KAAa,SAAAkB,GAAC,OAAIA,EAAExB,OAG/C4B,YAAa,CACTC,QAAS,GACTX,KAAM,GACNC,KAAM,IAGVW,QAAS,GAETC,OAAQ,IAcNC,EAAc,SAACC,EAAuBC,GAExC,IAL4BxB,EAIhC,EACUyB,GALsBzB,EAKA,SAAAc,GAAC,OAAIA,EAAExB,IAAViC,EAJtBtB,QAAO,SAACC,EAAiBwB,GAAoC,OAA5BxB,EAAOF,EAAY0B,IAAMA,EAAUxB,IAAW,KAGtF,cAEkBsB,GAFlB,IAEI,IAAI,EAAJ,qBACA,CAAC,IADOG,EACR,QACI,GAAGA,EAAGrC,MAAMmC,EACZ,CACI,IAAMG,EAAKH,EAAME,EAAGrC,IACpBsC,EAAGC,QAAUD,EAAGC,SAAWF,EAAGE,aAI9BN,EAAEO,KAAKH,IAXnB,8BAcI,OAAOJ,GA6DLQ,EAAiB,SAAIC,GAAJ,OACnBA,EAAMvB,KAAKC,KAAI,SAAApB,GAAE,OAAI0C,EAAMxB,KAAKlB,MAAK2C,QAAO,SAAAC,GAAI,YAAaC,IAATD,MAQ3CE,EAAwB,SAACC,EAAkBL,GACvD,IAAD,EAC8BA,EAAMd,YAAxBC,EADZ,EACYA,QAASX,EADrB,EACqBA,KACjB,OAAOW,EAAQkB,GAAY7B,EAAKW,EAAQkB,SAAaF,GAS5CG,EAAkB,SAACN,GAAD,OAC3BD,EAAeC,EAAMpB,KAAKC,aAEjB0B,EAAkB,SAACP,GAAD,OAC3BD,EAAeC,EAAMpB,KAAKG,UAEjByB,EAAkB,SAACR,GAAD,OAC3BD,EAAeC,EAAMpB,KAAKK,UAEjBwB,EAAmB,SAACT,GAAD,OAC5BD,EAAeC,EAAMpB,KAAKI,WAEjB0B,EAAa,SAACV,GAAD,OACtBA,EAAMZ,QAAQ5B,MAELmD,EAAmB,SAACX,EAA2BK,GAA5B,OAC5BL,EAAMX,OAAOgB,IAGFO,UAlGC,eAACZ,EAAD,uDAASrB,EAAckC,EAAvB,8CAA8DC,YAAQd,GAAO,SAAAe,GAEzF,GAAGF,EAAOrD,OAASwD,IACnB,CAAC,IACW1D,EAAwBuD,EAAxBvD,GAAI2D,EAAoBJ,EAApBI,MAAOZ,EAAaQ,EAAbR,SAInB,OAHAU,EAAM7B,YAAYC,QAAQkB,GAAY/C,EACtCyD,EAAM7B,YAAYV,KAAKlB,GAAM,CAAEA,KAAI4D,OAAQ,CAACD,GAAQZ,iBACpDU,EAAM7B,YAAYT,KAAKqB,KAAKxC,GAIhC,GAAGuD,EAAOrD,OAAS2D,IACnB,CAAC,IACW7D,EAAiBuD,EAAjBvD,GAAI+C,EAAaQ,EAAbR,SAGZ,cAFOU,EAAM7B,YAAYC,QAAQkB,QACjCU,EAAM7B,YAAYV,KAAKlB,GAAvB,eAAkCyD,EAAM7B,YAAYV,KAAKlB,KAI7D,GAAGuD,EAAOrD,OAAS4D,IAOnB,GAAoB,sCAAhBP,EAAOrD,KAAX,CAOA,GAAoB,0BAAhBqD,EAAOrD,KACX,CAAC,IACW6C,EAAoBQ,EAApBR,SAAUgB,EAAUR,EAAVQ,MAGlB,OAFAN,EAAM1B,OAAOgB,GAAYU,EAAM1B,OAAOgB,IAAa,QACnDU,EAAM1B,OAAOgB,GAAUP,KAAKuB,GAIhC,GAAoB,6BAAhBR,EAAOrD,KAcXY,YAAYyC,OAdZ,CACC,IACWvD,EAAiBuD,EAAjBvD,GAAI+C,EAAaQ,EAAbR,SACZ,GAAGA,KAAYU,EAAM1B,OACrB,CACI,IAAMgC,EAAQN,EAAM1B,OAAOgB,GAAUiB,MAAK,SAAA5B,GAAC,OAAIA,EAAEpC,KAAOA,UAC3C6C,IAAVkB,IAECA,EAAMxB,SAAU,SAvB5B,CACC,IACWqB,EAAqBL,EAArBK,OAAQb,EAAaQ,EAAbR,SAChBU,EAAM1B,OAAOgB,GAAYf,EAAYyB,EAAM1B,OAAOgB,IAAa,GAAIa,OAVvE,CACC,IACWD,EAAyBJ,EAAzBI,MAAOM,EAAkBV,EAAlBU,cACfR,EAAM7B,YAAYV,KAAK+C,GAAeL,OAAOpB,KAAKmB,S,oBCvF1DO,EAAOC,QAAU,IAA0B,kC,wHC2N5BC,E,WAzMX,WAAYC,GACX,yBANOC,aAMR,OALQC,YAKR,OAJQC,YAIR,OAHQC,WAA4C,GAIhDC,KAAKJ,QAAU,IAAIK,IAAa,CAC5BC,SAAU,eACVC,aAAc,eACdC,iBAAkB,kDAClBC,eAAgB,8CAChBC,OAAQ,CAAC,WAAY,oBAEzBN,KAAKF,OAASH,E,6DAIDnE,EAAc+E,IAE1BP,KAAKD,WAAWvE,GAAQwE,KAAKD,WAAWvE,IAAS,IAAIsC,KAAKyC,K,0CAG3C/E,EAAc+E,GAE3BP,KAAKD,WAAWvE,KAEfwE,KAAKD,WAAWvE,GAAQwE,KAAKD,WAAWvE,GAAMyC,QAAO,SAAAuC,GAAC,OAAIA,IAAMD,Q,2BAI3D/E,GAENwE,KAAKD,WAAWvE,IAEfwE,KAAKD,WAAWvE,GAAMiF,SAAQ,SAAAC,GAAE,OAAIA,S,4JAMrBvC,IAAhB6B,KAAKF,O,gCAEgBE,KAAKF,OAAOa,O,OACnB,QADPC,E,UAGFZ,KAAKH,OAASG,KAAKJ,QAAQiB,YAAYD,EAAMhE,OAEvCkE,EAAeC,IAAWH,EAAMI,eACD,kBAAhBF,EAAQG,IAGxBjB,KAAKH,OAAeqB,QAAU,IAAIC,KAAmB,IAAdL,EAAQG,KAK/CjB,KAAKH,OAAeqB,QAAU,IAAIC,KAAK,I,0PAQjChD,IAAhB6B,KAAKF,O,wBAEc3B,IAAf6B,KAAKY,M,gCAEEZ,KAAKF,OAAOsB,KAAKpB,KAAKY,O,6BAI5BZ,KAAKF,OAAOuB,Q,2KAKZhD,EAAkBiD,G,uFAENtB,KAAKJ,QAAQ2B,MAAMC,SAASnD,EAAUiD,G,cAApDV,E,OACNZ,KAAKH,OAASe,E,SACRZ,KAAKyB,Y,OACXzB,KAAK0B,KAAK,S,yPAKV1B,KAAKH,YAAS1B,E,SACR6B,KAAKyB,Y,OACXzB,KAAK0B,KAAK,U,gQAUSvD,IAAhB6B,KAAKH,O,0CAEG,G,YAIPG,KAAKH,OAAeqB,QAAU,IAAIC,M,0CAIxBnB,KAAK2B,U,8DAIX3B,KAAK4B,S,UACC5B,KAAK4B,S,kCACJ,G,kCAGR,G,iQAKYzD,IAAhB6B,KAAKH,O,sBAEEgC,MAAM,8D,uBAEI7B,KAAKH,OAAO8B,U,cAAhC3B,KAAKH,O,gBACCG,KAAKyB,Y,oJAyCd,IAAD,OACUK,EAAE,uCAAG,WAAOC,EAAyBC,GAAhC,mBAAAzE,EAAA,8DAEYY,IAAhB,EAAK0B,OAFD,sBAIGgC,MAAM,8DAJT,cAODI,EAAe,IAAIC,QAAQH,EAAZ,2BAAyBC,GAAQ,IAAjC,IAAsCG,YAAa,cACpEC,QAAQC,IAAI,gBAAhB,iBAA2C,EAAKxC,OAAOmB,cARhD,kBAWoBsB,MAAML,GAX1B,UAYoB,OADjBM,EAXH,QAYSC,OAZT,kCAcO,EAAKb,UAdZ,yBAecG,EAAGC,EAAOC,GAfxB,oDAiBoB,MAApBO,EAASC,OAjBT,kCAmBoBD,EAASE,OAnB7B,eAmBOC,EAnBP,iBAoBO,EAAKd,SApBZ,cAqBOc,EAAKC,MArBZ,iCAuBIJ,GAvBJ,wCA2BHK,QAAQD,MAAM,CAACE,EAAC,OA3Bb,+DAAH,wDA+BR,OAAOf,I,4BA3GP,OAAO9B,KAAKH,S,+BAsCZ,GAAGG,KAAKH,OAEJ,IAGI,OADckB,IAAWf,KAAKH,OAAOmB,aACxB8B,IAEjB,MAAMD,GAEFD,QAAQD,MAAME,M,4BAQtB,GAAG7C,KAAKH,OAEJ,IAEI,IAAMe,EAAQG,IAAWf,KAAKH,OAAOmB,aACrC,MAAyB,kBAAfJ,EAAMmC,KAEL,CAACnC,EAAMmC,MAEXnC,EAAMmC,MAAQ,GAEzB,MAAMF,GAEFD,QAAQD,MAAME,GAGtB,MAAO,O,aChLTG,EAAO,IAAItD,EAAK,ICMtB,iDAEYuD,KAAe,WAF3B,iDAISrC,GAEgCA,EAAzBsC,OADX,IACsBC,EADvB,YACqCvC,EADrC,YAGI,OADAwC,aAAaC,QAAQrD,KAAKiD,KAAMK,KAAKC,UAAUJ,IACxCK,QAAQC,YARvB,6BAaQ,IAAMhB,EAAOW,aAAaM,QAAQ1D,KAAKiD,MACvC,GAAY,OAATR,EAEC,OAAOe,QAAQC,QAAQ,MAE3B,IAEI,IAAM7C,EAAQ0C,KAAKK,MAAMlB,GACzB,OAAOe,QAAQC,QAAQ7C,GAE3B,MAAMiC,GAEF,OAAOW,QAAQI,OAAOf,MAzBlC,8BAgCQ,OADAO,aAAaS,WAAW7D,KAAKiD,MACtBO,QAAQC,cAhCvB,ODJeT,O,4HEDFc,GAAgBV,aAAaM,QAAQ,+BAAiC,QAAQK,QAAQ,OAAQ,IAErGzB,EAAQU,IAAKgB,wBAEbC,E,kCAAAA,EAEKC,QAAU,SAACC,GACjB,IAD8BC,EAC/B,uDADwC,MAAO1B,EAC/C,uCACUV,EAAoB,CAAEoC,UAQ5B,YAPYjG,IAATuE,IAECV,EAAKU,KAAOY,KAAKC,UAAUb,GAC3BV,EAAKI,QAAU,IAAIiC,QAAQ,CACvB,eAAgB,sBAGjB/B,EAAM,GAAD,OAAIwB,EAAJ,YAAoBK,GAAOnC,IAIhCiC,O,6aCtBFK,EAAoB,SAACjG,EAAkB8F,GAAnB,IAAgCC,EAAhC,uDAAyC,MAAO1B,EAAhD,6CAAuF,CACpH6B,QAAS,CACLC,OAAQ,CAAEnG,WAAU8F,MAAKC,SAAQ1B,WCU5B+B,EAAyB,SAACpG,GAAD,OAAsB,SAACqG,GAAD,OAAmB,sBAAC,8BAAAnH,EAAA,6DAG5EmH,EADiD,CAAElJ,KAAM,8BAFmB,kBAMjDyI,IAAIC,QAAQ,wBANqC,YAMlE3B,EANkE,QAO3DoC,GAP2D,iCAS3BpC,EAASE,OATkB,OAS9DvD,EAT8D,OAUpEwF,EAASE,EAA8BvG,EAAUa,IAVmB,8BAc9DqD,EAASsC,WAdqD,0DAmBxEH,EAASI,EAA8B,EAAD,KAnBkC,yDAAD,KAiClEF,EAAgC,SAACvG,EAAkBa,GAAnB,MAAwF,CACjI1D,KAR6C,oCAS7C6C,WACAa,WAYS4F,EAAgC,SAACnC,GAAD,MAAsD,CAC/FnH,KAP6C,oCAQ7CmH,UAaSoC,EAAwB,SAAC1G,EAAkB/C,GAAnB,MAAgE,CACjGE,KARoC,2BASpCF,KACA+C,WACA2G,KAAMV,EAAkBjG,EAAD,+BAAmC/C,GAAM,YAavD2J,EAAqB,SAAC5G,EAAkBgB,GAAnB,MAA0E,CACxG7D,KARiC,wBASjC6D,QAAOhB,WACP2G,KAAMV,EAAkBjG,EAAU,uBAAwB,MAAOgB,K,eCvFxDL,EAAmB,mBAQnBkG,EAAkB,SAAC7G,EAAkBY,GAAnB,IAAwC3D,EAAxC,uDAA6C6J,cAA7C,MAAwF,CACnH3J,KAAMwD,EACN1D,KACA+C,WACAY,MAAM,2BAAMA,GAAP,IAAcM,cAAejE,IAClC0J,KAAMV,EAAkBjG,EAAU,sBAAuB,MAAlC,YAAC,eAA6CY,GAA9C,IAAqDM,cAAejE,OAMlF6D,EAAoB,oBAOpBiG,EAAmB,SAAC/G,EAAkB/C,GAAnB,MAA2D,CACvFE,KAAM2D,EACN7D,KACA+C,aAMSe,EAAwB,wBAOxBiG,EAAsB,SAACpG,GAAD,MAA8C,CAC7EzD,KAAM4D,EACNG,cAAeN,EAAMM,cACrBN,QACA+F,KAAMV,EAAkBrF,EAAMZ,SAAU,sBAAuB,MAAOY,KAwB7DqG,EAAoB,kBAAM,SAACZ,GAEpCT,IAAIC,QAAQ,uBAAuBqB,MAAK,SAAArJ,GAAM,OAAI0G,QAAQ4C,IAAItJ,S,gCClFlE,wDAEaiJ,EAAe,kBACxB,IAAIM,IAAK,GAAGC,W,sQCKHC,EAAa,eAACC,IAAD,+DAAoC,CAC1DpK,KAPuB,cAQvBoK,SAUSC,EAAO,SAACA,GAAD,MAA0B,CAAErK,KAP5B,OAOwCqK,SCbtDC,EAAe,SAACjH,GAAD,MACW,kBAAlBA,EAAOkH,QACgB,mBAAvBlH,EAAOkH,OAAOF,MAMbG,EAHK,eAAChI,EAAD,wDAAgBa,EAAhB,8CAChBiH,EAAajH,GAAUA,EAAOkH,OAAOF,KAAO7H,GCG1CrB,EACN,CACIsJ,OACA,CACIL,MAAM,GAEVC,MAAM,GAmCKK,EAhCG,WACjB,IADkBlI,EACnB,uDAD2BrB,EAAckC,EACzC,uCAGI,GAFAb,EAAM6H,KAAOG,EAAYhI,EAAM6H,KAAMhH,GFzBd,gBE2BpBA,EAAOrD,KACV,CAAC,IACWoK,EAAS/G,EAAT+G,KACR,OAAO,2BACA5H,GADP,IAEIiI,OAAO,2BACAjI,EAAMiI,QADP,IAEFL,WAKZ,GF5BgB,SE4Bb/G,EAAOrD,KACV,CAAC,IACWqK,EAAShH,EAATgH,KACR,OAAO,2BACA7H,GADP,IAEI6H,SAIR,OAAO7H,G,QCvCEmI,EAAmB,SAAC9H,EAAkB+H,GAAnB,MAA0D,CACtF5K,KAR8B,qBAS9B6C,WAAU+H,UCURzJ,EACN,CAEI0J,SAAS,EACTC,aAAa,EACbF,MAAO,IAwEIG,EArEF,WACZ,IADavI,EACd,uDADsBrB,EAAckC,EACpC,uCACI,GD7B8B,uBC6B3BA,EAAOrD,KACV,CAAC,IACW6C,EAAoBQ,EAApBR,SAAU+H,EAAUvH,EAAVuH,MAClB,OAAO,2BACApI,GADP,IAEIK,WACA+H,QACAC,SAAS,EACTC,aAAa,IAIrB,GD7BuB,gBC6BpBzH,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIK,cAAUF,EACVkI,SAAS,EACTC,aAAa,IAIrB,GD9B8B,uBC8B3BzH,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIqI,SAAS,EACTC,aAAa,IAIrB,GDhC6B,sBCgC1BzH,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIqI,SAAS,EACThI,cAAUF,EACVmI,aAAa,IAIrB,GAAoB,qBAAhBzH,EAAOrD,KAEP,OAAO,2BACAwC,GADP,IAEIoI,MAAO,KAIf,GAAoB,sBAAhBvH,EAAOrD,KACX,CAAC,IACW4K,EAAUvH,EAAVuH,MACR,OAAO,2BACApI,GADP,IAEIoI,UAIR,OAAOpI,G,uBCtFLwI,EAA8B,CAChCC,KAAM,OACNtE,YAAa,UACbC,QAAS,CAAE,eAAgB,qBA8BzBsE,EAAuC,SAACnE,GAAD,OAAwBA,EAASE,QAsBjEkE,EAAO,uCAAG,WAAUC,GAAV,qCAAArJ,EAAA,6DAAuBsJ,EAAvB,+BAA8C,CAAE1E,YAAa,UAAWsE,KAAM,QAAUK,EAAxF,+BAAsHJ,EAAtH,SAITpE,EAAQU,IAAKgB,wBAJJ,SAKQ1B,EAAM,GAAD,OAAIwB,IAAJ,YAAoB8C,GAAOC,GALxC,YAKTtE,EALS,QAOHoC,GAPG,yCASJmC,EAAQvE,IATJ,UAYQ,MAApBA,EAASC,OAZG,wBAcPuE,EAAU,KAdH,oBAiBoBxE,EAASE,OAjB7B,QAiBDuE,EAjBC,OAkBPD,EAAUC,EAAaC,aAlBhB,gEAoBL,CAAEtE,MC/EyB,ED+EaoE,WApBnC,WAuBQ,MAApBxE,EAASC,OAvBG,sBAyBL,CAAEG,MCnFc,GD0DX,WA4BQ,MAApBJ,EAASC,OA5BG,kCA8BCD,EAASE,OA9BV,oFAmCX,gBAAayE,WAnCF,sBAqCL,CAAEvE,MCjGsB,GD4DnB,oDAyCZ,MAzCY,kEAAH,sDA4CPwE,EAAS,uCAAG,WAAOC,GAAP,SAAA7J,EAAA,+EACrBoJ,EAAO,qCAAwCS,EAAxC,aADc,2CAAH,sDAGT1D,EAAO,uCAAG,WAAO2D,GAAP,SAAA9J,EAAA,+EACnBoJ,EAAO,yBAAyBU,IAAW9B,MAAK,SAAArH,GAAI,kCAAUA,GAAV,IAAgBmJ,gBADjD,2CAAH,sDAGPC,EAAM,uCAAG,WAAOF,EAAmBG,EAAkBC,GAA5C,SAAAjK,EAAA,+EAClBoJ,EAAO,iBAAmBS,EAAnB,qBAAyCG,EAAzC,iBAA0DC,KAD/C,2CAAH,0DAGNC,EAAQ,uCAAG,qCAAAlK,EAAA,6DAASmK,EAAT,EAASA,KAAMC,EAAf,EAAeA,GAAqBzJ,EAApC,EAAmBA,KAAQmJ,QAAiBD,EAA5C,EAA4CA,UAAgBQ,EAA5D,EAAuDC,IAAvD,kBACpBlB,EAAQ,4BAAD,YAAC,eACDH,GADA,IAEHpC,OAAQ,OACR1B,KAAMY,KAAKC,UAAU,CAAEmE,OAAMC,KAAIzJ,OAAMkJ,YAAWQ,gBACnD,SAAArF,GAAQ,OAAIA,EAASoC,OALJ,2CAAH,sDAORmD,EAAU,uCAAG,WAAO/I,EAAeqI,EAAmBC,EAAiBE,EAAkBK,GAA5E,SAAArK,EAAA,+EACtBoJ,EAAQ,8BAAD,OAA+BS,EAA/B,kBAAkDrI,EAAlD,iBAAgEsI,GAAhE,YAAC,eACDb,GADA,IAEHpC,OAAQ,MACR1B,KAAMY,KAAKC,UAAU,CAAEqE,WAAUL,gBAClC,SAAAhF,GAAQ,OAAIA,EAASoC,OALF,2CAAH,8DAoBVoD,EAAiB,uCAAG,WAAOX,EAAmBrI,EAAewI,GAAzC,SAAAhK,EAAA,+EAC7BoJ,EAAO,qCAAuCS,EAAvC,kBAA0DrI,EAA1D,oBAA2EwI,QAAYpJ,GAAW,SAAA6J,GAAG,OACvGA,EAAIrD,GACc,MAAfqD,EAAIxF,OAAiB,GAAKwF,EAAIvF,OAC9BiE,EAAesB,OAJM,2CAAH,0DAMjBC,EAAuB,uCAAG,WAAOb,EAAmBrI,EAAewI,GAAzC,SAAAhK,EAAA,+EACnCoJ,EAAO,qCAAqCS,EAArC,kBAAwDrI,EAAxD,oBAAyEwI,EAAzE,wCACAf,GADA,IAEHpC,OAAQ,UACT,SAAA4D,GAAG,OAAIA,EAAIrD,GAAKnB,QAAQC,UAAYiD,EAAesB,OAJnB,2CAAH,0D,wBE/FvBE,GAAwB,SAAC5M,EAAYyL,GAAb,MAA+D,CAChGvL,KANoC,2BAOpC2M,aAAc,CACV7M,KAAIyL,UACJqB,SAAU,QACVC,OAAQ,YAcHC,GAAwB,SAACpK,EAAYqJ,GAAb,MAAgE,CACjG/L,KARoC,2BASpC0C,OACAqJ,a,wGClEG,IA8DMgB,GAAyB,SAACC,EAAiBpB,EAAmBC,EAAiBE,EAAkBK,EAAkBO,GAA1F,MAAyJ,CAC3L3M,KAZqC,4BAarCgN,UAASnB,UAASE,WAAUK,WAAUR,YAAWe,iBAQxCM,GAAyB,SAACnN,EAAYyL,GAAb,MAAgE,CAClGvL,KANqC,4BAOrC2M,aAAc,CACV7M,KAAIyL,UACJsB,OAAQ,SACRD,SAAU,W,oLCrEX,IAAMM,GAAiB,SAACC,GAAD,OHfY,IGgBrCA,EACGC,IADH,MHfwC,IGiBpCD,EACDC,IADC,MAED,IAmFKC,GAAyB,SAACzB,EAAmB0B,GAApB,MAAuE,CACzGtN,KARqC,4BASrC4L,YACA0B,WAuFSC,GAAoB,SAACzN,GAAD,MAA0C,CACvEE,KAP+B,sBAQ/BF,OAsDS0N,GAAgC,SAACC,GAAD,MAAyD,CAClGzN,KAAM,oCACNyN,UAWSC,GAAgC,SAACnC,GAAD,MAA2D,CACpGvL,KAAM,oCACNuL,YAoDSoC,GAAsC,iBAAkD,CACjG3N,KAAM,4CAWG4N,GAAsC,SAACrC,GAAD,MAAiE,CAChHvL,KAAM,0CACNuL,YCnTEpK,GACN,CACI0M,cAAc,EACdC,cAAc,EACdC,cAAe,GACfC,QAAS,IAqQE5K,GAlQC,WACf,IADgBZ,EACjB,uDADyBrB,GAAckC,EACvC,uCACI,GDFsB,eCEnBA,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIqL,cAAc,EACdlM,aAASgB,EAETmL,cAAc,EACdE,QAAS,KAIjB,GDa+B,wBCb5B3K,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIb,aAASgB,IAIjB,GDRgC,yBCQ7BU,EAAOrD,KACV,CAAC,IACW0C,EAASW,EAATX,KACR,OAAO,2BACAF,GADP,IAEIb,QAAQ,2BACDa,EAAMb,SACNe,KAKf,GHxD4B,qBGwDzBW,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIqL,cAAc,IAItB,GHVoC,6BGUjCxK,EAAOrD,KACV,CAAC,IACW0C,EAAmBW,EAAnBX,KAAMqJ,EAAa1I,EAAb0I,SACd,OAAO,2BACAvJ,GADP,IAEIqL,cAAc,EACdlM,QAAQ,2BAAMe,GAAP,IAAaqJ,eAI5B,GHrCoC,6BGqCjC1I,EAAOrD,KACV,CAAC,IACW2M,EAAiBtJ,EAAjBsJ,aACR,OAAO,2BACAnK,GADP,IAEIqL,cAAc,EACdG,QAAS,GACTD,cAAc,GAAD,mBAAMvL,EAAMuL,eAAZ,CAA2BpB,MAIhD,GDxB+B,wBCwB5BtJ,EAAOrD,KACV,CAAC,IACW4L,EAAcvI,EAAduI,UACR,OAAO,2BACApJ,GADP,IAEI8K,YAAQ3K,EACRiJ,cAIR,GDRqC,8BCQlCvI,EAAOrD,KACV,CAAC,IACWsN,EAAWjK,EAAXiK,OACR,OAAO,2BACA9K,GADP,IAEI8K,WAIR,GDDqC,8BCClCjK,EAAOrD,KACV,CAAC,IACW2M,EAAiBtJ,EAAjBsJ,aACR,OAAO,2BACAnK,GADP,IAEIuL,cAAc,GAAD,mBAAMvL,EAAMuL,eAAZ,CAA2BpB,MAIhD,GDuC8B,uBCvC3BtJ,EAAOrD,KACV,CAAC,IACW0C,EAASW,EAATX,KACR,OAAO,2BACAF,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHtL,WAKZ,GDakC,2BCb/BW,EAAOrD,KACV,CAAC,IACW+L,EAAa1I,EAAb0I,SACUkC,EAAqBzL,EAAMwL,QAArCjC,SACR,OAAO,2BACAvJ,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHjC,WAAUkC,mBACVC,kBAAcvL,MAK1B,GAAmB,0BAAhBU,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHjC,SAAUvJ,EAAMwL,QAAQC,iBACxBA,sBAAkBtL,MAK9B,GAAmB,4CAAhBU,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHC,sBAAkBtL,EAClBuL,kBAAcvL,MAK1B,GAAmB,sCAAhBU,EAAOrD,KACV,CAAC,IACkBkO,EAAiB7K,EAAxBoK,MACR,OAAO,2BACAjL,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHE,mBAUZ,GALG7K,EAAOrD,KAKS,4CAAhBqD,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIwL,QAAQ,2BACDxL,EAAMwL,SADN,IAEHE,kBAAcvL,EACdsL,sBAAkBtL,MAK9B,GD1B+B,wBC0B5BU,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIsL,cAAc,EACdD,cAAc,EACdlM,aAASgB,EACTqL,QAAS,CACLjC,SAAUvJ,EAAMwL,QAAQjC,YAKpC,GF/M6B,sBE+M1B1I,EAAOrD,KAEN,OAAO,2BACAwC,GADP,IAEIsL,cAAc,IAItB,GFpKqC,8BEoKlCzK,EAAOrD,KACV,CAAC,IAAD,EACyCqD,EAA7BsJ,oBADZ,WAC2BhK,EAD3B,EAEUoL,OAAkCpL,IAAjBgK,EACjBnK,EAAMuL,cADU,sBAEZvL,EAAMuL,eAFM,CAESpB,IAE/B,OAAO,2BACAnK,GADP,IAEIsL,cAAc,EACdnM,aAASgB,EACTqL,QAAS,CACLjC,SAAUvJ,EAAMwL,QAAQjC,UAE5BgC,kBAIR,GFtKqC,8BEsKlC1K,EAAOrD,KACV,CAAC,IACW2M,EAAiBtJ,EAAjBsJ,aACR,OAAO,2BACAnK,GADP,IAEIsL,cAAc,EACdnM,aAASgB,EACTqL,QAAS,GACTD,cAAc,GAAD,mBAAOvL,EAAMuL,eAAiB,IAA9B,CAAmCpB,MAIxD,GDjE+B,wBCiE5BtJ,EAAOrD,KACV,CAAC,IACWF,EAAOuD,EAAPvD,GACR,OAAO,2BACA0C,GADP,IAEIuL,cAAevL,EAAMuL,cAActL,QAAO,SAAA0L,GAAG,OAAIA,EAAIrO,KAAOA,OAIpE,MClQmC,4BDkQhCuD,EAAOrD,KAECmB,GAGJqB,G,SEhQLrB,GAAsB,CAAEuH,QAAS,IA4CxBtF,GA1CC,eAACZ,EAAD,uDAASrB,GAAckC,EAAvB,8CAAgEC,aAAQd,GAAO,SAAAA,GAExE,gCAAhBa,EAAOrD,KAENwC,EAAM4L,iBAAczL,EAGA,wCAAhBU,EAAOrD,KAEXwC,EAAM4L,YAAc/K,EAAOX,KAGP,2BAAhBW,EAAOrD,MAAqD,oCAAhBqD,EAAOrD,KAEvDwC,EAAMkG,QAAU,GAGI,yCAAhBrF,EAAOrD,KAEXwC,EAAMkG,QAAQwD,KAAO7I,EAAO0I,SAGR,8CAAhB1I,EAAOrD,KAEXwC,EAAMkG,QAAQyD,GAAK9I,EAAO0I,SAGN,kCAAhB1I,EAAOrD,KAEXwC,EAAMkG,QAAQ2D,IAAMhJ,EAAOgJ,IAGP,8BAAhBhJ,EAAOrD,OAEXwC,EAAMkG,QAAQhG,KAAOW,EAAOX,UC3B9BvB,GACN,CAEIkN,SAAU,GACVC,GAAI,CACAC,gBAAgB,EAChBC,kBAAkB,EAClBC,YAAa,KACbC,cAAe,KACfC,kBAAmB,KACnBC,iBAAiB,IAqFVxL,GAjFC,eAACZ,EAAD,uDAASrB,GAAckC,EAAvB,8CAAuDC,aAAQd,GAAO,WAElF,MAAoB,uBAAjBa,EAAOrD,MAENwC,EAAM8L,GAAGE,kBAAmB,OAC5BhM,EAAM8L,GAAGI,cAAgB,OAIV,+BAAhBrL,EAAOrD,MAENwC,EAAM8L,GAAGE,kBAAmB,OAC5BhM,EAAM6L,SAAWhL,EAAOgL,WAIT,+BAAhBhL,EAAOrD,MAENwC,EAAM8L,GAAGE,kBAAmB,OAC5BhM,EAAM8L,GAAGI,cAAgBrL,EAAO8D,MAAM0H,aAItB,sBAAjBxL,EAAOrD,MAENwC,EAAM8L,GAAGC,gBAAiB,OAC1B/L,EAAM8L,GAAGG,YAAc,OAkBR,wBAAhBpL,EAAOrD,MAENwC,EAAM8L,GAAGM,iBAAkB,OAC3BpM,EAAM8L,GAAGK,kBAAoB,OAId,gCAAhBtL,EAAOrD,KAMS,gCAAhBqD,EAAOrD,MAENwC,EAAM8L,GAAGM,iBAAkB,OAC3BpM,EAAM8L,GAAGK,kBAAoBtL,EAAO8D,MAAM0H,kBAI3B,qBAAhBxL,EAAOrD,OAENwC,EAAM8L,GAAN,eAAgBnN,GAAamN,WAb7B9L,EAAM8L,GAAGM,iBAAkB,O,kGCrEnC,IAAMzN,GAAsB,CAAE4M,cAAe,IC4CvC3K,GAAU0L,0BAAgB,CAC5BzE,KAjCS,WACZ,IADa7H,EACd,wDADsCa,EACtC,uCACI,GAAG,WAAYA,GAAU,SAAUA,EAAM,OAErC,QAAUA,EAAM,OAAN,KAGd,OAAOA,EAAOrD,MAEV,IAAK,mBACL,IAAK,oBACL,IAAK,oBACL,IAAK,4BACL,IAAK,kCACD,OAAO,EAEX,IAAK,4BACL,IAAK,4BACL,IAAK,oCACL,IAAK,2BACL,IAAK,2BACL,IAAK,4BACL,IAAK,4BACL,IAAK,0CACL,IAAK,0CACD,OAAO,EAEX,QACI,OAAOwC,IAMfuM,aACAC,cACAjP,SACAiE,ODxCW,eAACxB,EAAD,uDAASrB,GAAckC,EAAvB,8CAAmDC,aAAQd,GAAO,SAAAe,GAEzD,oCAAhBF,EAAOrD,MAEPuD,EAAMwK,cAAczL,KAAK,CACrBxC,GAAI,qBACJyL,QAAS6B,IAAF,MACPR,SAAU,UACVC,OAAQ,WAII,oCAAhBxJ,EAAOrD,MAEPuD,EAAMwK,cAAczL,KAAK,CACrBxC,GAAI,oBACJyL,QAASlI,EAAOkI,QAChBqB,SAAU,QACVC,OAAQ,WAII,wBAAhBxJ,EAAOrD,MAEHuD,EAAMwK,cAAckB,OAAS,IAE7B1L,EAAMwK,cAAgB,UCoB5BmB,GAAW,SAA2BC,EAA4BC,GAAvD,OACb,SAACC,GAAD,OAAgBD,EAASD,EAAGE,MAEnBC,GAA+BJ,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLkMvC,SAACvM,GAAD,OAA2BA,EAAMoJ,aKjMvD4D,GAAqBN,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLmMvC,SAACvM,GAAD,OAAoCA,EAAM8K,QAAU,MKlMhEmC,GAA0BP,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLoMvC,SAACvM,GAAD,OAA2BA,EAAMb,WKnMlD+N,GAA0BR,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLqMvC,SAACvM,GAAD,OAA2BA,EAAMwL,QAAQtL,QKpM1DiN,GAA8BT,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLsMvC,SAACvM,GAAD,OAA2BA,EAAMwL,QAAQjC,YKrM9D6D,GAA+BV,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLuMvC,SAACvM,GAAD,OAA2BA,EAAMwL,QAAQC,oBKtM/D4B,GAA2BX,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLwMvC,SAACvM,GAAD,OAA2BA,EAAMwL,QAAQE,gBKvM3D4B,GAA4BZ,IAAS,SAACK,GAAD,OAAmBA,EAAER,aLyMvC,SAACvM,GAAD,OAA2BA,EAAMqL,gBKxMpDkC,GAA6Bb,IAAS,SAACK,GAAD,OAAmBA,EAAER,aL0MvC,SAACvM,GAAD,OAA2BA,EAAMsL,gBKzMrDkC,GAA4Bd,IAAS,SAACK,GAAD,OAAmBA,EAAER,aL2MvC,SAACvM,GAAD,OAA2BA,EAAMuL,eAAiB,MKzMrEkC,GAAiBf,IAAS,SAACK,GAAD,OAAmBA,EAAEP,cHnC9B,SAACxM,GAAD,OAAkBA,EAAM4L,eGoCzC8B,GAAuBhB,IAAS,SAACK,GAAD,OAAmBA,EAAEP,cHnC9B,SAACxM,GAAD,OAAkBA,EAAMkG,WGqC/CyH,GAAyBjB,IAAS,SAACK,GAAD,OAAmBA,EAAEvL,UDhC9B,SAACxB,GAAD,OAAkBA,EAAMuL,iBC+C/C3K,MCvFAA,GAXC0L,0BAChB,CACIsB,wBAAeC,mBACfC,SAAU,eAAC9N,EAAD,uDAAS,EAAT,OAAeA,KCId+N,GARKzB,0BAAgB,CAChCR,KACAvD,OACA/G,YCqBJwM,IAAcC,QAAU,SAACtJ,EAAqBuJ,EAAwBC,GAElE,YAAsBhO,IAAnBwE,EAAMtE,gBAIWF,IAAjBwE,EAAMH,QAEG,KAAOG,EAAMH,QAAYG,EAAMH,OAAS,MAKxDwJ,IAAcxH,OAAS,gBAAEnG,EAAF,EAAEA,SAAU8F,EAAZ,EAAYA,IAAZ,IAAiBC,cAAjB,MAA0B,MAA1B,EAAiC1B,EAAjC,EAAiCA,KAAjC,OACnBM,IAAK3E,WAAaA,EACZ4F,IAAIC,QAAQC,EAAKC,EAAQ1B,GAAM6C,MAAK,SAAAyC,GAAG,OAAIA,EAAIrD,GAAKnB,QAAQC,UAAYD,QAAQI,OAAO,CAAEpB,OAAQwF,EAAIxF,YACrGgB,QAAQI,OAAO,CAAEvF,cAG3B,IAAM+N,GAASC,uBAAa,CAAEC,WAAW,IC9B5BC,GAAS,SAACvO,GAAD,OjBqCA,SAACA,GAAD,OAAoBA,EAAM6H,KiBrCJ2G,CAAQxO,EAAM8L,KAC7C2C,GAAqB,SAACzO,GAAD,OjBkCA,SAACA,GAAD,OAAoBA,EAAMiI,OAAOL,KiBlCX8G,CAAoB1O,EAAM8L,KAGrE6C,GAAc,SAAC3O,GAAD,OfwEA,SAACA,GAAD,OAAsBA,EAAMK,SexENuO,CAAa5O,EAAMuI,OACvDsG,GAAa,SAAC7O,GAAD,OfwEA,SAACA,GAAD,YAAyCG,IAAnBH,EAAMK,SexENyO,CAAY9O,EAAMuI,OACrDwG,GAAkB,SAAC/O,GAAD,OfwEA,SAACA,GAAD,OAAsBA,EAAMqI,QexEN2G,CAAiBhP,EAAMuI,OAC/D0G,GAAiB,SAACjP,GAAD,OfwEA,SAACA,GAAD,OAAsBA,EAAMsI,YexEN4G,CAAgBlP,EAAMuI,OAC7D4G,GAAe,SAACnP,GAAD,OfwEA,SAACA,GAAD,OAAsBA,EAAMoI,MexENgH,CAAcpP,EAAMuI,OCpB9D5G,GF2CO,SAAC0N,GAEZ,IAAMC,EAAmBC,aACrB,SAACC,EAAiBC,GACd,MAAW,WAARA,EAEQ,2BAAKD,GAAZ,IAAqB1B,SAAUuB,IAE5BG,KAEX,SAACE,EAAeD,GAEZ,GAAW,WAARA,UAA2CtP,IAAtBuP,EAAS5B,UAA0B4B,EAAS5B,SAAWuB,GAK/E,OAAOK,EAHH9K,QAAQ+K,KAAK,uCAiBzB,MAAO,CAAEhO,MAVKiO,sBAAY7B,GACtB8B,kBACIC,0BACIC,IACA3B,IAEJ7H,kBAAQ,2BAAKyH,KAAN,IAAqBgC,eAAgB,CAAEC,WAAY,CAACX,UEtErDM,CAFI,GAEdjO,M,yCCoBOuO,G,uKAdP,OACI,uBAAKC,MAAO,CAACC,QAAS,KAClB,gBAAC,KAAD,CAAYC,QAAQ,QAAQC,cAAY,GAAxC,gCAGA,gBAAC,KAAD,CAAYD,QAAQ,QAAQC,cAAY,GAAxC,uE,GATOC,a,uGCsBjBC,GAA6B,SAACf,EAAaJ,EAAsBxG,GAEnE,IAAM4H,EAAM,2BAELzC,KAFK,IAGRC,QAAS,SAACtJ,EAAqBuJ,EAAwBC,GAEnD,YAAsBhO,IAAnBwE,EAAMtE,gBAIWF,IAAjBwE,EAAMH,QAEG,KAAOG,EAAMH,QAAYG,EAAMH,OAAS,MAKxDgC,OAAQ,WAAgD3F,GAAhD,IAAER,EAAF,EAAEA,SAAU8F,EAAZ,EAAYA,IAAZ,IAAiBC,cAAjB,MAA0B,MAA1B,EAAiC1B,EAAjC,EAAiCA,KAAjC,OACJM,IAAK3E,WAAaA,EACZ4F,IAAIC,QAAQC,EAAKC,EAAQ1B,GAAM6C,MAAK,SAAAyC,GAAG,OAAIA,EAAIrD,GAAKnB,QAAQC,UAAYD,QAAQI,OAAO,CAAEpB,OAAQwF,EAAIxF,YACrGgB,QAAQI,OAAO,CAAEvF,gBAGzBiP,EAAmBC,aACrB,SAACC,EAAiBC,GACd,MAAW,WAARA,EAEQ,2BAAKD,GAAZ,IAAqB1B,SAAUuB,IAE5BG,KAEX,SAACE,EAAeD,GAEZ,GAAW,WAARA,UAA2CtP,IAAtBuP,EAAS5B,UAA0B4B,EAAS5B,SAAWuB,GAK/E,OAAOK,EAHH9K,QAAQ+K,KAAK,uCAMzB,OAAOpJ,kBAAQ,2BAAKkK,GAAN,IAAcT,eAAe,aACvCU,UAAU,gBAAD,OAAkBjB,GAC3BQ,WAAY,CAACX,IACVzG,OAUE8H,GAAoB,SAAgB/P,EAA0BgQ,EAAmBC,GAC7F,IAD8GhI,EAC/G,uDADwI,GAE9HiI,EAAahB,0BACfC,IACA1B,uBAAa,CAAEC,WAAW,KAG9B,OAAOsB,sBAAYhP,EAASiP,kBACxBiB,EACAN,GAA2BI,EAAWC,EAAShI,MAI1CkI,GAAe,SAAsDpP,EAAsBqP,GAA5E,OACxB,SAACC,GAAD,OACI,gBAAC,IAAD,CAAUtP,MAAOA,GACb,gBAACqP,EAAQC,M,ohBCtErB,IAMaC,GAAkB,SAACjQ,GAAD,OAAkB2J,IAAjB,KAAwB,IAAIzH,KAAK,IAAIA,KAAKlC,EAAMkQ,SAE1EC,G,2KAEmBnQ,GAEjB,OAAOA,EAAMzD,MAET,IAAK,iBACD,OAAQ,gBAAC,KAAD,MACZ,IAAK,iBACD,OAAO,gBAAC,KAAD,MACX,IAAK,mBACD,OAAO,gBAAC,KAAD,MACX,QACI,MAAO,O,uCAIMyD,GAErB,OAAOA,EAAMzD,MAET,IAAK,iBACD,IAAMwB,EAAWgD,KAAKiP,MAAMI,cAAc/P,MAAK,SAAA/B,GAAC,OAAIA,EAAEjC,KAAO2D,EAAMpD,gBACnE,OAAOmB,EAAWA,EAASzB,MAAQ0D,EAAMpD,aAC7C,IAAK,iBACD,MAAM,SAAN,OAAgBoD,EAAMqQ,SAC1B,IAAK,mBACD,IAAM1T,EAAcoE,KAAKiP,MAAMM,aAAajQ,MAAK,SAAAuD,GAAC,OAAIA,EAAEvH,KAAO2D,EAAMrD,eACrE,OAAOA,EAAcA,EAAYL,MAAQ0D,EAAMrD,YACnD,IAAK,UACD,IAAMD,EAAcqE,KAAKiP,MAAMO,aAAalQ,MAAK,SAAAuD,GAAC,OAAIA,EAAEvH,KAAO2D,EAAMlC,WACrE,OAAOpB,EAAcA,EAAYJ,MAAQqN,IAAvB,MACtB,QACI,MAAO,kB,+BAKlB,IAAD,SAKS5I,KAAKiP,MAHQ9R,EAFtB,EAEQsS,aAAuBvQ,EAF/B,EAE+BA,OAAQwQ,EAFvC,EAEuCA,UAAWC,EAFlD,EAEkDA,aAFlD,IAGQC,wBAHR,MAG2BV,GAH3B,EAIyBW,EAJzB,EAIQC,gBAEJ,OACI,gBAAC,KAAD,CAAMC,OAAK,GAEHJ,EAAe,gBAAC,KAAD,KAAgBA,GAAgC,UAGlDxR,IAAZhB,EACG,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAQgR,MAAO,CAAE6B,gBAAiBC,KAAM,OACnCjQ,KAAKkQ,aAAa/S,IAEvB,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYgT,aAAW,QACnB,gBAAC,KAAD,QAGR,gBAAC,KAAD,CACIC,QAASpQ,KAAKqQ,iBAAiBlT,GAC/BmT,UAAWV,EAAiBzS,MAEpC,KAGH+B,EAAOjB,QAAO,SAAA4E,GAAC,OAAIA,IAAM1F,KAASsN,OAAS,EACxC,gCAEQiF,EAAY,gBAAC,KAAD,KAAgBA,GAA6B,KAGzDxQ,EAAOxC,KAAI,SAAAuC,GAAK,OACZ,gBAAC,KAAD,CAAUwO,IAAKxO,EAAM3D,IACjB,gBAAC,KAAD,KAAS,EAAK4U,aAAajR,IACzB4Q,EAAqBA,EAAmB5Q,GAAS,KACnD,gBAAC,KAAD,CACImR,QAAS,EAAKC,iBAAiBpR,GAC/BqR,UAAWV,EAAiB3Q,UAKhD,U,GApFAsP,aA2FTgC,gBAnGS,SAACvS,GAAD,MAAgC,CACpDqR,cAAe5Q,2BAAiBT,GAChCuR,aAAc/Q,0BAAgBR,GAC9BwR,aAAcjR,0BAAgBP,MAgGnBuS,CAAyBnB,I,6DCtGzBoB,OAvBf,SAAmBvB,GAEf,OACI,gBAAC,KAAD,iBAAeA,EAAf,CAAuBZ,QAAQ,WAAWoC,QAASxB,EAAMwB,QACrDC,WAAS,EACTC,WAAY,CACRC,UAAU,EACVzC,MAAO,CACH0C,SAAU,UAEdC,WAAY,CACR3C,MAAO,CACHC,QAAS,mBAGjB2C,eACI,gBAAC,KAAD,CAAgBC,SAAS,QAAQ7C,MAAO,CAAC8C,UAAW,IAChD,gBAAC,KAAD,UAdhB,YAgBiBhC,EAAM5S,Q,+ICsBhB6U,OA7Bf,SAAqBjC,GACpB,IACWrJ,EAAmCqJ,EAAnCrJ,KAAMuL,EAA6BlC,EAA7BkC,UAAWC,EAAkBnC,EAAlBmC,cACzB,OACI,gBAAC,KAAD,CACIxL,OAAQA,EACRyL,QAASD,EACTE,kBAAgB,qBAChBC,mBAAiB,4BAErB,gBAAC,KAAD,CAAajW,GAAG,sBAAsB,iBACtC,gBAAC,KAAD,KACE,gBAAC,KAAD,CAAmBA,GAAG,4BAAtB,2EAIF,gBAAC,KAAD,KACE,gBAAC,KAAD,CAAQmV,QAASW,EAAeI,MAAM,WAAtC,UAGA,gBAAC,KAAD,CAAQf,QAASU,EAAWhD,MAAO,CAACqD,MAAOC,KAAI,MAAOC,WAAS,GAA/D,a,qBC7BH,SAASC,GAAa1C,GAC5B,IACWhQ,EAAmBgQ,EAAnBhQ,MAAOwR,EAAYxB,EAAZwB,QAETmB,EAAeC,mBAAQ,kBACzBpB,EAAU,kBAAMA,EAAQxR,SAASd,IAC/B,CAACc,EAAOwR,IAEd,OACI,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYN,aAAW,OAAOM,QAASmB,GACnC,gBAAC,KAAD,Q,+3CCmBhB,IAAME,GAAgB,SAACC,GAAD,YAA8C5T,IAAN4T,IAAoBC,MAAMD,IAElFE,GAAkC,CAAEhB,UAAW,IAErD,SAASiB,KACR,IAAD,EACwCC,mBAAS,GADjD,oBACWC,EADX,KACuBC,EADvB,KAWI,MAAO,CATKC,uBAAY,SAAC/W,GACrB,IAAMY,EAAOoW,sBAAYhX,GACb,OAATY,GAECkW,EAAclW,EAAKqW,wBAAwBC,SAEhD,IAEWZ,mBAAQ,kBAAM,gBAAC,KAAD,CAAeO,WAAYA,MAAgB,CAACA,KAS5E,SAASM,GAAazD,GACrB,IACW5P,EAAkC4P,EAAlC5P,MAAOsT,EAA2B1D,EAA3B0D,SAAUpD,EAAiBN,EAAjBM,aAD7B,EAEyB2C,KAFzB,oBAEWU,EAFX,KAEgB7Q,EAFhB,KAQI,OACI,gCACI,gBAAC,KAAD,CAAWvG,KAAK,SAASkV,WAAS,EAACrC,QAAQ,WAAWF,MAAO8D,GAAY1W,MAAOqN,IAAF,MAAsBvM,MAAOgD,EAAMiQ,SAAW,GAAIqD,SAN5G,SAAC9P,GAAD,OAA4C8P,EAAS,2BAAKtT,GAAN,IAAaiQ,QAASuD,SAAShQ,EAAEiQ,OAAOzW,aAOhH,gBAAC,KAAD,CAAWb,KAAK,SAASkV,WAAS,EAACrC,QAAQ,WAAWF,MAAO8D,GAAY1W,MAAOqN,IAAF,MAAwBvM,MAAOgD,EAAM0T,eAAiB,GAAIJ,SANlH,SAAC9P,GAAD,OAA4C8P,EAAS,2BAAKtT,GAAN,IAAa0T,cAAeF,SAAShQ,EAAEiQ,OAAOzW,aAOxH,gBAAC,KAAD,CAAaqU,WAAS,EAACvC,MAAO8D,GAAY5D,QAAQ,YAC9C,gBAAC,KAAD,CAAYuE,IAAKA,GAAMhK,IAAvB,OACA,gBAAC,KAAD,CAAQvM,MAAOgD,EAAMzD,aAAe,GAAI+W,SAR1B,SAAC9P,GAAD,OAA6C8P,EAAS,2BAAKtT,GAAN,IAAazD,YAAaiH,EAAEiQ,OAAOzW,MAAOuL,SAAU,MAQlD7F,MAAOA,GAExEwN,EAAa7S,KAAI,gBAAEpB,EAAF,EAAEA,GAAIC,EAAN,EAAMA,MAAN,OAAiB,gBAAC,KAAD,CAAUkS,IAAKnS,EAAIe,MAAOf,GAAKC,QAIrE,gBAAC,KAAD,CACImV,WAAS,EACTjD,IAAKpO,EAAMzD,YACXyS,QAAQ,WACR9S,MAC2B,QAAtB8D,EAAMzD,YAAyBgN,IAA/B,MACsB,QAAtBvJ,EAAMzD,YAAyBgN,IAA/B,MAAgD,sBAErDuF,MAAO8D,GACP5V,WAA0B8B,IAAnBkB,EAAMuI,UAA0BoK,MAAM3S,EAAMuI,UAAY,GAAKvI,EAAMuI,SAC1EpM,KAAK,SACLwX,UAAW3T,EAAMzD,YACjB+W,SAAU,SAAA9P,GAAC,OAAI8P,EAAS,2BAAItT,GAAL,IAAYuI,SAAUiL,SAAShQ,EAAEiQ,OAAOzW,WAC/DsU,WAAY,CACRsC,aAAc,gBAAC,KAAD,CAAgBjC,SAAS,OACZ,QAAtB3R,EAAMzD,YAAyB,KACT,QAAtByD,EAAMzD,YAAyB,MAAQ,QAQpE,SAASsX,GAAajE,GACrB,IACW5P,EAAmC4P,EAAnC5P,MAAOsT,EAA4B1D,EAA5B0D,SAAUtD,EAAkBJ,EAAlBI,cAD7B,EAEyB6C,KAFzB,oBAEWU,EAFX,KAEgB7Q,EAFhB,KAMI,OACI,gCACI,gBAAC,KAAD,CAAa2O,WAAS,EAACvC,MAAO8D,GAAY5D,QAAQ,YAC9C,gBAAC,KAAD,CAAYuE,IAAKA,GAAMhK,IAAvB,OACA,gBAAC,KAAD,CAAQvM,MAAOgD,EAAMxD,cAAgB,GAAI8W,SAPzB,SAAC9P,GAAD,OAA6C8P,EAAS,2BAAKtT,GAAN,IAAaxD,aAAcgH,EAAEiQ,OAAOzW,UAOjC0F,MAAOA,GAE3EsN,EAAc3S,KAAI,gBAAEpB,EAAF,EAAEA,GAAIC,EAAN,EAAMA,MAAN,OAAiB,gBAAC,KAAD,CAAUkS,IAAKnS,EAAIe,MAAOf,GAAKC,QAI1E,gBAAC,KAAD,CACImV,WAAS,EACTrC,QAAQ,WACR9S,MAAOqN,IAAF,MACLuF,MAAO8D,GACP5V,MAAQyV,GAAczS,EAAMuI,UAAiBvI,EAAMuI,SAAX,GACxCpM,KAAK,SACLmX,SAnBkB,SAAC9P,GAAD,OAA4C8P,EAAS,2BAAKtT,GAAN,IAAauI,SAAUiL,SAAShQ,EAAEiQ,OAAOzW,WAoB/GsU,WAAY,CACRsC,aAAc,gBAAC,KAAD,CAAgBjC,SAAS,OAAzB,WAYlC,SAASmC,GAAWlE,GACnB,IACW5P,EAAkC4P,EAAlC5P,MAAOsT,EAA2B1D,EAA3B0D,SAAUnD,EAAiBP,EAAjBO,aAD7B,EAEyB0C,KAFzB,oBAEWU,EAFX,KAEgB7Q,EAFhB,KAOI,OACI,gCACI,gBAAC,KAAD,CAAa2O,WAAS,EAACvC,MAAO8D,GAAY5D,QAAQ,YAC9C,gBAAC,KAAD,CAAYuE,IAAKA,GAAMhK,IAAvB,OACA,gBAAC,KAAD,CAAQvM,MAAOgD,EAAMtC,SAAW,GAAI4V,SAPpB,SAAC9P,GAAD,OAA6C8P,EAAS,2BAAKtT,GAAN,IAAatC,QAAS8F,EAAEiQ,OAAOzW,UAOjC0F,MAAOA,GAEtEyN,EAAa9S,KAAI,gBAAEpB,EAAF,EAAEA,GAAIC,EAAN,EAAMA,MAAN,OAAiB,gBAAC,KAAD,CAAUkS,IAAKnS,EAAIe,MAAOf,GAAKC,QAIzE,gBAAC,KAAD,CACImV,WAAS,EACTrC,QAAQ,WACR9S,MAAOqN,IAAF,MACLuF,MAAO8D,GACP5V,MAAQyV,GAAczS,EAAMuI,UAAiBvI,EAAMuI,SAAX,GACxCpM,KAAK,SACLmX,SAnBkB,SAAC9P,GAAD,OAA4C8P,EAAS,2BAAKtT,GAAN,IAAauI,SAAUiL,SAAShQ,EAAEiQ,OAAOzW,cA2B/H,IAAM+W,GAAe,SAAC/T,GAAD,OAChByS,GAAczS,EAAMuI,WAAavI,EAAMuI,SAAW,IAC/B,mBAAfvI,EAAM7D,WAA+C2C,IAAlBkB,EAAMiQ,cAA2CnR,IAAlBkB,EAAMiQ,UAA0B0C,MAAM3S,EAAMiQ,UAC/F,mBAAfjQ,EAAM7D,WAAoD2C,IAAvBkB,EAAMxD,cAC1B,YAAfwD,EAAM7D,WAAwC2C,IAAlBkB,EAAMtC,SAAyB+U,GAAczS,EAAMuI,YAsDzEyL,O,OAAAA,MAlDR,SAAmBpE,GACzB,IACWM,EAA0DN,EAA1DM,aAAcF,EAA4CJ,EAA5CI,cAAeiE,EAA6BrE,EAA7BqE,WAAY9D,EAAiBP,EAAjBO,aADrD,EAEyB0C,KAFzB,oBAEWU,EAFX,KAEgB7Q,EAFhB,OAG8BoQ,mBAA2B,CACjD7W,GAAI6J,cACJ3J,KAAM,iBACN+X,IAAKtE,EAAME,KACXtR,SAAS,EACTQ,SAAU4Q,EAAM5Q,WARxB,oBAGWgB,EAHX,KAGkBmU,EAHlB,KAWI,OACI,gBAAC,KAAD,CAAQ5N,MAAM,EAAM0N,WAAYA,GAC5B,gBAAC,KAAD,KAAc1K,IAAd,OACA,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAa8H,WAAS,EAACrC,QAAQ,WAAWF,MAAO8D,IAC7C,gBAAC,KAAD,CAAYW,IAAKA,GAAMhK,IAAvB,OACA,gBAAC,KAAD,CACI7G,MAAOA,EACP1F,MAAOgD,EAAM7D,KACbmX,SAAU,SAAA9P,GAAC,OAAI2Q,EAAS,2BAAKnU,GAAN,IAAa7D,KAAMqH,EAAEiQ,OAAOzW,WACnD,gBAAC,KAAD,CAAUA,MAAM,kBAAkBuM,IAAlC,OACA,gBAAC,KAAD,CAAUvM,MAAM,kBAAkBuM,IAAlC,OACA,gBAAC,KAAD,CAAUvM,MAAM,WAAWuM,IAA3B,SAIY,mBAAfvJ,EAAM7D,KACH,gBAACkX,GAAD,CAAcrT,MAAOA,EAAOsT,SAAUa,EAAUjE,aAAcA,IAC9C,mBAAflQ,EAAM7D,KACP,gBAAC0X,GAAD,CAAc7T,MAAOA,EAAOsT,SAAUa,EAAUnE,cAAeA,IAC/C,YAAfhQ,EAAM7D,KACP,gBAAC2X,GAAD,CAAY9T,MAAOA,EAAOsT,SAAUa,EAAUhE,aAAcA,IAC5D,MAIZ,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAQgC,MAAM,UAAUf,QAASxB,EAAMwE,UAClC7K,IADL,OAGA,gBAAC,KAAD,CAAQ4I,MAAM,UAAUwB,UAAWI,GAAa/T,GAAQgP,QAAQ,YAAYoC,QAAS,kBAAMxB,EAAMyE,WAAWrU,KACvGuJ,IADL,Y,uECjLD+K,G,4MA3BHC,aAAe,SAAC3U,GAEjB,EAAKgQ,MAAM0D,UAEV,EAAK1D,MAAM0D,SAAS1T,EAAM4U,cAAcxX,Q,uDAK5C,IADK,EAG4C2D,KAAKiP,MAA9C6E,EAHH,EAGGA,MAAOC,EAHV,EAGUA,KAAM1X,EAHhB,EAGgBA,MAHhB,IAGuB2X,gBAHvB,SAIL,OACI,gBAAC,KAAD,CAAaC,UAJD,WAIgBD,SAAUA,GAClC,gBAAC,KAAD,CAAWC,UAJH,UAImBH,GAC3B,gBAAC,KAAD,CACI3D,aAAY2D,EACZC,KAAMA,EACN1X,MAAOA,EACPsW,SAAU3S,KAAK4T,cACd5T,KAAKiP,MAAMiF,e,GAvBD3F,a,wCCAhB4F,G,uKANP,OACI,gBAAC,KAAD,iBAAsBnU,KAAKiP,MAA3B,CAAkCmF,QAAS,gBAAC,KAAD,a,GAL7B7F,aCVb8F,GAAa,eAAClF,EAAD,uDAAc,IAAIhO,KAAlB,OACtBgO,EAAKmF,eCIIC,GAAU,SAAClW,EAAkBtB,GAAnB,IAAqCzB,EAArC,uDAA0C6J,cAAgBgK,EAA1D,uDAAiEkF,KAAjE,MAAiG,CACpH7Y,KAH+B,WAI/BF,KACA6T,OACA9Q,WACAkB,cAAe,kBACfxC,YAGSyX,GAA2B,SAACnW,EAAkBkB,EAAuB1D,GAA1C,IAAgEP,EAAhE,uDAAqE6J,cAAgBgK,EAArF,wDAA4F,IAAIhO,MAAOmT,cAAvG,MAA8I,CAClL9Y,KAAM,iBACNF,KACA6T,OACA9Q,WACAkB,gBACA1D,iBAGS4Y,GAA2B,SAACpW,EAAkBkB,EAAuB+P,GAA1C,IAA2DhU,EAA3D,uDAAgE6J,cAAgBgK,EAAhF,wDAAuF,IAAIhO,MAAOmT,cAAlG,MAAyI,CAC7K9Y,KAAM,iBACNF,KACA6T,OACA9Q,WACAkB,gBACA+P,YAGSoF,GAA6B,SAACrW,EAAkBkB,EAAuB3D,GAA1C,IAA+DN,EAA/D,uDAAoE6J,cAAgBgK,EAApF,wDAA2F,IAAIhO,MAAOmT,cAAtG,MAA+I,CACrL9Y,KAAM,mBACNF,KACA6T,OACA9Q,WACAkB,gBACA3D,gB,2gBClBJ,IAAM+Y,GAAQC,KAAOC,IAAV,MAKLC,GAAYF,KAAOC,IAAV,MAUTE,G,4MAEF/W,MACA,CACIjB,QAAS,Y,EAGLiY,gBAAkB,SAAC5X,GAEvB,EAAK6X,SAAS,CAAE7X,a,EAGZ8X,gBAAkB,SAACrS,GAEvB,EAAKoS,SAAS,CAAElY,QAAS8F,EAAEiQ,OAAOzW,S,EAG9B8Y,eAAiB,WAErB,QAA0BhX,IAAvB,EAAKH,MAAMZ,QACd,CAAC,IACWL,EAAY,EAAKiB,MAAjBjB,QACAsB,EAAa,EAAK4Q,MAAlB5Q,SACFY,EAAQsV,GAAQlW,EAAsB,aAAZtB,OAAyBoB,EAAYpB,QACzCoB,IAAzB,EAAK8Q,MAAMmG,WAEV,EAAKnG,MAAMmG,UAAU/W,EAAUY,K,uDAM1C,IAAD,EAC6Ce,KAAKiP,MAAtC5T,EADZ,EACYA,gBAAiBM,EAD7B,EAC6BA,YACjByB,EAAY4C,KAAKhC,MAAjBZ,QAER,OACI,gBAACuX,GAAD,KACI,gBAAC,GAAD,CAAkBb,MAAOlL,IAAF,MAAkB+J,SAAU3S,KAAKgV,gBAAiB3Y,MAAOe,EAAS4W,UAAQ,GAE7F3Y,EAAgB4C,QAAO,SAAA4M,GAAC,MAAe,OAAXA,EAAErP,QAAekB,KAAI,SAAAmO,GAAC,OAC9C,gBAAC,GAAD,CAAaxO,MAAOwO,EAAEvP,GAAImS,IAAK5C,EAAEvP,GAAIC,MAAOsP,EAAEtP,YAItD,gBAAC,KAAD,CAAa0Y,UAAW,SAAiBvD,WAAS,EAACvC,MAAO,CAAC8C,UAAW,KAClE,gBAAC,KAAD,CAAWgD,UAXP,YAWuBrL,IAA3B,OACA,gBAAC,KAAD,CAAa8H,WAAS,GAClB,gBAAC,KAAD,CAAQrU,MAAO2D,KAAKhC,MAAMjB,QAAS4V,SAAU3S,KAAKkV,iBAC9C,gBAAC,KAAD,CAAU7Y,MAAM,YAAYuM,IAA5B,OAEIjN,EAAYe,KAAI,SAAAlB,GAAI,OAAI,gBAAC,KAAD,CAAUiS,IAAKjS,EAAKF,GAAIe,MAAOb,EAAKF,IAAKE,EAAKD,aAMtF,gBAACuZ,GAAD,KACI,gBAAC,KAAD,CAAQzG,QAAQ,YAAYmD,MAAM,UAAUwB,cAAsB7U,IAAZf,EAAuBqT,QAASzQ,KAAKmV,gBAAiBvM,IAA5G,a,GA1DK2F,aAyEVgC,gBARS,SAACvS,EAA2BqX,GAChD,MAAQ,CACJha,gBAAiBiD,0BAAgBN,GACjCrC,YAAa4C,0BAAgBP,GAC7Bd,YAAakB,gCAAsBiX,EAAShX,SAAUL,MAI/CuS,CAAyBwE,IC1GzBO,GADS/G,qBAAwCpQ,G,+EC6CjDoX,OA/Bf,SAAuBtG,GACtB,IACWoC,EAAuBpC,EAAvBoC,QAAS+D,EAAcnG,EAAdmG,UADrB,EAE2BjD,oBAAS,GAFpC,oBAEWvM,EAFX,KAEiB4P,EAFjB,KAGUnX,EAAWkQ,aAAiB+G,IAC5BG,EAAoBnD,uBAAY,SAACjU,EAAkBY,QACpCd,IAAdiX,GAECA,EAAUnW,KAEf,CAACmW,IAMJ,OAJAM,qBAAU,kBAAM,kBAAMF,GAAQ,MAAQ,IAEtC5S,QAAQ4C,IAAI,yBAGR,gBAAC,KAAD,CAAQI,KAAMA,EAAM0N,YAAU,GAC1B,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAY7C,QAASY,GACjB,gBAAC,KAAD,OAEJ,gBAAC,KAAD,CAAYhD,QAAQ,MACfzF,IADL,QAIJ,gBAAC+M,GAAD,CAAatX,SAAUA,EAAU+W,UAAWK,M,iFClBxD,IA4CMG,G,4MAEF5X,MAAe,CAAEmR,KAAM0G,OAAQC,QAAQ,OAAQC,UAAU,EAAQ3Y,SAAS,G,EAOlE4Y,cAAgB,SAAC/W,GAErB,EAAKgW,SAAS,CAAEgB,cAAehX,K,EAG3BiX,qBAAuB,kBAAM,EAAKjB,SAAS,CAAEgB,mBAAe9X,K,EAE5DgY,eAAiB,WAErB,IAAMtT,EAAI,EAAK7E,MAAMiY,mBACX9X,IAAN0E,GAEA,EAAKoM,MAAMmH,YAAYvT,GAE3B,EAAKoS,SAAS,CAAEgB,mBAAe9X,K,EAG3BkY,kBAAoB,kBAAM,EAAKpB,SAAS,CAAEc,UAAU,K,EAEpDO,YAAc,SAACjX,GAEnB,EAAK4P,MAAMsH,SAASlX,GACpB,EAAK4V,SAAS,CAAEc,UAAU,K,EAGtBS,eAAiB,SAACC,GAAD,gBAClBC,KAAKC,MAAMF,EAAW,IADJ,YACWG,KAAQH,EAAW,GAAI,EAAG,O,EAEtD7G,iBAAmB,SAACvQ,GAAD,MACP,YAAfA,EAAM7D,WAAyC2C,IAAnBkB,EAAMuI,SAA0BgB,IAAI,MAAevJ,EAAMuI,cAClEzJ,IAAnBkB,EAAMuI,SAA0B,EAAK4O,eAAenX,EAAMuI,UAAY,I,EAEnEwN,UAAY,SAACzH,GAEwBA,EAAjCpO,cAAiCoO,EAAlBwB,KAD1B,IACmC0H,EADpC,aAC6ClJ,EAD7C,0BAEUtO,EAAuB,2BACtBwX,GADsB,IAEzBtD,IAAKsC,KAAM,EAAK7X,MAAMmR,MAAMzJ,SAC5B7H,SAAS,IAEb,EAAKoR,MAAMsH,SAASlX,I,mEA3CpBW,KAAKiP,MAAM6H,iB,+BA+Cd,IAAD,SACuD9W,KAAKhC,MAAhDiY,EADZ,EACYA,cAAe9G,EAD3B,EAC2BA,KAAM4G,EADjC,EACiCA,SAAU3Y,EAD3C,EAC2CA,QAD3C,EAEgG4C,KAAKiP,MAAzF8H,EAFZ,EAEYA,QAFZ,IAEqBC,eAFrB,MAE+B,GAF/B,EAEmC3H,EAFnC,EAEmCA,cAAeE,EAFlD,EAEkDA,aAAcC,EAFhE,EAEgEA,aAFhE,IAE8EnR,gBAF9E,MAEyF,GAFzF,EAGU4Y,EAAUpB,OAAQqB,SAAS,GAAI,OAAOC,SACtCC,EAAUvB,OAAQwB,IAAI,EAAG,OAAOF,SAEhCG,EAAMzB,KAAM1G,GAAM2G,QAAQ,OAC1ByB,EAAkBP,EAAQ/Y,QAAO,SAAAoB,GAAK,OAAKA,EAAMxB,SAAWgY,KAAMxW,EAAMkU,KAAKiE,OAAOF,MACpFG,EAAcF,EAAgBG,WAAU,SAAA7U,GAAC,MAAe,aAAXA,EAAErH,SAAwB,EAE7E,OACI,gCACI,gBAAC,GAAD,CAAaoK,OAAQqQ,EAAe7E,cAAepR,KAAKkW,qBAAsB/E,UAAWnR,KAAKmW,iBAEzFJ,EACG,gBAAC,GAAD,CACI1G,cAAeA,EACfE,aAAcA,EACdC,aAAcA,EACdL,KAAMA,EAAKzJ,SACXgO,WAAY1T,KAAKsW,YACjB7C,SAAUzT,KAAKqW,kBACfhY,SAAUA,IACd,MAGFoZ,GAAera,EACb,gBAAC,GAAD,CAAegY,UAAWpV,KAAKoV,YAC/B,KAGR,gBAAC,KAAD,CAAyBuC,MAAOC,MAC5B,uBAAKC,UAAWd,EAAQe,MACpB,uBAAKD,UAAWd,EAAQgB,QACpB,gBAAC,KAAD,CAAY1b,MAAO8S,EAAMwD,SAAU,SAAAxD,GAAI,OAAI,EAAK8F,SAAS,CAAE9F,UAAS6I,mBAAoBxH,GAAWyG,QAASA,EAASG,QAASA,KAElI,gBAAC,GAAD,CACIlY,OAAQqY,EAAgBtZ,QAAO,SAAA4E,GAAC,MAAe,aAAXA,EAAErH,QACtCoU,iBAAkB,SAACvQ,GAAD,OAA6B,EAAKuQ,iBAAiBvQ,IACrEyQ,gBAAiB,SAACjN,GAAD,OAAyB,gBAAC8O,GAAD,CAAc1S,MAAO4D,EAAG4N,QAAS,EAAKuF,mBAEhFyB,EACI,gBAAC,KAAD,CAAKjG,MAAM,UAAUqG,UAAWd,EAAQkB,IAAKxH,QAAS,kBAAM,EAAKwE,SAAS,CAAEc,UAAU,MAClF,gBAAC,KAAD,OAGJ,gBAAC,KAAD,CAAKvE,MAAM,UAAUqG,UAAWd,EAAQkB,IAAKxH,QAAS,kBAAM,EAAKwE,SAAS,CAAE7X,SAAS,MACjF,gBAAC,KAAD,c,GApGfmR,aA+GN2J,0BA3JA,SAACC,GAAD,MAAiB,CAC5BL,KAAM,CAEFM,WAAiC,EAArBD,EAAME,QAAQC,KAC1BC,cAAoC,EAArBJ,EAAME,QAAQC,MAEjCP,OAAO,eACAI,EAAMK,OAAOC,WAEpBR,IAAK,CACDjH,SAAU,WACV0H,OAA6B,EAArBP,EAAME,QAAQC,KACtBK,MAA4B,EAArBR,EAAME,QAAQC,SA+IdJ,CAAmB3H,aA9HV,SAACvS,EAA2BqX,GAA5B,MAAiD,CACrE2B,QAAS3B,EAAShX,SAAWM,2BAAiBX,EAAOqX,EAAShX,eAAYF,EAC1EkR,cAAe5Q,2BAAiBT,GAChCuR,aAAc/Q,0BAAgBR,GAC9BwR,aAAcjR,0BAAgBP,OAGP,SAAC0G,EAAD,OAAkBrG,EAAlB,EAAkBA,SAAlB,MAAyC,CAChEkY,SAAU,SAAClX,GAAD,QAA6BhB,GAAWqG,EAASO,aAAmB5G,EAAUgB,KACxF+W,YAAa,SAAC/W,GAAD,QAA6BhB,GAAWqG,EAASK,aAAsB1G,EAAUgB,EAAM/D,MACpGwb,aAAc,mBAAMzY,GAAWqG,EAASD,aAAuBpG,QAoHjCkS,CAA6CqF,K,qaC5JzEgD,G,4MAEF5a,MAAe,CAAEsR,QAAS,I,EAElBuJ,oBAAsB,SAAChW,GAE3B,EAAKoS,SAAS,CAAE3F,QAASzM,EAAEiQ,OAAOzW,S,EAG9Byc,MAAQ,WACf,IAAD,EAC2D,EAAK7J,MAApD/R,EADZ,EACYA,YAAamI,EADzB,EACyBA,oBAAqBhH,EAD9C,EAC8CA,SAClCiR,EAAY,EAAKtR,MAAjBsR,aACWnR,IAAhBjB,GAGCmI,EADcoP,GAAyBpW,EAAUnB,EAAY5B,GAAIgU,IAGrE,EAAKL,MAAM8J,QAAQC,U,EAGfvF,SAAW,WAEf,EAAKxE,MAAM8J,QAAQC,U,uDAItB,IACW1J,EAAYtP,KAAKhC,MAAjBsR,QAER,OACI,uBAAKnB,MAAO,CAACC,QAAS,KAClB,gBAAC,KAAD,CAAYC,QAAQ,WAAWC,cAAY,GAA3C,IAA8C1F,IAA9C,OACA,gBAAC,KAAD,CAAW8H,WAAS,EAACvC,MAAO,CAAC8C,UAAW,GAAI1V,MAAOqN,IAAF,MAC7CvM,MAAOiT,EAASqD,SAAU3S,KAAK6Y,sBAEnC,uBAAK1K,MAAO,CAAC8C,UAAW,KACpB,gBAAC,KAAD,CAAQ5C,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAK8Y,MAAO9F,SAAU1D,EAAQ7E,OAAS,GAAI7B,IAA7F,OACA,gBAAC,KAAD,CAAQyF,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAKyT,SAAUtF,MAAO,CAAE8K,WAAY,IAAMrQ,IAA5F,a,GAtCG2F,aAyDRgC,gBAZS,SAACvS,EAA2BqX,GAEhD,IAAMhX,EAAWgX,EAAShX,SAC1B,MAAQ,CACJnB,YAAakB,gCAAsBC,EAAUL,OAI1B,SAAC0G,GAAD,MAAoB,CAC3CW,oBAAqB,SAACpG,GAAD,OAAkByF,EAASW,aAAoBpG,QAGzDsR,CAA6CqI,I,4UCtDtDM,G,4MAEFlb,MAAe,CAAEpC,YAAa,I,EAEtBud,oBAAsB,SAACtW,GAE3B,EAAKoS,SAAS,CAAErZ,YAAaiH,EAAEiQ,OAAOzW,S,EAGlCyc,MAAQ,WACf,IAAD,EAC2D,EAAK7J,MAApD/R,EADZ,EACYA,YAAamI,EADzB,EACyBA,oBAAqBhH,EAD9C,EAC8CA,SAClCzC,EAAgB,EAAKoC,MAArBpC,iBACWuC,IAAhBjB,GAGCmI,EADcqP,GAA2BrW,EAAUnB,EAAY5B,GAAIM,IAGvE,EAAKqT,MAAM8J,QAAQC,U,EAGfvF,SAAW,WAEf,EAAKxE,MAAM8J,QAAQC,U,uDAItB,IACWzJ,EAAiBvP,KAAKiP,MAAtBM,aACA3T,EAAgBoE,KAAKhC,MAArBpC,YAER,OACI,uBAAKuS,MAAO,CAACC,QAAS,KAClB,gBAAC,KAAD,CAAYC,QAAQ,WAAWC,cAAY,GAA3C,IAA8C1F,IAA9C,OACA,gBAAC,KAAD,CAAa8H,WAAS,EAACvC,MAAO,CAAC8C,UAAW,IACtC,gBAAC,KAAD,KAAarI,IAAb,OACA,gBAAC,KAAD,CAAQvM,MAAOT,EAAa+W,SAAU3S,KAAKmZ,qBAEnC5J,EAAa7S,KAAI,gBAAEpB,EAAF,EAAEA,GAAIC,EAAN,EAAMA,MAAN,OACb,gBAAC,KAAD,CAAUkS,IAAKnS,EAAIe,MAAOf,GAAKC,QAK/C,uBAAK4S,MAAO,CAAC8C,UAAW,KACpB,gBAAC,KAAD,CAAQ5C,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAK8Y,MAAO9F,SAA0B,KAAhBpX,GAAqBgN,IAA7F,OACA,gBAAC,KAAD,CAAQyF,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAKyT,SAAUtF,MAAO,CAAE8K,WAAY,IAAMrQ,IAA5F,a,GA9CG2F,aAkERgC,gBAbS,SAACvS,EAA2BqX,GAEhD,IAAMhX,EAAWgX,EAAShX,SAC1B,MAAQ,CACJnB,YAAakB,gCAAsBC,EAAUL,GAC7CuR,aAAc/Q,0BAAgBR,OAIX,SAAC0G,GAAD,MAAoB,CAC3CW,oBAAqB,SAACpG,GAAD,OAAkByF,EAASW,aAAoBpG,QAGzDsR,CAA6C2I,I,oUClEtDA,G,4MAEFlb,MAAe,CAAEob,iBAAkB,I,EAE3BC,iBAAmB,SAACxW,GAExB,EAAKoS,SAAS,CAAEmE,iBAAkBvW,EAAEiQ,OAAOzW,S,EAGvCyc,MAAQ,WACf,IAAD,EAC2D,EAAK7J,MAApD/R,EADZ,EACYA,YAAamI,EADzB,EACyBA,oBAAqBhH,EAD9C,EAC8CA,SAChBxC,EAAiB,EAAKmC,MAAxCob,sBACWjb,IAAhBjB,GAGCmI,EADcmP,GAAyBnW,EAAUnB,EAAY5B,GAAIO,IAGrE,EAAKoT,MAAM8J,QAAQC,U,EAGfvF,SAAW,WAEf,EAAKxE,MAAM8J,QAAQC,U,uDAItB,IACWM,EAAetZ,KAAKiP,MAApBqK,WACAF,EAAqBpZ,KAAKhC,MAA1Bob,iBAER,OACI,uBAAKjL,MAAO,CAACC,QAAS,KAClB,gBAAC,KAAD,CAAYC,QAAQ,WAAWC,cAAY,GAA3C,IAA8C1F,IAA9C,OACA,gBAAC,KAAD,CAAa8H,WAAS,EAACvC,MAAO,CAAC8C,UAAW,IACtC,gBAAC,KAAD,KAAarI,IAAb,OACA,gBAAC,KAAD,CAAQvM,MAAO+c,EAAkBzG,SAAU3S,KAAKqZ,kBAExCC,EAAW5c,KAAI,gBAAEpB,EAAF,EAAEA,GAAIC,EAAN,EAAMA,MAAN,OACX,gBAAC,KAAD,CAAUkS,IAAKnS,EAAIe,MAAOf,GAAKC,QAK/C,uBAAK4S,MAAO,CAAC8C,UAAW,KACpB,gBAAC,KAAD,CAAQ5C,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAK8Y,MAAO9F,SAA+B,KAArBoG,GAA0BxQ,IAAlG,OACA,gBAAC,KAAD,CAAQyF,QAAQ,SAASmD,MAAM,UAAUf,QAASzQ,KAAKyT,SAAUtF,MAAO,CAAE8K,WAAY,IAAMrQ,IAA5F,a,GA9CG2F,aAkERgC,gBAbS,SAACvS,EAA2BqX,GAEhD,IAAMhX,EAAWgX,EAAShX,SAC1B,MAAQ,CACJib,WAAY7a,2BAAiBT,GAC7Bd,YAAakB,gCAAsBC,EAAUL,OAI1B,SAAC0G,GAAD,MAAoB,CAC3CW,oBAAqB,SAACpG,GAAD,OAAkByF,EAASW,aAAoBpG,QAGzDsR,CAA6C2I,I,8tBCtD5D,IAAMvE,GAAQC,KAAOC,IAAV,MAKL0E,GAAmB3E,KAAOC,IAAV,KAER,IAcR2E,GAAgB,CAClB,CAAEC,QAAS,YAAale,MAAOqN,IAAF,MAAe8Q,KAAMd,GAAUe,KAAMC,MAClE,CAAEH,QAAS,cAAele,MAAOqN,IAAF,MAAiB8Q,KAAMG,GAAYF,KAAMG,MACxE,CAAEL,QAAS,YAAale,MAAOqN,IAAF,MAAe8Q,KAAMR,GAAUS,KAAMI,OAGhEC,G,4MAEFhc,MACA,CACIic,eAAe,G,EAGXC,iBAAmB,WAEvB,EAAKjF,SAAS,CAAEgF,eAAe,K,EAG3BE,kBAAoB,SAAC3e,GAAD,OAAkB,WAE1C,EAAKyT,MAAM8J,QAAQjb,KAAK,EAAKmR,MAAMmL,MAAMjW,IAAM,IAAM3I,GACrD,EAAKyZ,SAAS,CAAEgF,eAAe,M,EAG3BI,WAAa,WAEjB,EAAKpF,SAAS,CAAEgF,eAAe,K,gEAIlC,IAAD,OACI,OACI,gBAAC,KAAD,CAAQ5I,QAASrR,KAAKka,iBAAkBtU,KAAM5F,KAAKhC,MAAMic,cAAevJ,WAAS,GAE7E,2BACI,gBAAC,KAAD,KAEI8I,GAAM9c,KAAI,gBAAE+c,EAAF,EAAEA,QAAea,EAAjB,EAAWX,KAAYpe,EAAvB,EAAuBA,MAAvB,OACN,gBAAC,KAAD,CAAUkS,IAAKgM,EAASc,QAAM,EAAC9J,QAAS,EAAK0J,kBAAkBV,IAC3D,gBAAC,KAAD,KACI,gBAACa,EAAD,OAEJ,gBAAC,KAAD,KAAe/e,Y,mCAUtB0D,GAEjB,OAAOA,EAAMzD,MAET,IAAK,iBACD,OAAQ,gBAAC,KAAD,MACZ,IAAK,iBACD,OAAO,gBAAC,KAAD,MACX,IAAK,mBACD,OAAO,gBAAC,KAAD,MACX,QACI,MAAO,O,uCAIMyD,GAErB,OAAOA,EAAMzD,MAET,IAAK,iBACD,IAAMwB,EAAWgD,KAAKiP,MAAMI,cAAc/P,MAAK,SAAA/B,GAAC,OAAIA,EAAEjC,KAAO2D,EAAMpD,gBACnE,OAAOmB,EAAWA,EAASzB,MAAQ0D,EAAMpD,aAC7C,IAAK,iBACD,MAAM,SAAN,OAAgBoD,EAAMqQ,SAC1B,IAAK,mBACD,IAAM1T,EAAcoE,KAAKiP,MAAMM,aAAajQ,MAAK,SAAAuD,GAAC,OAAIA,EAAEvH,KAAO2D,EAAMrD,eACrE,OAAOA,EAAcA,EAAYL,MAAQ0D,EAAMrD,YACnD,QACI,MAAO,kB,sCAIKqD,GAEpB,OAAO2J,IAAP,KAAc,IAAIzH,KAAK,IAAIA,KAAKlC,EAAMkQ,U,wCAIzC,IAAD,OACYjS,EAAgB8C,KAAKiP,MAArB/R,YACR,QAAmBiB,IAAhBjB,EACH,OAG+B,YAAIA,EAAYgC,QACtCjB,QAAO,SAAA4E,GAAC,MAAgB,aAAXA,EAAErH,MAAoC,cAAXqH,EAAErH,QAC1Cgf,UALT,kBAGWrd,EAHX,KAGuB0Z,EAHvB,WAOI,OACI,gBAAC,KAAD,CAAM9G,OAAK,GACP,gBAAC,KAAD,KAAgBnH,IAAhB,YAEiBzK,IAAZhB,EACG,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAQgR,MAAO,CAAC6B,gBAAiBC,KAAM,OAClCjQ,KAAKkQ,aAAa/S,IAEvB,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYgT,aAAW,QACnB,gBAAC,KAAD,QAGR,gBAAC,KAAD,CAAcC,QAASpQ,KAAKqQ,iBAAiBlT,GAAUmT,UAAWtQ,KAAKkP,gBAAgB/R,MAG3F,KAIH0Z,EAAKpM,OAAS,EACX,gCACI,gBAAC,KAAD,KAAgB7B,IAAhB,OAEIiO,EAAKna,KAAI,SAAAuC,GAAK,OACV,gBAAC,KAAD,CAAUwO,IAAKxO,EAAM3D,IACjB,gBAAC,KAAD,KAAS,EAAK4U,aAAajR,IAC3B,gBAAC,KAAD,CAAcmR,QAAS,EAAKC,iBAAiBpR,GAAQqR,UAAW,EAAKpB,gBAAgBjQ,UAMrG,S,oCAUvB,IAAD,OACqBkF,EAAUnE,KAAKiP,MAAxBmL,MAASjW,IACjB,OACI,gBAACsW,EAAA,EAAD,KAEIjB,GAAM9c,KAAI,gBAAE+c,EAAF,EAAEA,QAAeiB,EAAjB,EAAWhB,KAAX,OACN,gBAACiB,EAAA,EAAD,CAAOlN,IAAKgM,EAASmB,KAAMzW,EAAM,IAAMsV,EAASoB,OAAQ,SAAC5L,GAAD,OACpD,gBAACyL,EAAD,iBAAUzL,EAAV,CAAiB5Q,SAAU,EAAK4Q,MAAM5Q,kBAI9C,gBAACsc,EAAA,EAAD,KACI,gCACK3a,KAAK8a,kBACN,gBAAC,GAAD,KACI,gBAACvB,GAAD,KACI,gBAAC,KAAD,CAAQlL,QAAQ,MAAMmD,MAAM,YAAYf,QAASzQ,KAAKqa,YAClD,gBAAC,KAAD,c,+BAY5B,OACI,gCACKra,KAAK+a,kBACL/a,KAAKgb,mB,GA1KGzM,aA2LVgC,gBATS,SAACvS,EAA2BqX,GAAqB,IAC7DhX,EAAagX,EAAbhX,SACR,MAAQ,CACJnB,YAAakB,gCAAsBC,EAAUL,GAC7CqR,cAAe5Q,2BAAiBT,GAChCuR,aAAc/Q,0BAAgBR,MAIvBuS,CAAyByJ,I,yoCCrOxC,IAAMrF,GAAQC,KAAOC,IAAV,MAKLC,GAAYF,KAAOC,IAAV,MAUTE,G,4MAEF/W,MACA,CACIjB,QAAS,Y,EAGLiY,gBAAkB,SAAC5X,GAEvB,EAAK6X,SAAS,CAAE7X,a,EAGZ8X,gBAAkB,SAACrS,GAEvB,EAAKoS,SAAS,CAAElY,QAAS8F,EAAEiQ,OAAOzW,S,EAG9B8Y,eAAiB,WAErB,QAA0BhX,IAAvB,EAAKH,MAAMZ,QACd,CAAC,IACWL,EAAY,EAAKiB,MAAjBjB,QACAsB,EAAa,EAAK4Q,MAAlB5Q,SACFY,EAAQsV,GAAQlW,EAAsB,aAAZtB,OAAyBoB,EAAYpB,GACrE,EAAKkS,MAAM/J,gBAAgB7G,EAAUY,K,EAIrCgc,gBAAkB,WACzB,IAAD,EACwD,EAAKhM,MAAjD7J,EADZ,EACYA,iBAAkBlI,EAD9B,EAC8BA,YAAamB,EAD3C,EAC2CA,SACpCnB,GAECkI,EAAiB/G,EAAUnB,EAAY5B,K,2DAK9C,IACW4B,EAAgB8C,KAAKiP,MAArB/R,YACR,GAAGA,EAEC,OAAOA,EAAYgC,OAAOI,MAAK,SAAAuL,GAAC,MT5ET,aS4EaA,EAAErP,U,sCAK7C,IAAD,EAC6CwE,KAAKiP,MAAtC5T,EADZ,EACYA,gBAAiBM,EAD7B,EAC6BA,YACjByB,EAAY4C,KAAKhC,MAAjBZ,QAER,OACI,gBAAC,GAAD,KACI,gBAAC,GAAD,CAAkB0W,MAAOlL,IAAF,MAAkB+J,SAAU3S,KAAKgV,gBAAiB3Y,MAAOe,EAAS4W,UAAQ,GAE7F3Y,EAAgB4C,QAAO,SAAA4M,GAAC,MAAe,OAAXA,EAAErP,QAAekB,KAAI,SAAAmO,GAAC,OAC9C,gBAAC,GAAD,CAAaxO,MAAOwO,EAAEvP,GAAImS,IAAK5C,EAAEvP,GAAIC,MAAOsP,EAAEtP,YAItD,gBAAC,KAAD,CAAa0Y,UAAW,SAAiBvD,WAAS,EAACvC,MAAO,CAAC8C,UAAW,KAClE,gBAAC,KAAD,CAAWgD,UAXP,YAWuBrL,IAA3B,OACA,gBAAC,KAAD,CAAa8H,WAAS,GAClB,gBAAC,KAAD,CAAQrU,MAAO2D,KAAKhC,MAAMjB,QAAS4V,SAAU3S,KAAKkV,iBAC9C,gBAAC,KAAD,CAAU7Y,MAAM,YAAYuM,IAA5B,OAEIjN,EAAYe,KAAI,SAAAlB,GAAI,OAAI,gBAAC,KAAD,CAAUiS,IAAKjS,EAAKF,GAAIe,MAAOb,EAAKF,IAAKE,EAAKD,aAMtF,gBAAC,GAAD,KACI,gBAAC,KAAD,CAAQ8S,QAAQ,YAAYmD,MAAM,UAAUwB,cAAsB7U,IAAZf,EAAuBqT,QAASzQ,KAAKmV,gBAAiBvM,IAA5G,W,qCAMOxL,EAAuB8B,GAC7C,IAESnC,EADkBiD,KAAKiP,MAArBtT,YACoB2D,MAAK,SAAA/B,GAAC,OAAIA,EAAEjC,KAAO8B,EAAQL,WACjDme,EAAene,EAAUA,EAAQxB,MAAQqN,IAAnB,MAEtBuS,EAAoBjc,EAAOuL,OAAS,EACpC,IAAItJ,KAAKjC,EAAOA,EAAOuL,OAAS,GAAG0E,MACnC,IAAIhO,KAAK/D,EAAQ+R,MAEvB,OACI,gBAAC,GAAD,KACI,gBAAC,KAAD,CAAYd,QAAQ,QAAQ+M,WAAS,GAChCxS,IADL,OAIA,gBAAC,KAAD,CAAYyF,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,QAAQ+M,WAAS,GAAExS,IAAvC,KAA8C,IAAIzH,KAAK/D,EAAQ+R,QAE/D,gBAAC,KAAD,CAAYd,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,QAAQ+M,WAAS,GAAEF,GAEvC,gBAAC,KAAD,CAAY7M,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,QAAQ+M,WAAS,GAAExS,IAAvC,KAA8CuS,IAG9C,gBAAC,GAAD,KACI,gBAAC,KAAD,CAAQ9M,QAAQ,SAASmD,MAAM,YAAYf,QAASzQ,KAAKib,iBAAkBrS,IAA3E,W,+BAOf,IACW1L,EAAe8C,KAAKiP,MAApB/R,YACFE,EAAU4C,KAAKtB,aACfgb,OAAoBvb,IAAZf,EACV4C,KAAKqb,gBAELrb,KAAKsb,eAAele,EAASF,EAAcA,EAAYgC,OAAS,IAIpE,OACI,gCACKwa,O,GA7HQnL,aAkJVgC,gBAfS,SAACvS,EAA2BqX,GAChD,MAAQ,CACJha,gBAAiBiD,0BAAgBN,GACjCrC,YAAa4C,0BAAgBP,GAC7Bud,UAAW7c,qBAAWV,GACtBd,YAAakB,gCAAsBiX,EAAShX,SAAUL,OAInC,SAAC0G,GAAD,MAAoB,CAE3CQ,gBAAiB,SAAC7G,EAAkBY,GAAnB,OAA2CyF,EAASQ,aAAgB7G,EAAUY,KAC/FmG,iBAAkB,SAAC/G,EAAkB/C,GAAnB,OAAkCoJ,EAASU,aAAiB/G,EAAU/C,QAG7EiV,CAA6CwE,I,+aCrK5D,IAAMyG,GAAqB5G,aAAO6G,KAAP7G,CAAH,MAMlB8G,GAAW9G,KAAOC,IAAV,MA6BR8G,G,4MAOF3d,MACA,CACI4d,YAAa,gB,EAGTpC,MAAgB,CACpB,CAAEC,QAAS,eAAgBC,KAAM3E,GAAY4E,KAAMkC,KAAOtgB,MAAOqN,IAAF,MAAwBkT,SAAS,GAChG,CAAErC,QAAS,WAAYC,KAAMM,GAAYze,MAAOqN,IAAF,MAAkB+Q,KAAMoC,KAAY9M,MAAO,kBAAoB,CAAE+D,UAAtB,EAAE9V,gB,EAKvF8e,cAAgB,SAACC,EAAgC5f,GAErD,EAAK4S,MAAM8J,QAAQhV,QAAQ,EAAKmY,QAAQ7f,K,mEAjBxC2D,KAAKiP,MAAM3J,sB,8BAoBCsV,GAEZ,OAAO5a,KAAKiP,MAAMmL,MAAMjW,IAAM,IAAMyW,I,mCAIvC,IAAD,OACYvc,EAAa2B,KAAKiP,MAAlB5Q,SACR,QAAgBF,IAAbE,EAKH,OACI,gBAACoc,EAAA,EAAD,KAEIza,KAAKwZ,MAAM9c,KAAI,gBAAG+c,EAAH,EAAGA,QAAeiB,EAAlB,EAAYhB,KAAZ,OACX,gBAACiB,EAAA,EAAD,CAAOC,KAAM,EAAKsB,QAAQzC,GAAUhM,IAAKgM,EACrCoB,OAAQ,SAAC5L,GAAD,OAAW,gBAACyL,EAAD,iBAAUzL,EAAV,CAAiB5Q,SAAUA,WAGtD,gBAACsc,EAAA,EAAD,CAAOC,KAAM5a,KAAKkc,QAAQ,IAAKC,OAAK,GAChC,gBAACC,EAAA,EAAD,CAAUzU,GAAI3H,KAAKkc,QAAQlc,KAAKwZ,MAAMvb,QAAO,SAAAP,GAAC,OAAIA,EAAEoe,WAAS,GAAGrC,e,sCAO/E,IAAD,OACYlS,EAAavH,KAAKiP,MAAlB1H,SACR,OAAOvH,KAAKwZ,MAAM9c,KAAI,SAAAgd,GAAI,OAAIA,EAAKD,WAC1Bna,MAAK,SAAAma,GAAO,OAAyD,IAArDlS,EAAS8U,SAASC,QAAQ,EAAKJ,QAAQzC,QACzDzZ,KAAKwZ,MAAM,GAAGC,U,+BAIxB,IAAD,OACI,OACI,gCACI,gBAACiC,GAAD,KACK1b,KAAKuc,cAEV,gBAACf,GAAD,CAAoB7I,SAAU3S,KAAKgc,cAAe3f,MAAO2D,KAAKwc,gBAAiBC,YAAU,GAErFzc,KAAKwZ,MAAM9c,KAAI,gBAAEnB,EAAF,EAAEA,MAAa+e,EAAf,EAASX,KAAYF,EAArB,EAAqBA,QAASxK,EAA9B,EAA8BA,MAA9B,OACX,gBAAC,KAAD,eAAwBxB,IAAKgM,EAASle,MAAOA,EAAOoe,KAAM,gBAACW,EAAD,MAAUje,MAAOod,GAAcxK,EAAQA,EAAM,EAAKA,OAAS,c,GAtE1HV,aAuFJgC,gBARS,SAACvS,EAA2BqX,GAA5B,MAAiD,CACrEnY,YAAamY,EAAShX,SAAWD,gCAAsBiX,EAAShX,SAAUL,QAASG,MAG5D,SAACuG,GAAD,MAAoB,CAC3CY,kBAAmB,kBAAMZ,EAASY,oBAGvBiL,CAA6CoL,I,kKC7H5D,IAAMe,GAAmB,SAAC,GAAD,IAAG9B,EAAH,EAAGA,KAAM1G,EAAT,EAASA,SAAU6E,EAAnB,EAAmBA,QAAS5K,EAA5B,EAA4BA,MAA5B,OACrB,gBAAC,KAAD,CAAQuC,WAAS,EAACrC,QAAQ,WAAWoC,QAAS,kBAAMsI,EAAQjb,KAAK8c,IAAOzM,MAAOA,GAC1E+F,IA4BMyI,OAxBf,SAAe1N,GAEX,IAAM2N,EAAO,UAAM3N,EAAMmL,MAAMjW,IAAlB,SACP0Y,EAAS,UAAM5N,EAAMmL,MAAMjW,IAAlB,WACf,OACI,gBAAC,GAAgB2Y,SAAjB,CAA0BzgB,MAAO4S,EAAM5Q,UACnC,gBAACoc,EAAA,EAAD,KACI,gBAACE,EAAA,EAAD,CAAOC,KAAMgC,EAAS/B,OAAQ,SAAAkC,GAAW,OACrC,gBAAC,GAAD,iBAAU9N,EAAW8N,OAEzB,gBAACpC,EAAA,EAAD,CAAOC,KAAMiC,EAAWhC,OAAQ,SAAAkC,GAAW,OACvC,gBAAC,GAAD,iBAAY9N,EAAW8N,OAE3B,gBAACpC,EAAA,EAAD,KACI,uBAAKxM,MAAO,CAACC,QAAS,KAClB,gBAAC,GAAD,CAAkB2K,QAAS9J,EAAM8J,QAAS6B,KAAMgC,GAAUhU,IAA1D,OACA,gBAAC,GAAD,CAAkBmQ,QAAS9J,EAAM8J,QAAS6B,KAAMiC,EAAW1O,MAAO,CAAC8C,UAAW,IAAKrI,IAAnF,YC9BToU,GAFajO,GADdJ,GAAkB/P,UAAS,iBAAkB,GACXoQ,I,qFCDhD,IASeP,GARf,CACIqF,MAAOlL,IAAF,MACL+Q,KAAMsD,KACNhJ,UAAWiJ,GACX/Y,IAAK,kBACLiC,MAAO,CAAC,kB,0WCTZ,IAAM+W,GAAKC,aAAH,MAgBOC,GAJGzI,KAAOC,IAAV,KACEsI,IAAM,SAAAlO,GAAK,OAAKA,EAAMwH,UAAY,GAAK,OAAgB,SAAAxH,GAAK,OAAIA,EAAMqO,QAAU,iBCZpFC,GAAb,WASI,WAAYC,GACX,IAAD,OADqEC,EACrE,iFARQC,YAAsB,EAQ9B,KAPQC,eAAyB,GAOjC,KANQH,eAMR,OALQC,gBAKR,OAWQG,YAAc,SAACvW,GAAD,YAA8ClJ,IAAZkJ,GAA8C,KAAnBA,EAAQoD,QAA0D,MAAvCpD,EAAQwW,OAAO,EAAG,GAAGC,eAXnI,KA8DQC,QAAU,SAAClb,GAEf,IAAMmb,EAAKnb,EAAE4K,IACbwQ,OAAOC,aAAa,EAAKR,iBACfvf,IAAP6f,GAAkC,IAAdA,EAAGvT,SAEtB,EAAKkT,gBAAkB9a,EAAEsb,SAAWH,EAAGF,cAAgBE,GAE3D,EAAKN,WAAaO,OAAOG,WAAW,EAAKC,YAAa,MAtE1D,KAyEQA,YAAc,WAElB,EAAKb,UAAU,EAAKG,eAAgB,EAAKW,eAAe,EAAKX,iBAC7D,EAAKA,eAAiB,IA3EtB3d,KAAKwd,UAAYA,EACjBxd,KAAKyd,WAAaA,EAClBQ,OAAOM,iBAAiB,QAASve,KAAK+d,SAb9C,sDAkBQE,OAAOO,oBAAoB,QAASxe,KAAK+d,WAlBjD,qCAuB2BU,GAEnB,GAAGze,KAAK4d,YAAYa,GAEhB,MAAO,YAGX,GAAuB,KAAnBA,EAAQhU,OACZ,CACI,IAAMiU,EAAWD,EAAQZ,OAAO,EAAG,GAC7Bc,EAAWF,EAAQZ,OAAO,GAAI,GAEpC,GAAgB,OAAba,IAAmC,OAAbC,GAAkC,OAAbA,GAE1C,MAAO,OAIf,GAAsB,KAAnBF,EAAQhU,QAGS,OADCgU,EAAQZ,OAAO,EAAG,GAG/B,MAAO,OAIf,GAAsB,KAAnBY,EAAQhU,QAGS,OADCgU,EAAQZ,OAAO,EAAG,GAG/B,MAAO,OAIf,OAAsB,IAAnBY,EAAQhU,OAEA,OAGW,IAAnBgU,EAAQhU,OAEA,WAGJ,cArEf,K,s6ECmEA,IAqCMmU,GAAY,SAAC,GAAD,IAAGrjB,EAAH,EAAGA,MAAH,IAAUc,aAAV,WAAkB8B,EAAlB,SACd,gBAAC,KAAD,CAAOgQ,MAAO,CAAEC,QAAS,EAAG6C,UAAW,KACnC,gBAAC,KAAD,CAAM4N,WAAS,EAACxG,QAAS,EAAGyG,WAAW,UACnC,gBAAC,KAAD,CAAM5gB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAW9S,GAE3Bc,EACI,gBAAC,KAAD,CAAYgS,QAAQ,SAAShS,GAEzB,gBAAC,GAAD,CAAWoa,SAAU,KACjB,gBAAC,KAAD,CAAYpI,QAAQ,SAApB,OAKpB,gBAAC,KAAD,CAAMnQ,MAAI,EAAC6gB,GAAI,GAEP1iB,EAAQ,gBAAC,KAAD,CAAOmV,MAAM,YAAe,SAOlDwN,G,4MAEMC,QAA0B,K,EAElCjhB,MAAe,CAAE4J,SAAU,GAAIsX,gBAAgB,EAAOrgB,OAAQ,U,EA2CtD+e,YAAc,SAACvW,GAAD,YAA8ClJ,IAAZkJ,GAA8C,KAAnBA,EAAQoD,QAA0D,MAAvCpD,EAAQwW,OAAO,EAAG,GAAGC,e,EAE3HqB,gBAAkB,SAACV,GACvB,IAAI,EAAKW,aAAT,CAQA,GAJI,EAAKxB,YAAYa,IACjB,EAAKxP,MAAMoQ,SAASZ,EAAQX,eAGR,KAAnBW,EAAQhU,OAAgB,CACzB,IAAMiU,EAAWD,EAAQZ,OAAO,EAAG,GAC7Bc,EAAWF,EAAQZ,OAAO,GAAI,GAEnB,OAAba,GAAmC,OAAbC,GAAkC,OAAbA,GAC3C,EAAK1P,MAAMoQ,SAASZ,GAI5B,GAAuB,KAAnBA,EAAQhU,OAES,OADAgU,EAAQZ,OAAO,EAAG,IAE/B,EAAK5O,MAAMoQ,SAASZ,GAI5B,GAAuB,KAAnBA,EAAQhU,OAES,OADAgU,EAAQZ,OAAO,EAAG,IAE/B,EAAK5O,MAAMoQ,SAASZ,GAIL,IAAnBA,EAAQhU,QAER,EAAKwE,MAAMoQ,SAASZ,GAGD,IAAnBA,EAAQhU,QACR,EAAKwE,MAAMqQ,aAAab,K,EAIxBc,kBAAoB,WACxB,EAAKtQ,MAAMuQ,YACX,EAAKvK,SAAS,CAAErN,SAAU,GAAI6X,uBAAmBthB,K,EAI7CuhB,gC,uCAAkC,WAAOxjB,GAAP,SAAAqB,EAAA,+EAC/B,IAAIiG,SAAwC,SAACmc,EAAQ/b,GAExD,EAAKqR,SAAS,CACV2K,yBAA0B,CACtBC,QAAS,SAACniB,GAAD,OAAOiiB,EAAOjiB,IACvBxB,UAEJ2C,OAAQ,eARsB,2C,wDAclCihB,mB,sBAAqB,kDAAAviB,EAAA,+DAIrB,EAAK0R,MAJgB,IAErBmL,MAAS2F,OAAUhhB,EAFE,EAEFA,MAAOqI,EAFL,EAEKA,UAC1B4Y,EAHqB,EAGrBA,YAAaC,EAHQ,EAGRA,gBAAiBrW,EAHT,EAGSA,YAG9BsW,OAAuC/hB,EANlB,SAUYwI,EAAQ,8BAAD,OAA+BS,EAA/B,mBAAmD6Y,EAAnD,iBAA2ED,IAV9F,aAUnB9jB,EAVmB,QAWdikB,mBAAuC,OAAjBjkB,EAAO6C,OAAkBA,IAAU7C,EAAO6C,OAXlD,iCAYM,EAAK2gB,gCAAgCxjB,GAZ3C,UAaA,SADfkkB,EAZe,QAcjBF,EAAmBG,WAAW,EAAKriB,MAAM4J,UAAY1L,EAAO2L,IAEtC,cAAjBuY,IACLF,EAAmBG,WAAW,EAAKriB,MAAM4J,WAG7C,EAAKqN,SAAS,CAAE2K,8BAA0BzhB,IAC1C,EAAK8Q,MAAMuQ,YAEU,WAAjBY,EAvBiB,wDA6BLjiB,IAAhB6hB,QAAiD7hB,IAApB8hB,QAAiD9hB,IAAhByL,IACxDhC,EAAW,EAAKgW,YAAYoC,GAAe,EAAhC,UAAqCE,SAArC,QAAyDG,WAAW,EAAKriB,MAAM4J,UAChG,EAAKqH,MAAMnH,WAAW/I,EAAOqI,EAAW4Y,EAAaC,EAAiBrY,EAAUgC,EAAYpC,MA/BvE,4C,EAmCrB8Y,WAAa,uBAAiCniB,IAA3B,EAAK8Q,MAAMrF,c1CnQX,I0CoQnB,EAAKqF,MAAMrF,YAAY2W,UAAgC,EAAK3C,YAAY,EAAK3O,MAAM+Q,e,EAEnFZ,WAAa,kBAAM,EAAKnQ,MAAMuR,a,EAE9BC,iBAAmB,kBAAM,EAAKxR,MAAM3F,c,EAEpCoX,iBAAmB,SAAC7d,GAA4C,IAAD,EAGf,EAF9C+E,EAAW/E,EAAEiQ,OAAOzW,WAEe8B,KAArC,YAAK8Q,MAAMrF,mBAAX,eAAwBhC,YACnB+Y,OAAO/Y,IAAuD,IAAzC+Y,OAAM,UAAC,EAAK1R,MAAMrF,mBAAZ,aAAC,EAAwBhC,UACrD/E,EAAEiQ,OAAO3E,MAAMqD,MAAQ,MAEvB3O,EAAEiQ,OAAO3E,MAAMqD,MAAQ,WAG/B,EAAKyD,SAAS,CAAErN,c,EAkHZgZ,aAAe,eAACC,EAAD,uDAAQ,GAAIC,EAAZ,uDAAkB,GAAInI,EAAtB,uDAA8B,GAA9B,OACnB,gBAAC,KAAD,CAAgBtK,QAAQ,gBAAgBF,MAAO,CAC3C8K,YAAa4H,EACbE,aAAcpI,EACd1H,WAAY6P,M,EAIZE,mBAAqB,WAAO,IAAD,EACG,EAAK/R,MAA/BxF,wBADuB,MACJ,GADI,IAEF,EAAKwF,MAAMmL,MAAM2F,OAAtChhB,EAFuB,EAEvBA,MAAOqI,EAFgB,EAEhBA,UACPa,EAA4B,EAAKgH,MAAjChH,wBACR,EAAKgN,SAAS,CAAEiK,gBAAgB,IAChCjX,EAAwBb,EAAWrI,EAAO0K,I,EAGtCwX,kBAAoB,WAAO,IACvBC,EAAmB,EAAKjS,MAAxBiS,eACR,EAAKjM,SAAS,CAAEiK,gBAAgB,IAChCgC,K,mEAjSAlhB,KAAKif,QAAU,IAAI1B,GAAQvd,KAAKmf,iBAChCnf,KAAKmhB,eAAenhB,KAAKiP,S,6CAIJ,OAAjBjP,KAAKif,SACLjf,KAAKif,QAAQmC,Y,gDAIKC,GACtBrhB,KAAKmhB,eAAeE,K,qCAGDpS,GAA4B,IACvC+Q,EAA8G/Q,EAA9G+Q,YAAaC,EAAiGhR,EAAjGgR,gBAAiBrW,EAAgFqF,EAAhFrF,YAAa4W,EAAmEvR,EAAnEuR,YAAa9W,EAAsDuF,EAAtDvF,aAAcD,EAAwCwF,EAAxCxF,iBAAkB1B,EAAsBkH,EAAtBlH,kBADlD,EAEjBkH,EAAMmL,MAAM2F,OAAjChhB,EAFsC,EAEtCA,MAAOqI,EAF+B,EAE/BA,eAEUjJ,IAArBsL,SACqBtL,IAAjBuL,EACA3B,EAAkBX,EAAWrI,EAAO0K,GAEP,IAAxBC,EAAae,QAClBzK,KAAKiP,MAAMqS,iCAIftB,GAAeC,EACVrW,GAAgB4W,EAGZ5W,GAAeA,IAAgB5J,KAAKiP,MAAMrF,a1CvJhC,I0CuJ+CA,EAAY2W,WAAiCvgB,KAAK4d,YAAYoC,IAC5HhgB,KAAKiP,MAAMnH,WAAW/I,EAAOqI,EAAW4Y,EAAaC,EAAiB,EAAGrW,EAAYpC,KAHrFxH,KAAKiP,MAAMsS,UAAUxiB,EAAOihB,EAAaC,EAAiB7Y,GAO9DpH,KAAKiV,SAAS,CAAErN,SAAU,O,qCA2HV,IAAD,SAC4D5H,KAAKiP,MAA3D1H,EADN,EACX0Y,gBAAwC/hB,EAD7B,EACgB0L,YAAgCvC,EADhD,EACmC2Y,YADnC,EAEiChgB,KAAKhC,MAAjD4J,EAFW,EAEXA,SAFW,IAED6X,yBAFC,WAEmBthB,EAFnB,EAGnB,QAAaA,IAATD,EAAJ,CAIA,IA/MsBsjB,EA8NtB,OACI,gBAAC,KAAD,CAAQlO,YAAU,EACd1N,KAAM5F,KAAKsgB,aACXjP,QAAS,kBAAM,EAAKpC,MAAMuQ,cAC1B,gBAAC,KAAD,CAAQrR,MAAO,CAAE6C,SAAU,YAAcQ,MAAM,WAC3C,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYA,MAAM,UAAUf,QAASzQ,KAAKuf,kBAAmBpR,MAAO,CAAE8K,YAAa,IAC/E,gBAAC,KAAD,OAEJ,gBAAC,KAAD,CAAY5K,QAAQ,QAAQmD,MAAM,UAAUrD,MAAO,CAAEsT,KAAM,IACtD7Y,IADL,OAGA,gBAAC,KAAD,CAAQ4I,MAAM,UAAUf,QArB3B,WACJ,EAAKmN,YAAYvW,IAAkC,MAAtBoY,EAC9B,EAAKF,oBAGL,EAAKO,sBAgB0C3R,MAAO,CAAE4S,aAAc,IAAM/N,SAAuB,KAAbpL,QAAyCzJ,IAAtBshB,GAElE,MAAtBA,EACK7W,IADL,MAEKA,IAFL,SAQjB,uBAAKuF,MAAO,CAAEC,QAAS,KAClBpO,KAAKygB,mBAAqBzgB,KAAK4gB,eAAiB,KACjD,gBAAC,KAAD,CAAM/B,WAAS,EAACxG,QAAS,EAAGyG,WAAW,WAAW3Q,MAAO,CAAE8C,UAAW,IAClE,gBAAC,KAAD,CAAM/S,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAK6V,OAEtC,gBAAC,KAAD,CAAM7V,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,SAAS9G,IAEjC,gBAAC,KAAD,CAAMrJ,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKsJ,MAEtC,gBAAC,KAAD,CAAMtJ,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,S1CrVlB,K0CgFAmT,EAqQgDtjB,EAAKqiB,UApQtD3X,IAAxB,M1ChF0B,I0CiFtB4Y,EAAyB5Y,IAAzB,M1ChFwB,I0CiFpB4Y,EAA2B5Y,IAA3B,MACKA,IADL,QAwQW,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAEN/e,KAAK4d,YAAYvW,GACd,uBAAK8G,MAAO,CAAE8C,UAAW,KACrB,gBAAC,KAAD,CAAagD,UAAW,YACpB,gBAAC,KAAD,CAAWA,UAAW,UAAkBrL,IAAxC,OACA,gBAAC,GAAD,CACIvM,MAAOojB,EACP9M,SAAU,SAAAjV,GAAC,OAAI,EAAKuX,SAAS,CAAEwK,kBAAmB/hB,MAClD,gBAAC,KAAD,CAAkBrB,MAAM,IAAI+X,QAAS,gBAAC,KAAD,MAAW7Y,MAAM,iCACtD,gBAAC,KAAD,CAAkBc,MAAM,IAAI+X,QAAS,gBAAC,KAAD,MAAW7Y,MAAM,gCAG9D,gBAAC,KAAD,CAAY8S,QAAQ,QAAQmD,MAAM,YAAYrD,MAAO,CAAE8C,UAAW,IAEnC,MAAtBwO,EAA6B7W,IAA7B,MAC0B,MAAtB6W,EAA6B7W,IAA7B,MACG,OAKhB,gBAAC,KAAD,CAAa8H,WAAS,GAClB,gBAAC,KAAD,KAAa9H,IAAb,OACA,gBAAC,KAAD,CACIpN,KAAK,SACLkW,WAAS,EACThB,WAAS,EACTuC,aAAc,gBAAC,KAAD,CAAgBjC,SAAS,OAAO9S,EAAKoa,MACnDjc,MAAOuL,EACP+K,SAAU3S,KAAK0gB,iBACf5P,WAAY,CAAE4Q,UA3FvB,SAAC7e,GACd,UAAVA,EAAE4K,KAAmB5K,EAAEgR,cAAcxX,MAAMoO,OAAS,GACpD,EAAKqV,iC,8CA4HgB,IAAD,SACyB9f,KAAKiP,MAAlDvF,EADoB,EACpBA,aAAgCnC,EADZ,EACNkC,iBAEtB,QAAiBtL,IAAboJ,EAKJ,YAAqBpJ,IAAjBuL,GAAsD,IAAxBA,EAAae,OAEvC,+CAKJ,2BACI,gBAAC,KAAD,CAAY0D,MAAO,CAAEqD,MAAO,QACvB5I,IADL,KAC+DrB,IAE/D,gBAAC,KAAD,KAEQmC,EAAahN,KAAI,SAAAwB,GAAI,OACjB,gBAAC,KAAD,CAAUuP,IAAKvP,EAAKsJ,KAChB,gBAAC,KAAD,CAAc4I,QAASlS,EAAK6V,KAAMzD,UAAW1H,IAAF,KAAc1K,EAAKsJ,YAK9E,gBAAC,KAAD,CAAS6G,QAAQ,cACjB,gBAAC,KAAD,CAAWF,MAAO,CAAE8C,UAAW,KAC3B,gBAAC,KAAD,CACI0Q,QAAS3hB,KAAKhC,MAAMkhB,eACpBvM,SAAU,SAACiP,EAAG1C,GAAJ,OAAuB,EAAKjK,SAAS,CAAEiK,oBACjD9K,QAAS,gBAAC,KAAD,MACT7Y,MAAOqN,IAAF,KAA+ErB,MAG5F,gBAAC,KAAD,CAAMsX,WAAS,EAAC1Q,MAAO,CAAE8C,UAAW,IAAMoH,QAAS,IAC/C,gBAAC,KAAD,CAAMna,MAAI,EAAC6gB,IAAE,GACT,gBAAC,KAAD,CAAQ1Q,QAAQ,YAAYmD,MAAM,UAAUwB,UAAWhT,KAAKhC,MAAMkhB,eAAgBxO,WAAS,EAACD,QAASzQ,KAAKghB,oBAAqBpY,IAA/H,OADJ,QAGA,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,IAAE,GACT,gBAAC,KAAD,CAAQ1Q,QAAQ,YAAYqC,WAAS,EAACD,QAASzQ,KAAKihB,mBAAoBrY,IAAxE,Y,6CAOI,IAAD,SAC0B5I,KAAKhC,MAA1C4hB,EADW,EACXA,yBAA0B/gB,EADf,EACeA,OAC1BE,EAAUiB,KAAKiP,MAAMmL,MAAM2F,OAA3BhhB,MAOR,OACI,gBAAC,KAAD,CAAQuU,YAAU,EAAC1N,MAAM,GACrB,gBAAC,KAAD,CAAQkO,MAAM,YAAY3F,MAAO,CAAE6C,SAAU,aACzC,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYQ,MAAM,UAAUf,QATtB,WAClB,EAAKwE,SAAS,CAAE2K,8BAA0BzhB,IAC1C,EAAK8Q,MAAMuQ,aAOqDrR,MAAO,CAAE8K,YAAa,IACtE,gBAAC,KAAD,OAEJ,gBAAC,KAAD,CAAY5K,QAAQ,QAAQmD,MAAM,UAAUrD,MAAO,CAAEsT,KAAM,IACtD7Y,IADL,OAGA,gBAAC,KAAD,CAAQ4I,MAAM,UAAUrD,MAAO,CAAE4S,aAAc,IAAMtQ,QAAS,yBAAMmP,QAAN,IAAMA,OAAN,EAAMA,EAA0BC,QAAQhhB,KAAtG,QAMwC,QAAnB,OAAxB+gB,QAAwB,IAAxBA,OAAA,EAAAA,EAA0B1jB,OAAO6C,SAA0C,OAAxB6gB,QAAwB,IAAxBA,OAAA,EAAAA,EAA0B1jB,OAAO6C,SAAUA,EAC3F,uBAAKoP,MAAO,CAAEC,QAAS,KACnB,gBAAC,KAAD,qGAMA,uBAAKD,MAAO,CAAEC,QAAS,KACnB,gBAAC,KAAD,4DAGA,gBAAC,KAAD,KACI,gBAAC,KAAD,KACI,gBAAC,KAAD,KACI,gBAAC,KAAD,aACA,gBAAC,KAAD,mBAGR,gBAAC,KAAD,KACI,gBAAC,KAAD,KACI,gBAAC,KAAD,YAAYwR,QAAZ,IAAYA,OAAZ,EAAYA,EAA0B1jB,OAAOiT,MAC7C,gBAAC,KAAD,YAAYyQ,QAAZ,IAAYA,OAAZ,EAAYA,EAA0B1jB,OAAO2L,QAIzD,gBAAC,KAAD,CAAY8K,SAAU,SAAA1T,GAAK,OAAI,EAAKgW,SAAS,CAAEpW,OAASI,EAAM6T,OAA4BzW,SAAUA,MAAO2D,KAAKhC,MAAMa,OAAQsP,MAAO,CAAE8C,UAAW,KAC9I,gBAAC,KAAD,CAAkB5U,MAAM,YAAY+X,QAAS,gBAAC,KAAD,MAAW7Y,MACpD,gCAAE,4DAAyC,wBAAM4S,MAAO,CAAE0T,WAAY,SAA3B,SAA4CxB,WAAWrgB,KAAKhC,MAAM4J,cAEjH,gBAAC,KAAD,CAAkBvL,MAAM,MAAM+X,QAAS,gBAAC,KAAD,MAAW7Y,MAC9C,gCAAE,0DAAuC,wBAAM4S,MAAO,CAAE0T,WAAY,SAA3B,SAA4CjC,EAA0B1jB,OAAO2L,IAAMwY,WAAWrgB,KAAKhC,MAAM4J,UAAzG,QAE7C,gBAAC,KAAD,CAAkBvL,MAAM,SAAS+X,QAAS,gBAAC,KAAD,MAAW7Y,MACjD,gCAAE,2CAAF,IAA2B,wBAAM4S,MAAO,CAAE0T,WAAY,SAA3B,SAA4CjC,EAA0B1jB,OAAO2L,a,+BAUlI,IAAD,EACwB7H,KAAKiP,MAAMmL,MAAM2F,OAAtC3Y,EADH,EACGA,UAAWrI,EADd,EACcA,MADd,EAE8EiB,KAAKiP,MAFnF,IAEG+Q,mBAFH,WAEiB7hB,EAFjB,MAE4B8hB,uBAF5B,WAE8C9hB,EAF9C,EAEyDsL,EAFzD,EAEyDA,iBAG9D,YAAiCtL,IAFI6B,KAAKhC,MAAlC4hB,yBAGG5f,KAAK8hB,4BAGS3jB,IAArBsL,EACOzJ,KAAK+hB,wBAIZ,2BACM/hB,KAAKof,aAAepf,KAAK4gB,eAAiB,KAC5C,gBAAC,KAAD,CAAM/B,WAAS,EAACxG,QAAS,EAAGyG,WAAW,WAAWkD,QAAQ,UACtD,gBAAC,KAAD,CAAM9jB,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAE8C,UAAW,GAAIgR,UAAW,WAClD,uBAAKC,IAAKC,KAAUhU,MAAO,CAAEsE,MAAO,QAAU2P,IAAI,mBAG1D,gBAAC,KAAD,CAAOjU,MAAO,CAAEC,QAAS,EAAG6C,UAAW,KACnC,gBAAC,KAAD,CAAM4N,WAAS,EAACxG,QAAS,GACrB,gBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,GACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,SAASjH,IAEjC,gBAAC,KAAD,CAAMlJ,MAAI,EAAC6gB,GAAI,GACX,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,gBAAC,KAAD,CAAYyF,QAAQ,SAAStP,MAIzC,gBAAC,GAAD,CAAWxD,MAAOqN,IAAF,MAAkBvM,MAAO4jB,IACzC,gBAAC,GAAD,CAAW1kB,MAAOqN,IAAF,MAAcvM,MAAO2jB,IACpChgB,KAAKsgB,aAAetgB,KAAKqiB,eAAiB,U,GApcnC9T,aA0cTgC,gBAvgBS,SAACvS,GAAD,MAAwB,CAC5CgiB,YAAa9U,GAAwBlN,GACrCiiB,gBAAiB9U,GAA4BnN,GAC7CyL,iBAAkB2B,GAA6BpN,GAC/C0L,aAAc2B,GAAyBrN,GACvCwiB,YAAalV,GAA0BtN,GACvCsL,aAAciC,GAA2BvN,GACzC4L,YAAaqB,GAAwBjN,OAGd,SAAC0G,GAAD,MAAoB,CAC3C2a,SAAU,SAACnhB,GAAD,OAAkBwG,EtCsFA,SAACxG,GAAD,MAA2C,CACvE1C,KAP8B,qBAQ9B0C,QsCxFqCokB,CAAiBpkB,KACtDohB,aAAc,SAAC/X,GAAD,OAAsB7C,EtCuEJ,SAAC6C,GAAD,MAAmD,CACnF/L,KAPkC,yBAQlC+L,YsCzE6Cgb,CAAqBhb,KAClEiY,UAAW,kBAAM9a,EtCiG4C,CAC7DlJ,KAN+B,yBsC3F/B+lB,UAAW,SAACxiB,EAAesI,EAAiBE,EAAkBH,GAAnD,OAAyE1C,ExClE1D,SAAC3F,EAAesI,EAAiBE,EAAkBH,GAAnD,OAAwE,SAAC1C,GAEnGA,EANwD,CACxDlJ,KAAM,qBAMN,sBAAC,gCAAA+B,EAAA,+EAG0BmG,EAAQ2D,GAHlC,cAGanJ,EAHb,gBAMmCoJ,EAAOF,EAAWG,EAAUrJ,EAAKsJ,KANpE,OAMagb,EANb,OAOOtkB,EAAK0J,SAAW4a,EAEhB9d,EAAS4D,GAAsBpK,EAAMqJ,IAT5C,kDAcWN,EAAgB,KAAEF,QAChB,KAAEA,QADW,UAEV2B,GAAe,KAAE/F,OAFP,wBAGnB+B,EAASwD,GAAsB/C,cAAgB8B,IAjBtD,yDAAD,IwC+D6Fwb,CAAe1jB,EAAOsI,EAASE,EAAUH,KACtIU,WAAY,SAACU,EAAiBpB,EAAmBC,EAAiBE,EAAkBK,EAAkBJ,GAA1F,OACR9C,EvC9DuB,SAAC8D,EAAiBpB,EAAmBC,EAAiBE,EAAkBK,EAAkBJ,GAA1F,OAA0G,SAAC9C,GAEtIA,EAP4B,SAAC8D,EAAiBpB,EAAmBC,EAAiBE,EAAkBK,EAAkBJ,GAA1F,MAAkI,CAC9JhM,KAb6B,oBAc7BgN,UAASnB,UAASE,WAAUK,WAAUR,YAAWI,OAKxCkb,CAAiBla,EAASpB,EAAWC,EAASE,EAAUK,EAAUJ,IAC3E,IAAIP,EAAe2B,IAAH,MAChB,sBAAC,8BAAArL,EAAA,+EAG4BuK,EAAWU,EAASpB,EAAWC,EAASE,EAAUK,GAH9E,yCAMiBb,EANjB,kBAMsCS,EANtC,wBAMyDI,EANzD,eAMwEL,GACvDY,EAA6B,CAC/B7M,GAAI6J,cACJ4B,UACAqB,SAAU,UACVC,OAAQ,UAEZ3D,EAAS6D,GAAuBC,EAASpB,EAAWC,EAASE,EAAUK,EAAUO,IAb5F,4EAmBU,KAAEpB,UAEDE,EAAe,KAAEF,SAErBnE,QAAQ+f,KAAR,MAvBP,QA0BGje,EAAS+D,GAAuBtD,cAAgB8B,IA1BnD,yDAAD,IuC0Da2b,CAAgBpa,EAASpB,EAAWC,EAASE,EAAUK,EAAUJ,KAC9EO,kBAAmB,SAACX,EAAmBrI,EAAewI,GAAnC,OACf7C,EtCwI8B,SAAC0C,EAAmBrI,EAAewI,GAAnC,OAAwD,SAAC7C,GAE3FA,EAPmC,SAAC0C,EAAmBrI,EAAewI,GAAnC,MAAuF,CAC1H/L,KAAM,4BACN4L,YAAWrI,QAAOwI,YAKTsb,CAAwBzb,EAAWrI,EAAOwI,IACnD,sBAAC,4BAAAhK,EAAA,+EAG2BwK,EAAkBX,EAAWrI,EAAOwI,GAH/D,OAGa0B,EAHb,OAIOvE,EAASsE,GAA8BC,IAJ9C,gDAQOvE,EAASwE,GAA8B,KAAEnC,UARhD,wDAAD,IsC3Ia+b,CAAuB1b,EAAWrI,EAAOwI,KACtD+Z,8BAA+B,kBAAM5c,EtCyL0D,CAC/FlJ,KAAM,6CsCzLN0lB,eAAgB,kBAAMxc,EtCmH2C,CACjElJ,KAAM,2BsCnHNyM,wBAAyB,SAACb,EAAmBrI,EAAewI,GAAnC,OACrB7C,EtCyMoC,SAAC0C,EAAmBrI,EAAewI,GAAnC,OAAwD,SAAC7C,GAEjGA,EAPyC,SAAC0C,EAAmBrI,EAAewI,GAAnC,MAA6F,CACtI/L,KAAM,kCACN4L,YAAWrI,QAAOwI,YAKTwb,CAA8B3b,EAAWrI,EAAOwI,IACzD,sBAAC,sBAAAhK,EAAA,+EAGa0K,EAAwBb,EAAWrI,EAAOwI,GAHvD,OAIO7C,EAASyE,MAJhB,+CAQOzE,EAAS0E,GAAoC,KAAErC,UARtD,uDAAD,IsC5Maic,CAA6B5b,EAAWrI,EAAOwI,QAifjDgJ,CAA6CyO,I,yJC3hB7CiE,OArCf,SAAqBhU,GACpB,IAAD,EACiDA,EAArC7H,iBADZ,MACwB,GADxB,EAC4B0B,EAAqBmG,EAArBnG,OAAQoa,EAAajU,EAAbiU,SADpC,EAE8B/Q,mBAAS,IAFvC,oBAEWpT,EAFX,KAEkBokB,EAFlB,KAII,OACI,gCACI,gBAAC,KAAD,CAAMtE,WAAS,EAACxG,QAAS,EAAGyG,WAAW,YACnC,gBAAC,KAAD,CAAM5gB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CACIqE,QAAM,EAAC1S,WAAS,EAChBrU,MAAO0C,EACPgV,KAAK,QACLpB,SAAU,SAAA9P,GAAC,OAAIsgB,EAAStgB,EAAEiQ,OAAOzW,QACjCd,MAAOqN,IAAF,OACL,gBAAC,KAAD,CAAUvM,MAAM,GAAG2W,UAAQ,IAEvBlK,EAAOpM,KAAI,SAAAqC,GAAK,OACZ,gBAAC,KAAD,CAAU0O,IAAK1O,EAAMzD,GAAIe,MAAO0C,EAAMzD,IAAKyD,EAAMgV,YAMrE,gBAAC,KAAD,CAAM8K,WAAS,EAACxG,QAAS,EAAGyG,WAAW,WAAW3Q,MAAO,CAAC8C,UAAW,KACjE,gBAAC,KAAD,CAAM/S,MAAI,GACN,gBAAC,KAAD,CAAQmlB,KAAK,QAAQ3S,WAAS,EAACrC,QAAQ,WACnC2E,SAAwB,KAAd5L,QAA8BjJ,IAAVY,GAAiC,KAAVA,EACrD0R,QAAS,kBAAMyS,EAAS,GAAD,OAAInkB,MAC1B6J,IAHL,W,6FCpBpB,IAAM0a,GAAW1O,KAAOC,IAAV,MAuBR0O,G,4MAEFvlB,MAAe,G,EAEPwlB,eAAiB,SAACC,GAAD,OACrB,EAAKxU,MAAM8J,QAAQjb,KAAnB,UAA2B,EAAKmR,MAAMmL,MAAMjW,IAA5C,YAAmDsf,K,mEAInDzjB,KAAKiP,MAAMjN,OACRhC,KAAKiP,MAAMmL,MAAM2F,OAAO3Y,WAEvBpH,KAAKiP,MAAMyU,WAAW1jB,KAAKiP,MAAMmL,MAAM2F,OAAO3Y,a,gDAI5Bia,GACzB,IAAD,EACsDA,EAAUjH,MAAM2F,OAA1D3Y,UAAWuc,OADvB,WACuCxlB,EADvC,IAEwD6B,KAAKiP,MAAMmL,MAAM2F,OAA7D3Y,UACLuc,UAHP,WAE0CxlB,EAF1C,IAG6CwlB,GAErC3jB,KAAKiP,MAAMyU,WAAWC,K,+BAK7B,IAAD,EAC8B3jB,KAAKiP,MAAvBmL,EADZ,EACYA,MAAOtR,EADnB,EACmBA,OAEf,OACI,gBAACwa,GAAD,KACI,gBAAC7I,EAAA,EAAD,KACI,gBAACE,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,UAAWuB,OAAK,EAAClI,UAAW+K,KACtD,gBAACrE,EAAA,EAAD,KACI,gBAAC,GAAD,CACIvT,UAAWgT,EAAM2F,OAAO3Y,UACxB0B,OAAQA,EACRoa,SAAUljB,KAAKwjB,wB,GAtCbjV,aA8CfgC,gBAjES,SAACvS,GAAD,MAAwB,CAC5C8K,OAAQkC,GAAmBhN,OAGJ,SAAC0G,GAAD,MAAoB,CAC3Cgf,WAAY,SAACtc,GAAD,OAAuB1C,ExCkGR,SAAC0C,GAAD,OAAuB,SAAC1C,GAEnD,sBAAC,8BAAAnH,EAAA,6DAEGmH,EAzC+C,CACnDlJ,KAN6B,sBA4C5B,kBAK4B2L,EAAUC,GALtC,OAKa0B,EALb,OAMOpE,EAASmE,GAAuBzB,EAAW0B,IANlD,gDAUa8a,EAASlb,GAAe,KAAE/F,OAChC+B,GAtB2BpJ,EAsBK6J,cAtBO4B,EAsBR,UAAoB6c,EAApB,qCAAuDxc,GAtBI,CAClG5L,KANqC,4BAOrC2M,aAAc,CACV7M,KAAIyL,UACJqB,SAAU,QACVC,OAAQ,aAMX,kCAXiC,IAAC/M,EAAYyL,IAW9C,mBAAD,IwCpG4C8c,CAAgBzc,KAC5D0c,aAAc,SAACxoB,GAAD,OAAgBoJ,EAASqE,GAAkBzN,KACzDyoB,WAAY,kBAAMrf,EtCtBiD,CACnElJ,KANmC,6BsC4BnCwG,KAAM,kBAAM0C,ExCKiC,CAC7ClJ,KANsB,mBwCyDX+U,CAA6CgT,I,qKCnD/CS,GAAkC,SAAC9lB,GAAD,MAAwD,CACnG1C,KAAM,sCACN0C,OACA6H,OAAQ,CAAEF,MAAM,KAYPoe,GAAkC,SAAC3oB,EAAYyL,GAAb,MAAyE,CACpHvL,KAAM,sCACNF,KAAIyL,UACJhB,OAAQ,CAAEF,MAAM,KAiCPqe,GAA+B,SAAChgB,GAAD,MAAqE,CAC7G1I,KAAM,kCACN0I,YAaSigB,GAA+B,SAACjgB,EAA4B5I,EAAWyL,GAAxC,MAAiG,CACzIvL,KAAM,kCACN0I,UAAS5I,KAAIyL,Y,owDC3EjB,IA6BMqd,G,4MAEMC,c,IACApF,a,IACAqF,yBAAgC,K,EAExCtmB,MAAe,CAAEumB,cAAe,I,EAuDxBC,cAAgB,SAACnd,EAAiB7L,GAEtC,IAAMipB,EAAO,EAAKC,gBArEG,IAsElBD,GAA0C,aAATjpB,EAEhC,EAAKyT,MAAM0V,kBAAkBtd,GArEd,IAuEVod,GAAwC,aAATjpB,EAEpC,EAAKyT,MAAM2V,gBAAgBvd,GA3ErB,IA6EFod,GAA+B,SAATjpB,GAE1B,EAAKyT,MAAMsS,UAAUla,I,EA6BrBwd,mBAAqB,SAAChiB,GAE1B,EAAKoS,SAAS,CAAEsP,cAAe1hB,EAAEgR,cAAcxX,S,EAG3CyoB,qBAAuB,iBAAM,gBAAgBC,KAAK,EAAK/mB,MAAMumB,gB,EAE7DS,iBAAmB,kBAAM,EAAK/V,MAAMgW,YAAY5E,WAAW,EAAKriB,MAAMumB,iB,EAEtEW,SAAW,WAEf,IAAMhhB,EAA0B,2BACzB,EAAK+K,MAAM/K,SADc,IAE5BkD,UAAW,EAAK6H,MAAMmL,MAAM2F,OAAO3Y,YAGvC,EAAK6H,MAAMkW,OAAOjhB,I,EAGdkhB,QAAU,WAEd,EAAKnW,MAAM5N,S,kEAlHXrB,KAAKif,QAAU,IAAI1B,GAAQvd,KAAKwkB,eAAe,QACxBrmB,IAApB6B,KAAKiP,MAAM/Q,MAEV8B,KAAKqlB,cAAcrlB,KAAKiP,MAAM/Q,Q,kDAMdC,IAAjB6B,KAAKif,UAEJjf,KAAKif,QAAQmC,UACbphB,KAAKif,aAAU9gB,K,gDAIGkjB,GACzB,IAAD,OACYiE,EAAuBjE,EAAvBiE,wBAEennB,IAAnBkjB,EAAUnjB,MAEV8B,KAAKqlB,cAAchE,EAAUnjB,MAtCZ,IAyCjB8B,KAAK0kB,iBAA8E,OAAlC1kB,KAAKskB,2BAEtDtkB,KAAKskB,yBAA2BlG,YAAW,WACvCkH,IACA,EAAKhB,yBAA2B,OACjC,Q,2CA5CO,IAkDXtkB,KAAK0kB,sBAAuDvmB,IAAlB6B,KAAKqkB,UAE9CrkB,KAAKqkB,SAASkB,U,oCAIArnB,GAzDR,IA2DG8B,KAAK0kB,iBAGd1kB,KAAKiP,MAAM5L,QAAQnF,K,sCAuBvB,YAA+BC,IAA5B6B,KAAKiP,MAAM/K,QAAQwD,KAtFD,OA2FUvJ,IAA5B6B,KAAKiP,MAAM/K,QAAQhG,KA1FZ,OA+FoBC,IAA3B6B,KAAKiP,MAAM/K,QAAQ2D,IA9FR,OAmGe1J,IAA1B6B,KAAKiP,MAAM/K,QAAQyD,GAlGH,EACP,I,+BAkIf,IAAD,SAMQ3H,KAAKiP,MAAM/K,QANnB,IAEQyD,GAAI6d,OAFZ,WAE2BrnB,EAF3B,MAGQuJ,KAAM+d,OAHd,WAG+BtnB,EAH/B,MAIQD,YAJR,WAIeC,EAJf,MAKQ0J,IAAKD,OALb,WAKwBzJ,EALxB,EAQUunB,EAAa1lB,KAAK0kB,gBACxB,OACI,2BACI,gBAAC,KAAD,CAAYrW,QAAQ,MAApB,cACA,uBAAKF,MAAO,CAAC8C,UAAW,IACpB,gBAAC,KAAD,CAAQ5C,QAAQ,YAAYoC,QAASzQ,KAAKolB,SAAUxc,IAApD,QAEJ,gBAAC,KAAD,CAAS+c,YAAY,WAAWD,WAAYA,EAAYE,UAAW,EAAGzX,MAAO,CAAC6B,gBAAiB,gBAC3F,gBAAC,KAAD,CAAM6V,eAA8B1nB,IAAnBsnB,GACb,gBAAC,KAAD,UAA+BtnB,IAAnBsnB,EAA+B7c,IAA/B,MAA4DA,IAA5D,KAAoF6c,IAChG,gBAAC,KAAD,KACI,gBAAC,KAAD,KAAa7c,IAAb,SAGR,gBAAC,KAAD,CAAMid,eAAoB1nB,IAATD,GACb,gBAAC,KAAD,UAAqBC,IAATD,EAAqB0K,IAArB,MAAsCA,IAAtC,KAA+D1K,EAAKsJ,MAChF,gBAAC,KAAD,KACI,gBAAC,KAAD,KAAaoB,IAAb,SAGR,gBAAC,KAAD,CAAMid,eAAwB1nB,IAAbyJ,GACb,gBAAC,KAAD,UAAyBzJ,IAAbyJ,EAAyBgB,IAAzB,MAAgDA,IAAhD,KAAiEhB,EAASke,QAAQ,KAC9F,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAWzX,QAAQ,WAAW9S,MAAOqN,IAAF,MACxB+J,SAAU3S,KAAK6kB,mBACflU,WAAY,CAACsC,aAAc,gBAAC,KAAD,CAAgBjC,SAAS,OAAzB,OAAqDxV,KAAM,UACtF2S,MAAO,CAAC8C,UAAW,EAAG8U,aAAc,GACpCC,SAAU,SAAAjkB,GAAK,OAAI,EAAKsiB,SAAWtiB,KAC9C,gBAAC,KAAD,CAAQsM,QAAQ,YAAY2E,UAAWhT,KAAK8kB,uBAAwBrU,QAASzQ,KAAKglB,kBAAmBpc,IAArG,SAGR,gBAAC,KAAD,CAAMid,eAA4B1nB,IAAjBqnB,GACb,gBAAC,KAAD,UAA6BrnB,IAAjBqnB,EAA6B5c,IAA7B,MAA+DA,IAA/D,KAA4F4c,IACxG,gBAAC,KAAD,KACI,gBAAC,KAAD,KAAa5c,IAAb,SAGR,gBAAC,KAAD,KACI,gBAAC,KAAD,KAAYA,IAAZ,OACA,gBAAC,KAAD,UAEkBzK,IAATD,QAAuCC,IAAjBqnB,QAAiDrnB,IAAnBsnB,EACjD,gBAAC,KAAD,CAAM5G,WAAS,GACX,gBAAC,KAAD,CAAM3gB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAYzQ,cAAY,GAAEpQ,EAAK6V,OAElD,gBAAC,KAAD,CAAM7V,MAAI,EAAC6gB,GAAI,GAAG,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,QAClB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,GAAG,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,QAClB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,GAAG,gBAAC,KAAD,CAAYzQ,cAAY,GAAEmX,IAC5C,gBAAC,KAAD,CAAMvnB,MAAI,EAAC6gB,GAAI,GAAG,gBAAC,KAAD,CAAYzQ,cAAY,GAAEkX,IAE5C,gBAAC,KAAD,CAAMtnB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAYzQ,cAAY,GAAE1G,IAC7C,gBAAC,KAAD,CAAM1J,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAQ1Q,QAAQ,YAAYmD,MAAM,UAAUf,QAASzQ,KAAKklB,UAAWtc,IAArE,SAGR,a,GAjMX2F,aA2MVgC,gBAxOS,SAACvS,GAAD,MAAwB,CAC5CE,KAAMuN,GAAezN,GACrBkG,QAASwH,GAAqB1N,OAGP,SAAC0G,GAAD,MAAoB,CAC3C6c,UAAW,SAACla,GAAD,OAAqB3C,EDpBI,SAAC2C,GAAD,OAAqB,SAAC3C,GAE1DA,EAL2F,CAC3FlJ,KAAM,8BAA+BuK,OAAQ,CAAEF,MAAM,KAKrDnC,EAAQ2D,GACH9B,MAAK,SAAArH,GAAUwG,EAASsf,GAAgC9lB,OACxD+nB,OAAM,SAAApjB,GACH,IAAIoE,EAAgBpE,EAAEkE,QAChBlE,EAAEkE,QADW,UAEV2B,GAAe7F,EAAEF,OAFP,wBAGnB+B,EAASuf,GAAgC9e,cAAgB8B,QCWxBif,CAAyB7e,KAClEhE,QAAS,SAACnF,GAAD,OAAgBwG,EDiIS,SAACxG,GAAD,MAA+C,CACjF1C,KAAM,4BACN0C,QCnIkCioB,CAAuBjoB,KACzDymB,kBAAmB,SAACpd,GAAD,OAAsB7C,EDyFG,SAAC6C,GAAD,MAA+D,CAC3G/L,KAAM,uCACN+L,YC3FkD6e,CAAiC7e,KACnFqd,gBAAiB,SAACrd,GAAD,OAAsB7C,EDqGU,SAAC6C,GAAD,MAAoE,CACrH/L,KAAM,4CACN+L,YCvGgD8e,CAAsC9e,KACtF0d,YAAa,SAACpd,GAAD,OAAiBnD,EDiHQ,SAACmD,GAAD,MAAoD,CAC1FrM,KAAM,gCACNqM,OCnHuCye,CAA2Bze,KAClExG,MAAO,kBAAMqD,ED0EsD,CACnElJ,KAAM,4BC1EN2pB,OAAQ,SAACjhB,GAAD,OAAgCQ,ED6BP,SAACR,GAAD,OAAgC,SAACQ,GAElEA,EAPkC,SAACR,GAAD,MAA8D,CAChG1I,KAAM,0BACN0I,WAKSqiB,CAAuBriB,IAChCuD,EAASvD,GAASqB,MACd,kBAAMb,EAASwf,GAA6BhgB,OAC5C,SAAArB,GAAC,OAAI6B,EAASyf,GAA6BjgB,EAASiB,eAAiB,OAADtC,QAAC,IAADA,OAAA,EAAAA,EAAGkE,UAAW,4BClCrCyf,CAAsBtiB,KACvEohB,mBAAoB,kBAAM5gB,EAAS,CAAElJ,KAAM,4BA2NhC+U,CAA6C6T,I,8BCrOtDqC,GAAe,SAAIzoB,EAAiBa,GAEtC,MAAmB,YAAhBA,EAAOrD,KAEC,CACHkrB,WAAW,GAIA,YAAhB7nB,EAAOrD,KAEC,CACH+G,SAAU1D,EAAOxC,MACjBqqB,WAAW,GAIA,aAAhB7nB,EAAOrD,KAEC,CACHmH,MAAO9D,EAAO8D,MACd+jB,WAAW,GAIA,UAAhB7nB,EAAOrD,KAEC,CAAEkrB,WAAW,GAGjB1oB,GAGE2oB,GAAiB,SAACrkB,GAAD,OAAgC,SAAIP,EAA2BC,GAC5F,IAAD,EAC8B4kB,qBAAyCH,GAAc,CAAEC,WAAW,IADlG,oBACW1oB,EADX,KACkB0G,EADlB,KAyCI,OAtCAgR,qBAAU,WAEN,GAAc,OAAV3T,EAAJ,CAMA,IAAI8kB,GAAY,EA2BhB,OA1BAniB,EAAS,CAAElJ,KAAM,YACjB8G,EAAMP,EAAOC,GACRuD,MAAK,SAAAyC,GAEF,IAAK6e,EAED,OAAG7e,EAAIrD,GAEIqD,EAAIvF,OAIJuF,EAAIvF,OAAO8C,MAAK,SAAA7H,GAAC,OAAI8F,QAAQI,OAAOlG,SAKtD6H,MAAK,SAAClJ,GAEEwqB,GAEDniB,EAAS,CAAElJ,KAAM,UAAWa,aAGnC4pB,OAAM,SAAAtjB,GAAK,OAAI+B,EAAS,CAAElJ,KAAM,WAAYmH,aAE1C,WAAQkkB,GAAY,GA/BvBniB,EAAS,CAAElJ,KAAM,YAgCtB,CAACuG,EAAOC,IAEJ,CAAChE,EAAMuE,SAAUvE,EAAM0oB,UAAW1oB,EAAM2E,SCvGtCmkB,ID0GWH,GAAe1I,OAAO3b,OC1GTqkB,GAFvB3jB,IAAKgB,0BCON+iB,GAAgBxY,gBAAuC,CAChEhC,OAAQ,aACRya,MAAO,SAACjgB,EAA8BkgB,KACtC5oB,cAAUF,I,UC+Dd,SAAS+oB,GAAgBjY,GACxB,IACWkY,EAAoBlY,EAApBkY,MAAOxU,EAAa1D,EAAb0D,SADnB,EAE8BR,mBAAsB0D,KAAMsR,EAAM9qB,QAFhE,oBAEWA,EAFX,KAEkB+qB,EAFlB,KAIUC,EAAmB/U,uBAAY,SAACnD,GAClCiY,EAASjY,GACNwD,IAECxD,EAAOA,EAAKkI,IAAIlI,EAAKmY,YAAa,UAClC3U,EAASwU,EAAMpT,KAAM5E,EAAKmF,kBAEnC,CAAC3B,EAAUwU,EAAMpT,OAEhB,OACI,gBAAC,KAAD,CAAYrD,WAAS,EACjB6W,OAAO,SACPhsB,MAAO4rB,EAAMK,aACbnrB,MAAOA,EACPsW,SAAU0U,IAKtB,SAASI,GAAkBxY,GAC1B,IAAD,EAC6EA,EAAjEkY,MAASK,EADrB,EACqBA,aAAqBE,EAD1C,EACmCrrB,MAAqB0X,EADxD,EACwDA,KAAQpB,EAAa1D,EAAb0D,SADhE,EAE8BR,mBAASuV,GAFvC,oBAEWrrB,EAFX,KAEkB+qB,EAFlB,KAIUC,EAAmB/U,uBAAY,SAACzP,GAClCukB,EAASvkB,EAAEiQ,OAAOzW,OACV,OAARsW,QAAQ,IAARA,KAAWoB,EAAMlR,EAAEiQ,OAAOzW,SAC3B,CAACsW,EAAUoB,IAEd,OACI,gBAAC,KAAD,CAAWrD,WAAS,EAChB6W,OAAO,SACP/rB,KAAK,SACLD,MAAOisB,EACPnrB,MAAOA,EACPsW,SAAU0U,IAItB,SAASM,GAAkB1Y,GAC1B,IAAD,EAC6EA,EAAjEkY,MAASK,EADrB,EACqBA,aAAqBE,EAD1C,EACmCrrB,MAAqB0X,EADxD,EACwDA,KAAQpB,EAAa1D,EAAb0D,SADhE,EAE8BR,mBAASuV,GAFvC,oBAEWrrB,EAFX,KAEkB+qB,EAFlB,KAIUC,EAAmB/U,uBAAY,SAACzP,GAClCukB,EAASvkB,EAAEiQ,OAAOzW,OACV,OAARsW,QAAQ,IAARA,KAAWoB,EAAMlR,EAAEiQ,OAAOzW,SAC3B,CAACsW,EAAUoB,IAEd,OACI,gBAAC,KAAD,CAAWrD,WAAS,EAChB6W,OAAO,SACPhsB,MAAOisB,EACPnrB,MAAOA,EACPsW,SAAU0U,IAItB,SAASO,GAAkB3Y,GAC1B,IAAD,EACuEA,EAA3DkY,MAASK,EADrB,EACqBA,aAAqBK,EAD1C,EACmCxrB,MAAe0X,EADlD,EACkDA,KAAQpB,EAAa1D,EAAb0D,SAD1D,EAE8BR,mBAAS,IAFvC,oBAEW9V,EAFX,KAEkB+qB,EAFlB,KAIUC,EAAmB/U,uBAAY,SAACzP,GAClCukB,EAASvkB,EAAEiQ,OAAOzW,OACV,OAARsW,QAAQ,IAARA,KAAWoB,EAAMlR,EAAEiQ,OAAOzW,SAC3B,CAACsW,EAAUoB,IAEd,OACI,gBAAC,KAAD,CAAawT,OAAO,UAChB,gBAAC,KAAD,KAAaC,GACb,gBAAC,KAAD,CAAQ9W,WAAS,EACbrU,MAAOA,EACPsW,SAAU0U,GAFd,OAIIQ,QAJJ,IAIIA,OAJJ,EAIIA,EAAQnrB,KAAI,SAAAwB,GAAI,OACZ,gBAAC,KAAD,CAAU7B,MAAO6B,EAAK7B,MAAOoR,IAAKvP,EAAK7B,OAClC6B,EAAK3C,YAQfusB,OApJf,SAA0B7Y,GACzB,IACW8Y,EAAqB9Y,EAArB8Y,OAAQpV,EAAa1D,EAAb0D,SADpB,EAGgCR,mBAAsB,IAHtD,oBAGmB6V,GAHnB,WAKUC,EAAgB3V,uBAAY,SAAC4V,EAAmB7rB,GAClD2rB,GAAU,SAAAH,GACN,IAAMM,EAAS,2BAAQN,GAAR,mBAAiBK,EAAY7rB,IAE5C,OADQ,OAARsW,QAAQ,IAARA,KAAWwV,GACJA,OAGZ,CAACxV,IAgBJ,OAdA+C,qBAAU,WACN,IAAM0S,EAA6B,GACnCL,EACK9pB,QAAO,SAAAoqB,GAAC,YAAgBlqB,IAAZkqB,EAAEhsB,SACdoE,SAAQ,SAAA4nB,GAAC,OAAID,EAAcC,EAAEtU,MAAQsU,EAAEhsB,SAG5C2rB,GAAU,SAAAH,GACN,IAAMM,EAAS,2BAAOC,GAAkBP,GAExC,OADQ,OAARlV,QAAQ,IAARA,KAAWkV,GACJM,OAEZ,CAACJ,EAAQpV,IAGR,gBAAC,KAAD,CAAyBgF,MAAOC,MAExBmQ,EAAOrrB,KAAI,SAAAyqB,GAAK,OACZ,gBAAC,KAAD,CAAMjpB,MAAI,EAAC6gB,GAAI,GAAItR,IAAK0Z,EAAMpT,MAEV,SAAfoT,EAAM3rB,KACH,gBAAC0rB,GAAD,CAAiBC,MAAOA,EAAOxU,SAAUsV,IACzB,WAAfd,EAAM3rB,KACP,gBAACisB,GAAD,CAAmBN,MAAOA,EAAOxU,SAAUsV,IAC3B,WAAfd,EAAM3rB,KACP,gBAACmsB,GAAD,CAAmBR,MAAOA,EAAOxU,SAAUsV,IAC3B,WAAfd,EAAM3rB,KACP,gBAACosB,GAAD,CAAmBT,MAAOA,EAAOxU,SAAUsV,IAC3C,W,6rBCtC5B,SAASK,GAA0ClB,GAE/C,OAAO9U,uBAAY,SAACzP,GAAD,OAA6BukB,EAASvkB,EAAEiQ,OAAOzW,SAAQ,CAAC+qB,IAG/E,SAASmB,GAAqCC,GAC7C,IAAD,EAC8BrW,mBAAiBqW,GAD/C,oBACWnsB,EADX,KACkB+qB,EADlB,KAEI,MAAO,CAAC/qB,EAAOisB,GAAqBlB,GAAWA,GAGnD,IAAM9kB,GAAQU,IAAKgB,wBAWnB,SAASykB,GAAczB,EAAmC0B,GAEtDhT,qBAAU,YAEN,OAAGgT,QAAH,IAAGA,OAAH,EAAGA,EAAazhB,eAEZ+f,EAAM,CAAEjgB,QAAS2hB,EAAYzhB,aAAcmB,SAAU,YAE1D,CAACsgB,EAAa1B,IA6NN2B,OA1Nf,WAEI,IAAMC,EAAUC,qBAAW9B,IACrBf,EAAW8C,mBAFrB,EAGoD3W,mBAAsB,MAH1E,oBAGW4W,EAHX,KAG6BC,EAH7B,OAIoDT,GAAa,IAJjE,oBAIWlhB,EAJX,KAIoB4hB,EAJpB,KAIsCC,EAJtC,OAKkDX,GAAa,IAL/D,oBAKW3gB,EALX,KAKqBuhB,EALrB,KAKmClE,EALnC,OAMkDsD,GAAa,IAN/D,oBAMWhtB,EANX,KAMkB6tB,EANlB,KAMsCC,EANtC,OAOoDd,GAAa,IAPjE,oBAOWe,EAPX,KAOoBC,EAPpB,KAOsCC,EAPtC,OAQmDrX,mBAAsB,IARzE,oBAQWsX,EARX,KAQ4BC,EAR5B,KAUU7B,EAASiB,mBACfjB,EAAO1qB,QAAU,CACbyK,WAAU+hB,SAAUpuB,EAAO+tB,UAASM,iBAAkBH,EAAiBpiB,QAAS0hB,GAGpF,IAAMc,EAAa,iBAAiB9E,KAAKnd,GAEnCkiB,EAAyBxX,uBAAY,SAACzP,GAC3B,UAAVA,EAAE4K,KAAmBuY,EAAS7oB,SAE7B6rB,EAAoBhD,EAAS7oB,QAAQd,SAE1C,IAtBP,EAwB+DyqB,GACjC,OAArBiC,EAAD,UACSjlB,IADT,2BACwCilB,EADxC,iBAEM,MA3Bd,oBAwBWgB,EAxBX,KAwBuBC,EAxBvB,KAwB4CC,EAxB5C,OA6BwEnD,GACrD,KAAVvrB,EAAD,UACSuI,IADT,mCACgDvI,EADhD,iBAEM,MAhCd,oBA6BW2uB,EA7BX,KA6B0BC,EA7B1B,KA6BkDC,EA7BlD,KAkCI1U,qBAAU,YACN,OAAGqU,QAAH,IAAGA,OAAH,EAAGA,EAAYrC,eAEX2B,EAASU,EAAWrC,gBAEzB,CAACqC,EAAYV,IAEhB3T,qBAAU,WAEL,IAAD,IADA,QAAqBvX,IAAlB+rB,IAEIA,EAAcG,YAEbpF,EAAYiF,EAAcG,WAAWhgB,aAEzC,UAAG6f,EAAcrgB,gBAAjB,aAAG,EAAwB6d,eAEvB8B,EAAWU,EAAcrgB,SAAS6d,cAEtC,OAAGwC,QAAH,IAAGA,GAAH,UAAGA,EAAeN,wBAAlB,aAAG,EAAiCnf,QACpC,CACI,IADJ,EACQ2d,EAA6B,GADrC,eAEqB8B,EAAcN,kBAFnC,IAEI,IAAI,EAAJ,qBACA,CAAC,IADOzC,EACR,QAC8B,kBAAhBA,EAAM9qB,QAEZ+rB,EAAcjB,EAAMpT,MAAQoT,EAAM9qB,QAN9C,8BASIqtB,EAAoBtB,MAG7B,CAAC8B,EAAejF,EAAauE,IAEhCf,GAAcG,EAAQ5B,MAAOoD,GAC7B3B,GAAcG,EAAQ5B,MAAOiD,GAE7B,IAAM/E,EAAW3W,eAAkB,WAE/BjM,GAAM,GAAD,OAAIwB,IAAJ,iCAAiD,CAClDM,OAAQ,OACR1B,KAAMY,KAAKC,UAAL,2BAAoBskB,EAAO1qB,SAA3B,IAAoCyK,SAAUiL,SAASgV,EAAO1qB,QAASyK,aAC7ExF,QAAS,CACL,eAAgB,sBAErBmD,MAAK,SAAAyC,GACJ,IAAGA,EAAIrD,GAeH,OAAOqD,EAAIvF,OAAO8C,KAAK/B,QAAQI,QAb/BolB,EAAoB,MACpBK,EAAS,IACTH,EAAW,IACXjE,EAAY,IACZuE,EAAW,IACXE,EAAoB,IACpBd,EAAQ5B,MAAM,CACVjgB,QAAS6B,IAAF,MACPR,SAAU,WACX,QAMR6d,OAAM,SAAApjB,GACL+lB,EAAQ5B,MAAM,CACVjgB,QAASlE,EAAEoE,cAAgB2B,IAAlB,MACTR,SAAU,eAInB,CAACyf,EAAQe,EAASM,EAAYG,EAAUG,EAAYvE,IAGjDqF,EAAmBN,GAAuBG,EAahD,OAZA5b,aAAgB,WAAQqa,EAAQrc,OAAO+d,KAAqB,CAACA,EAAkB1B,IAG/Era,aAAgB,WACZ,QAAqBpQ,IAAlB+rB,EACH,CAAC,IAAD,EACgCA,EAApBG,WACRpF,QAFJ,MACyB,GADzB,GAE6B,OAE9B,CAACiF,EAAejF,IAIf,gCAEI,gBAAC,KAAD,CAAMpG,WAAS,EAACxG,QAAS,GACrB,gBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAEoc,QAAS,OAAQC,eAAgB,kBACzD,uBAAKrc,MAAO,CAACsc,SAAU,IACnB,gBAAC,KAAD,CAAWlvB,MAAOqN,IAAF,MAAgB8H,WAAS,EACrCrU,MAAOgL,EACPsL,SAAUsW,EACVyB,WAAYZ,EACZ9D,SAAUA,KAElB,uBAAK7X,MAAO,CAACwc,WAAY,IACrB,gBAAC,KAAD,KACI,gBAAC,KAAD,SAIZ,gBAAC,KAAD,CAAMzsB,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAACoc,QAAS,OAAQC,eAAgB,kBACxD,gBAAC,KAAD,CAAM3L,WAAS,KAGnB,gBAAC,KAAD,CAAM3gB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAarO,WAAS,EAACsC,cAAyB7U,IAAf4rB,GAC7B,gBAAC,KAAD,KAAanhB,IAAb,OACA,gBAAC,KAAD,CACIvM,MAAOd,EACPoX,SAAUyW,QAEUjrB,IAAf4rB,EACGA,EAAWlC,OAAOnrB,KAAI,SAAAnB,GAAK,OACvB,gBAAC,KAAD,CAAUkS,IAAKlS,EAAMc,MAAOA,MAAOd,EAAMc,OAAQd,EAAMA,UAE3D,QAKpB,gBAAC,KAAD,CAAM2C,MAAI,EAAC6gB,GAAI,SAEQ5gB,IAAlB+rB,EACG,gBAAC,KAAD,CAAaxZ,WAAS,GAClB,gBAAC,KAAD,KAAa9H,IAAb,OACA,gBAAC,KAAD,CACIvM,MAAOitB,EACP3W,SAAU4W,QAEaprB,IAAlB+rB,EACGA,EAAcrgB,SAASge,OAAOnrB,KAAI,SAAA4sB,GAAO,OACrC,gBAAC,KAAD,CAAU7b,IAAK6b,EAAQjtB,MAAOA,MAAOitB,EAAQjtB,OAAQitB,EAAQ/tB,UAEjE,OAIhB,WAIiC4C,KAAvB,OAAb+rB,QAAa,IAAbA,OAAA,EAAAA,EAAeN,kBACZ,gBAAC,GAAD,CAAkB7B,OAAQmC,EAAcN,iBAAkBjX,SAAU+W,IACpE,UAGevrB,IAAlB+rB,EACG,gBAAC,KAAD,CAAMhsB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAWxjB,MAAOqN,IAAF,MACZoK,cAA4B7U,IAAlB+rB,EACVvnB,OAAQknB,EACRe,WAAYf,OAAa1rB,EAAYyK,IAAf,MACtBvM,MAAOuL,EACP+K,SAAUwW,EACV3tB,KAAK,SAASkV,WAAS,KAG/B,KAIR,gBAAC,KAAD,CAAMxS,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAE8C,UAAW,IACnC,gBAAC,KAAD,CAEI5C,QAAQ,YACRoC,QAASyU,GAEPtc,IALN,W,2+DCjPpB,IAgCMiiB,GAAQ,SAACrvB,EAAc0C,GAAf,MAA+C,SAAT1C,EAAmB0C,EAAKqJ,SAAWrJ,EAAKsJ,KAEtFsjB,GAAc,uCAAG,WAAO1jB,EAAmBC,GAA1B,iBAAA9J,EAAA,sEAED0G,IAAIC,QAAJ,mCAAwCkD,EAAxC,YAAqDC,IAFpD,WAEbW,EAFa,QAGXrD,GAHW,oBAKG,MAAfqD,EAAIxF,OALQ,sBAOL,IAAIX,MAAM+G,IAAV,KAAsBvB,IAPjB,mBAWDxF,MAXC,UAWWmG,EAAI+iB,OAXf,kEAce/iB,EAAIvF,OAdnB,eAcb7F,EAda,yBAeZA,GAfY,4CAAH,wDAkBpB,SAASouB,GAAe/b,GACvB,IACU/Q,EAAwB+Q,EAAxB/Q,KAAM1C,EAAkByT,EAAlBzT,KAAMiV,EAAYxB,EAAZwB,QADvB,EAEgC0B,oBAAS,GAFzC,oBAEW8Y,EAFX,KAEmBC,EAFnB,KAGI,OACI,kBAAC,KAAD,CACIza,QAAS,yBAAMA,QAAN,IAAMA,OAAN,EAAMA,EAAUvS,IACzBitB,YAAa,kBAAMD,GAAU,IAC7BE,UAAW,kBAAMF,GAAU,IAC3BG,aAAc,kBAAMH,GAAU,IAC9BI,WAAY,kBAAMJ,GAAU,IAC5BK,SAAUN,GAEV,kBAAC,KAAD,KAAYJ,GAAMrvB,EAAM0C,IACxB,kBAAC,KAAD,CAAWstB,MAAM,SAAS5iB,IAA1B,KAAiC,IAAIzH,KAAKjD,EAAKutB,YAC/C,kBAAC,KAAD,CAAWD,MAAM,SAASttB,EAAK2J,MAsM5BqQ,IC5QVwT,GD4QUxT,0BAzQA,SAACC,GAAD,MAAiB,CAC5BL,KAAK,2BACEK,EAAMK,OAAOC,WADhB,IAEAL,WAAiC,EAArBD,EAAME,QAAQC,KAC1BC,cAAoC,EAArBJ,EAAME,QAAQC,OAEjCqT,SAAU,CACN3b,gBAAiBmI,EAAMyT,QAAQjpB,MAAMkpB,SAkQ9B3T,EAjMf,SAAqBjJ,GACpB,IACW8H,EAA8C9H,EAA9C8H,QAA4B3P,EAAkB6H,EAArCmL,MAAS2F,OAAU3Y,UADxC,EAEkC+K,mBAAS,IAF3C,oBAEW9K,EAFX,KAEoB6hB,EAFpB,OAGgC/W,wBAAoChU,GAHpE,oBAGWjC,EAHX,KAGmB4vB,EAHnB,OAI4B3Z,oBAAkB,GAJ9C,oBAIWtM,EAJX,KAIiBkmB,EAJjB,OAK4C5Z,wBAA2BhU,GALvE,oBAKW8I,EALX,KAKyB+kB,EALzB,OAM0C7Z,wBAAkChU,GAN5E,oBAMW8tB,EANX,KAMwBC,EANxB,KAQIxW,qBAAU,WACN,IAAMuJ,EAAU,IAAI1B,GAAJ,uCAAY,WAAOlW,EAAS7L,GAAhB,SAAA+B,EAAA,sDACxB2uB,OAAe/tB,GACf4tB,GAAQ,GACR7C,EAAW7hB,GACXyjB,GAAe1jB,EAAWC,GACrB9B,MAAK,SAAA3I,GAAI,OAAIkvB,EAAUlvB,MACvBqpB,OAAM,SAACtc,GAAD,OAAgBqiB,EAAgBriB,EAAI5C,YAC1ColB,SAAQ,kBAAMJ,GAAQ,MAPH,2CAAZ,yDASb,GACH,OAAO,WACH9M,EAAQmC,aAEb,CAACha,IAEJsO,qBAAU,WACNoW,OAAU3tB,KACX,CAACkJ,IAEJ,IAAM+kB,EAAW9Z,sBAAW,uCAAC,WAAOzP,GAAP,eAAAtF,EAAA,6DACzBsF,EAAEwpB,iBADuB,SAGrBN,GAAQ,GAHa,SAIFjB,GAAe1jB,EAAWC,GAJxB,OAIfzK,EAJe,OAKrBkvB,EAAUlvB,GALW,gDASrBovB,EAAgB,KAAEjlB,SATG,yBAYrBglB,GAAQ,GAZa,4EAAD,sDAczB,CAAC1kB,EAASD,IAEPklB,EAAc,SAACpuB,GAAD,OAAuBguB,EAAehuB,IAE1D,QAAmBC,IAAhB8tB,EACH,CACI,IAAM/tB,EAAO+tB,EACA/vB,EAAQV,KACrB,OACI,6BACI,kBAAC,KAAD,KAEI,kBAAC,KAAD,KACI,kBAAC,KAAD,CAAMqjB,WAAS,EAACxG,QAAS,GACrB,kBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKsJ,MAEtC,kBAAC,KAAD,CAAMtJ,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKquB,WAEtC,kBAAC,KAAD,CAAMruB,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKqJ,WAEtC,kBAAC,KAAD,CAAMrJ,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKsuB,eAEtC,kBAAC,KAAD,CAAMtuB,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASzF,IAA7B,KAAoC,IAAIzH,KAAKjD,EAAKutB,aAEtD,kBAAC,KAAD,CAAMvtB,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAEfnQ,EAAKuuB,WACA7jB,IADL,KACY,IAAIzH,KAAKjD,EAAKuuB,aACrB7jB,IAFL,QAMT,kBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAK2J,MAEtC,kBAAC,KAAD,CAAM3J,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnQ,EAAKwuB,qBAKnD,yBAAKve,MAAO,CAAC8C,UAAW,IACtB,kBAAC,KAAD,CAAQ5C,QAAQ,YAAYmD,MAAM,UAAUf,QAAS,kBAAMyb,OAAe/tB,KAAayK,IAAvF,SAOb,OACI,6BACM/C,EAAO,kBAAC,KAAD,MAAqB,KAC9B,kBAAC,KAAD,CAAO+f,UAAW,EAAG/N,UAAWd,EAAQe,MACpC,0BAAMsU,SAAUA,GACZ,kBAAC,KAAD,CACIpZ,SAAUnN,EACV8mB,UAAU,UACVpxB,MAAOqN,IAAF,MACLgiB,WAAYhiB,IAAF,MACV2e,OAAO,SACPlZ,QAAQ,WACRqC,WAAS,EACTC,WAAY,CACRsC,aAAe5L,EAAQoD,OAAS,EAC5B,kBAAC,KAAD,CAAgBuG,SAAS,OACrB,kBAAC,KAAD,CAAYb,aAAYvH,IAAZ,MAAyBuF,MAAO,CAACC,QAAS,GAAIqC,QAAS,kBAAMyY,EAAW,MAChF,kBAAC,KAAD,aAGR/qB,GAER9B,MAAOgL,EACPsL,SAAU,SAAA9P,GAAC,OAAIqmB,EAAWrmB,EAAEiQ,OAAOzW,QACnCqlB,UAAW,SAAA7e,GAAC,OAAIA,EAAE+pB,mBAClBC,QAAS,SAAAhqB,GAAC,OAAIA,EAAE+pB,mBAChBlC,WAAY,SAAA7nB,GAAC,OAAIA,EAAE+pB,qBAEvB,kBAAC,KAAD,CAAQve,QAAQ,YAAYmD,MAAM,UAAUf,QAAS2b,EAAUpZ,SAAUnN,GAA2B,IAAnBwB,EAAQoD,QAAe7B,IAAxG,SAIL1M,EACC,oCACA,kBAAC,KAAD,CAAO0pB,UAAW,EAAGzX,MAAO,CAAC8C,UAAW,GAAI4G,UAAWd,EAAQe,MAC3D,kBAAC,KAAD,CAAM+G,WAAS,EAACxG,QAAS,GACrB,kBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAA2B,SAAhBnS,EAAOV,KAAkBoN,IAAzB,MAAsCA,IAAtC,OAC/B,kBAAC,KAAD,CAAYyF,QAAQ,SAASnS,EAAOZ,KAExC,kBAAC,KAAD,CAAM4C,MAAI,EAAC6gB,GAAI,GACX,kBAAC,KAAD,CAAY1Q,QAAQ,WAAWzF,IAA/B,OACA,kBAAC,KAAD,CAAYyF,QAAQ,SAASnS,EAAO6X,SAKhD,kBAAC,KAAD,CAAO6R,UAAW,EAAGzX,MAAO,CAAC8C,UAAW,IACpC,kBAAC,KAAD,CAAO7C,QAAQ,SACX,kBAAC,KAAD,KACI,kBAAC,KAAD,KACI,kBAAC,KAAD,KAA4B,SAAhBlS,EAAOV,KAAkBoN,IAAzB,MAA0CA,IAA1C,OACZ,kBAAC,KAAD,CAAW4iB,MAAM,SAAS5iB,IAA1B,OACA,kBAAC,KAAD,CAAW4iB,MAAM,SAAS5iB,IAA1B,SAGR,kBAAC,KAAD,KAEI1M,EAAO+M,MAAMvM,KAAI,SAAAowB,GAAI,OACjB,kBAAC9B,GAAD,CAAgBvd,IAAKod,GAAM3uB,EAAOV,KAAMsxB,GACpC5uB,KAAM4uB,EACNrc,QAAS6b,EACT9wB,KAAMU,EAAOV,cAajC,KAEJ,kBAAC,KAAD,CACIuxB,aAAc,CAAClV,UAAWd,EAAQ4U,UAClCqB,iBAAkB,IAClBjmB,QAASE,EACTrB,UAAuBzH,IAAjB8I,EACNoK,QAAS,kBAAM2a,OAAgB7tB,U,4wCCvQ1CutB,O,iCAAAA,I,uBAAAA,I,gBAAAA,Q,KAEL,IAAMppB,GAAQU,IAAKgB,wBAmBnB,SAASskB,GAA0ClB,GAC/C,OAAO9U,uBAAY,SAACzP,GAAD,OAA6BukB,EAASvkB,EAAEiQ,OAAOzW,SAAQ,CAAC+qB,IAG/E,SAASmB,GAAqCC,GAAyF,IAAD,EACxGrW,mBAAiBqW,GADuF,oBAC3HnsB,EAD2H,KACpH+qB,EADoH,KAElI,MAAO,CAAC/qB,EAAOisB,GAAqBlB,GAAWA,GAwBnD,IA2MelP,0BApPA,SAACC,GAAD,MAAiB,CAC5BL,KAAK,2BACEK,EAAMK,OAAOC,WADhB,IAEAL,WAAiC,EAArBD,EAAME,QAAQC,KAC1BC,cAAoC,EAArBJ,EAAME,QAAQC,OAEjCqT,SAAU,CACN3b,gBAAiBmI,EAAMyT,QAAQjpB,MAAMkpB,SA6O9B3T,EA3MM,SAACjJ,GAAqC,IAE/C8H,EAA8C9H,EAA9C8H,QACF6R,GADgD3Z,EAArCmL,MAAS2F,OAAU3Y,UACpByhB,qBAAW9B,KACrBf,EAAW8C,mBAJqC,EAKHP,GAAa,KALV,oBAK/C0E,EAL+C,KAKrCC,EALqC,KAKlBC,EALkB,OAMH5E,GAAa,KANV,oBAM/C6E,EAN+C,KAMrCC,EANqC,KAMlBC,EANkB,OAOM/E,GAAa,KAPnB,oBAO/CgF,EAP+C,KAOlCC,EAPkC,KAOZC,EAPY,OAQMlF,GAAa,KARnB,oBAQ/CmF,EAR+C,KAQlCC,EARkC,KAQZC,EARY,OAS9Bzb,wBAAiChU,GATH,oBAS/CD,EAT+C,KASzCmF,EATyC,OAUGklB,GAAa,IAVhB,oBAU/CsF,EAV+C,KAUnCC,EAVmC,KAUdC,EAVc,OAWd5b,wBAA6BhU,GAXf,oBAW/C8I,EAX+C,KAWjC+kB,EAXiC,OAYhB7Z,mBAASuZ,GAAeA,GAAesC,OAZvB,oBAY/CC,EAZ+C,KAYnCC,EAZmC,KAyBhDrE,EAAa,SAACjiB,GAAuB,MAAO,4BAA4Bmd,KAAKnd,IAE7EigB,EAASiB,mBACfjB,EAAO1qB,QAAU,CACb0wB,aACAZ,WACAG,WACAG,cACAG,cACAO,cAGJ,IAAME,EAAa5f,eAAkB,WACjCuc,EAAe,MAAO+C,GACjB5H,OAAM,SAACtc,GAAD,OAAgBqiB,EAAgBriB,EAAI5C,cAChD,CAAC8mB,IAEE/C,EAAc,uCAAG,WAAO1jB,EAAmBC,GAA1B,mBAAA9J,EAAA,sEACD0G,IAAIC,QAAJ,4BAAiC2pB,EAAjC,YAA+CI,IAD9C,WACbjmB,EADa,QAEVrD,GAFU,oBAGI,MAAfqD,EAAIxF,OAHO,sBAIL,IAAIX,MAAM+G,IAAV,KAAiCilB,IAJ5B,mBAODhsB,MAPC,UAOWmG,EAAI+iB,OAPf,kEAWY/iB,EAAIvF,OAXhB,eAWb7F,EAXa,OAYnBuwB,EAAYvwB,EAAKgL,SAASyC,YAZP,UAcMpG,IAAIC,QAAJ,yBAA8BtH,EAAK4K,MAdzC,YAcb4mB,EAda,QAeHzpB,GAfG,oBAgBW,MAAtBypB,EAAW5rB,OAhBA,uBAiBL,IAAIX,MAAM+G,IAAV,KAAsCilB,IAjBjC,oBAoBDhsB,MApBC,UAoBWusB,EAAWrD,OApBtB,0FAwBMqD,EAAW3rB,OAxBjB,QAwBf7F,EAAKyxB,QAxBU,sBA2BnBhrB,EAAQzG,GA3BW,kBA4BZA,GA5BY,4CAAH,wDA+BdsoB,EAAW3W,eAAkB,WAC/B3L,QAAQ4C,IAAIqiB,EAAO1qB,SACnBmF,GAAM,GAAD,OAAIwB,IAAJ,6CAA6D,CAC9DM,OAAQ,OACR1B,KAAMY,KAAKC,UAAL,eAAoBskB,EAAO1qB,UACjCiF,QAAS,CACL,eAAgB,sBAErBmD,MAAK,SAAAyC,GACJ,IAAIA,EAAIrD,GAcJ,OAAOqD,EAAIvF,OAAO8C,KAAK/B,QAAQI,QAb/BmqB,EAAc,IACdH,EAAe,KACfH,EAAe,KACfH,EAAY,KACZH,EAAY,KACZ9pB,OAAQlF,GACR6tB,OAAgB7tB,GAChByqB,EAAQ5B,MAAM,CACVjgB,QAAS6B,IAAF,MACPR,SAAU,WACX,QAKR6d,OAAM,SAAApjB,GACL+lB,EAAQ5B,MAAM,CACVjgB,QAASlE,EAAEoE,cAAgB2B,IAAlB,MACTR,SAAU,eAInB,QAAClK,QAAD,IAACA,OAAD,EAACA,EAAMsJ,MAEV,OACI,gCACI,gBAAC,KAAD,CAAMqX,WAAS,EAACxG,QAAS,GACrB,gBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,IACX,uBAAK5Q,MAAO,CAAEsc,SAAU,IACpB,gBAAC,KAAD,CAAY1W,KAAK,aAAa2T,aAAcuG,EAAYtb,SAAU,SAAA9P,GAAC,OAjGnFqrB,EAiG8GrrB,EAjGxFgR,cAAcxX,OACpC0xB,EAAc,IACdH,EAAe,KACfH,EAAe,KACfH,EAAY,KACZH,EAAY,KACZ9pB,OAAQlF,QACR6tB,OAAgB7tB,IA0FkGmwB,KAAG,GACjG,gBAAC,KAAD,CAAkBjyB,MAAOqvB,GAAeA,GAAesC,MAAO5Z,QAAS,gBAAC,KAAD,MAAW7Y,MAAM,SACxF,gBAAC,KAAD,CAAkBc,MAAOqvB,GAAeA,GAAe6C,eAAgBna,QAAS,gBAAC,KAAD,MAAW7Y,MAAM,kBACjG,gBAAC,KAAD,CAAkBc,MAAOqvB,GAAeA,GAAe8C,UAAWpa,QAAS,gBAAC,KAAD,MAAW7Y,MAAM,gBAIxG,gBAAC,KAAD,CAAM2C,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAEoc,QAAS,OAAQC,eAAgB,kBACzD,uBAAKrc,MAAO,CAAEsc,SAAU,IACpB,gBAAC,KAAD,CAAWlvB,MAAOqN,IAAF,MAAgB8H,WAAS,EACrCrU,MAAOwxB,EACPY,OAAQN,EACRxb,SAAUmb,EACV9H,SAAUA,MAItB,gBAAC,KAAD,CAAM9nB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAWxjB,MAAOqN,IAAF,MACZgiB,WAAYf,EAAWoD,QAAY9uB,EAAYyK,IAAnC,MACZvM,MAAO4wB,EACPta,SAAUua,EACV1xB,KAAK,SAASkV,WAAS,KAE/B,gBAAC,KAAD,CAAMxS,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAWxjB,MAAOqN,IAAF,MACZgiB,WAAYf,EAAWuD,QAAYjvB,EAAYyK,IAAnC,MACZvM,MAAO+wB,EACPza,SAAU0a,EACV7xB,KAAK,SAASkV,WAAS,KAG/B,gBAAC,KAAD,CAAMxS,MAAI,EAAC6gB,GAAI,IACX,2BACI,gBAAC,KAAD,CAAWxjB,MAAOqN,IAAF,MACZgiB,WAAYf,EAAW0D,QAAepvB,EAAYyK,IAAtC,MACZvM,MAAOkxB,EACP5a,SAAU6a,EACVhyB,KAAK,WACT,gBAAC,KAAD,CAAWD,MAAOqN,IAAF,MACZgiB,WAAYf,EAAW6D,QAAevvB,EAAYyK,IAAtC,MACZvM,MAAOqxB,EACP/a,SAAUgb,EACVnyB,KAAK,aAIjB,gBAAC,KAAD,CAAM0C,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAEoc,QAAS,OAAQC,eAAgB,kBACzD,gBAAC,KAAD,CAAM3L,WAAS,KAGnB,gBAAC,KAAD,CAAM3gB,MAAI,EAAC6gB,GAAI,GAAI5Q,MAAO,CAAE8C,UAAW,IACnC,gBAAC,KAAD,CACI5C,QAAQ,YACRoC,QAASyU,GACXtc,IAHF,QAMJ,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYvN,MAAM,gBAAgBlD,cAAY,GAA9C,QAGA,gBAAC,KAAD,CAAYD,QAAQ,KAAK4F,UAAU,MAAnC,OACK/V,QADL,IACKA,OADL,EACKA,EAAMsJ,IADX,WACiBtJ,QADjB,IACiBA,OADjB,EACiBA,EAAM6V,MAEvB,gBAAC,KAAD,CAAYvC,MAAM,gBAAgBlD,cAAY,GAA9C,iBAGA,gBAAC,KAAD,CAAYD,QAAQ,KAAK4F,UAAU,MAAnC,OACK/V,QADL,IACKA,OADL,EACKA,EAAMwwB,YAEX,gBAAC,KAAD,CAAYld,MAAM,gBAAgBlD,cAAY,GAA9C,WAGA,gBAAC,KAAD,CAAYD,QAAQ,KAAK4F,UAAU,MAAnC,OACK/V,QADL,IACKA,OADL,EACKA,EAAMmwB,YAKvB,gBAAC,KAAD,CACItB,aAAc,CAAElV,UAAWd,EAAQ4U,UACnCqB,iBAAkB,IAClBpnB,UAAuBzH,IAAjB8I,EACNF,QAASE,EACToK,QAAS,kBAAM2a,OAAgB7tB,U,unBCrO/C,IAAMmlB,GAAW1O,KAAOC,IAAV,MA4BR8Z,GACN,CACIC,QAAS,CACLzgB,MAAO,CAAE6B,gBAAiBC,KAAM,MAChC0J,KAAMkV,MAEVC,QAAS,CACL3gB,MAAO,CAAE6B,gBAAiB+e,KAAM,MAChCpV,KAAMqV,MAEVrsB,MAAO,CACHwL,MAAO,CAAE6B,gBAAiByB,KAAI,MAC9BkI,KAAMsV,OAIRC,GAAwB,SAAC,GAAD,IAAEnoB,EAAF,EAAEA,QAAeuT,EAAjB,EAAWX,KAAYxL,EAAvB,EAAuBA,MAAvB,OAC1B,gBAAC,KAAD,CAAiBA,MAAOA,EAAOpH,QAC3B,wBAAMoH,MAAO,CAACoc,QAAS,OAAQzL,WAAY,WACvC,gBAACxE,EAAD,CAAMnM,MAAO,CAAC4S,YAAa,EAAGlQ,SAAU,MAD5C,IACoD9J,MAKtDwc,G,4MAEMC,eAAiB,SAACC,GAAD,OACrB,EAAKxU,MAAM8J,QAAQjb,KAAnB,UAA2B,EAAKmR,MAAMmL,MAAMQ,KAA5C,YAAoD6I,K,EAEhD9Q,SAAW,SAAC9P,GAAD,OACf,EAAKoM,MAAMkgB,oBAAoBtsB,EAAEiQ,OAAOzW,Q,EAyEpC+yB,eAAiB,SAACzsB,EAAqBlF,GAC9C,IACWsJ,EAA0BpE,EAA1BoE,QAASqB,EAAiBzF,EAAjByF,SAAU9M,EAAOqH,EAAPrH,GAC3B,OACI,gBAAC,KAAD,CAAUsK,KAAgB,IAAVnI,EAAagQ,IAAKnS,EAC9B0xB,iBAA4B,IAAVvvB,EAAc,SAAOU,EACvCkT,QAAS,kBAAM,EAAKpC,MAAM6U,aAAaxoB,KACvC,gBAAC,GAAD,CAAuByL,QAASA,EAAS4S,KAAMgV,GAAevmB,GAAUuR,KAAMxL,MAAOwgB,GAAevmB,GAAU+F,U,mEA5EtHnO,KAAKiP,MAAMjN,S,gDAGWqf,GAEtBrhB,KAAKiP,MAAM1C,OAAO8U,EAAUxb,Q,mCAI/B,IAAD,EAC+B7F,KAAKiP,MAAxB7H,iBADZ,MACwB,GADxB,EAEI,OACI,gCACI,gBAAC,KAAD,CAAMyX,WAAS,EAACxG,QAAS,EAAGyG,WAAW,WAAW3Q,MAAO,CAAC4X,aAAc,KACpE,gBAAC,KAAD,CAAM7nB,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CACIqE,QAAM,EAAC1S,WAAS,EAChBrU,MAAO+K,EACP2M,KAAK,YACLpB,SAAU3S,KAAK2S,SACfpX,MAAOqN,IAAF,OACL,gBAAC,KAAD,CAAUvM,MAAM,GAAG2W,UAAQ,IAC3B,gBAAC,KAAD,CAAU3W,MAAM,OAAhB,oBACA,gBAAC,KAAD,CAAUA,MAAM,OAAhB,gBAaX2D,KAAKqvB,yBAAwB,M,8CAKVrc,GAC/B,IAAD,SAC+BhT,KAAKiP,MAAxB7H,iBADZ,MACwB,GADxB,EAEUkoB,EAAU,CACZ,CAAEC,MAAO,YAAazb,MAAOlL,IAAF,MAAmB7F,KAAM,4BACpD,CAAEwsB,MAAO,aAAczb,MAAOlL,IAAF,MAAoB7F,KAAM,2BACtD,CAAEwsB,MAAO,QAASzb,MAAOlL,IAAF,MAAqB7F,KAAM,wBAClD,CAAEwsB,MAAO,UAAWzb,MAAOlL,IAAF,MAAiB7F,KAAM,MAChD,CAAEwsB,MAAO,eAAgBzb,MAAOlL,IAAF,MAAuB7F,KAAK,OAC5D9E,QAAO,SAAAC,GAAI,OAAkB,OAAdA,EAAK6E,MAAiB,EAAKkM,MAAMugB,QAAQtxB,EAAK6E,SAG/D,OACI,gBAAC,KAAD,CAAM8b,WAAS,EAACxG,QAAS,EAAGlK,MAAO,CAACsc,SAAU,IAE1C6E,EAAQ5yB,KAAI,SAAA6d,GAAM,OACd,gBAAC,KAAD,CAAMrc,MAAI,EAAC6gB,GAAI,EAAGtR,IAAK8M,EAAOgV,OAC1B,gBAAC,KAAD,CAAQlM,KAAK,QAAQ3S,WAAS,EAACrC,QAAQ,WAAW2E,SAAUA,EACpDvC,QAAS,kBAAM,EAAK+S,eAAL,UAAuBpc,EAAvB,YAAoCmT,EAAOgV,UAC7DhV,EAAOzG,c,+BAsB/B,IAAD,EACgE9T,KAAKiP,MAAzDmL,EADZ,EACYA,MAAOhT,EADnB,EACmBA,UAAWmC,EAD9B,EAC8BA,cAAekmB,EAD7C,EAC6CA,eACzC,YAAiBtxB,IAAdiJ,EAGK,gBAAC,GAAD,KACKpH,KAAKuc,cAMd,gBAAC,GAAD,KACI,gBAAC9B,EAAA,EAAD,KACI,gBAACE,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,wBAAyB3G,UAAWyb,KAC9D,gBAAC/U,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,yBAA0B3G,UAAWmQ,KAC/D,gBAACzJ,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,oBAAqB3G,UAAW0b,KAC1D,gBAAChV,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,sBAAuB3G,UAAW2b,KAC5D,gBAACjV,EAAA,EAAD,CAAOC,KAAMR,EAAMQ,KAAO,2BAA4B3G,UAAW4b,KACjE,gBAAClV,EAAA,EAAD,KACK3a,KAAKuc,eAIV,sBAAIhT,GAAJ,YAAsBkmB,IAAgB/yB,IAAIsD,KAAKovB,qB,GApHrC7gB,aA2HfgC,gBAzKS,SAACvS,GAAD,MAAwB,CAC5CoJ,UAAW0D,GAA6B9M,GACxCuL,cAAeiC,GAA0BxN,GACzCyxB,eAAgB9jB,GAAuB3N,GACvC6H,M5CiDuBkF,E4CjDP/M,I5CiD2B+M,EAAElF,OAAvB,IAACkF,K4C9CA,SAACrG,GAAD,MAAoB,CAC3CyqB,oBAAqB,SAAC/nB,GAAD,OAAuB1C,ElD8Bf,SAAC0C,GAAD,MAAiD,CAC9E5L,KAP+B,sBAQ/B4L,akDhCqD0oB,CAAkB1oB,KACvE0c,aAAc,SAACxoB,GAAD,OAAgBoJ,EAASqE,GAAkBzN,KACzD0G,KAAM,kBAAM0C,ElDZiC,CAC7ClJ,KANsB,mBkDgLX+U,CAA6CgT,ICvM7CwM,GAFDhhB,GADAJ,GAAkB/P,GAAS,QAAS,GAChBoQ,I,uFCDlC,IAQeghB,GARS,CACpBlc,MAAOlL,IAAF,MACL+Q,KAAMsW,KACNhc,UAAWsP,GACXpf,IAAK,SACLiC,MAAO,CAAC,qB,qBCHL,SAAS8pB,GAASjhB,GACxB,IACWhG,EAAUgG,EAAVhG,MACR,OACI,gBAAC,KAAD,KAEIA,EAAMvM,KAAI,SAAAwB,GAAI,OAAI,gBAACiyB,GAAD,CAAc1iB,IAAKvP,EAAK2vB,WAAY3vB,KAAMA,QAMxE,SAASiyB,GAAalhB,GACrB,IACW/Q,EAAS+Q,EAAT/Q,KACR,OACI,gBAAC,KAAD,KACA,gBAAC,KAAD,CACIkS,QAASlS,EAAKquB,SACdjc,UACI,gCACI,gBAAC,KAAD,CAAY2D,UAAU,OAAO9F,MAAO,CAACoc,QAAS,UAAW/Y,MAAM,eAC1DtT,EAAK2vB,YAET,MAAQ3vB,EAAKkyB,oBCZ3B,SAASC,GAAYphB,GAC3B,IACWqhB,EAAwCrhB,EAAxCqhB,SAAUzY,EAA8B5I,EAA9B4I,UAAW0Y,EAAmBthB,EAAnBshB,eAEvBC,EAAmB3e,mBAAQ,kBAAMye,EAClC5zB,KAAI,SAAA2rB,GAAC,OAAI,SAACxlB,GAAD,OAA4C0tB,EAAelI,EAAGxlB,EAAEiQ,OAAO6O,eACnF,CAAC2O,EAAUC,IAEb,OACI,gBAAC,KAAD,CAAM1Y,UAAWA,GACZyY,EAAS5zB,KAAI,SAAC+zB,EAASC,GAAV,OACV,gBAAC,KAAD,CAAUjjB,IAAKgjB,EAAQE,IAAKpW,QAAM,GAI9B,gBAAC,KAAD,CAAcnK,QAASqgB,EAAQl1B,QAC/B,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAUoX,SAAU6d,EAAiBE,GAAI/O,QAAS8O,EAAQ9O,gB,qKCvBlF,IAAMiP,GAAiB,SAACC,GAAD,OCbhB,SAA6BrP,GACnC,IAD8CsP,EAC/C,uDAD8E,EAAG1iB,IACjF,yDACQrD,EAAIyW,EAAEnX,SAAS,GACnB,QAAgBlM,IAAb2yB,EACH,CACI,GAAG1iB,IAAcrD,EAAEN,OAASqmB,IAAc,GAAmB,IAAb/lB,EAAEN,QAClD,CACI,IAAMsmB,EAAUhmB,EAAEN,QAAUqmB,EAAY/lB,EAAEN,OAASqmB,GACnD/lB,EAAIA,EAAEimB,SAASD,EAAS,KAG5B,GAAGhmB,EAAEN,OAASqmB,EACd,CAGI,IAFA,IAAIG,EAAgBlmB,EAAEN,OAASqmB,EAC3BI,EAAS,CAACnmB,EAAE8S,OAAO,EAAGoT,IAClBP,EAAIO,EAAeP,EAAI3lB,EAAEN,OAAQimB,GAAKI,EAE1CI,EAAOpzB,KAAKiN,EAAE8S,OAAO6S,EAAGI,IAE5B/lB,EAAImmB,EAAOC,KAAK,MAIxB,OAAOpmB,EDVgCqmB,CAAoBve,SAASge,EAAO9sB,QAAQ,KAAM,IAAK,KAAO,IAGlG,SAASstB,GAAYpiB,GAC3B,IACW4I,EAA0C5I,EAA1C4I,UAAWmE,EAA+B/M,EAA/B+M,cAAesV,EAAgBriB,EAAhBqiB,YADtC,EAG0Cnf,oBAAS,kBAAMye,GAAeU,MAHxE,oBAGWC,EAHX,KAGwBC,EAHxB,KAgBI,OAFA9b,qBAAU,kBAAM8b,EAAeZ,GAAeU,MAAe,CAACA,IAG1D,uBAAKzZ,UAAWA,GACZ,gBAAC,KAAD,CAAWnH,WAAS,EAACrC,QAAQ,SAAS9S,MAAOqN,IAAF,MACvC+J,SAdc,SAAC9P,GAAD,OACtBmZ,GATgBjR,EASalI,EAAEiQ,OAAOzW,MAAM0H,QAAQ,gBAAiB,IAT1Cyd,EAS+C,EATjCzW,EAAEN,OAAS+W,EAAIzW,EAAE8S,OAAO,EAAG2D,GAAKzW,IAA1D,IAACA,EAAWyW,GAuBnBnlB,MAAOi1B,IAEX,gBAAC,KAAD,CAAW5gB,WAAS,EAACrC,QAAQ,SAAS9S,MAAOqN,IAAF,MAAqBuF,MAAO,CAAC8C,UAAW,GAC/E0B,SAZe,SAAC9P,GAAD,OACvB2uB,EAAe3uB,EAAEiQ,OAAOzW,MAAM0H,QAAQ,UAAW,MAYzC0qB,OAhBa,SAAC5rB,GAAD,OACrBmZ,EAAcnJ,SAAS0e,EAAYxtB,QAAQ,KAAM,IAAK,GAAGsG,SAAS,MAgB1DhO,MAAOk1B,K,uBElCVE,GAAmBC,aAAmB,CAC/CjkB,IAAK,eACLqO,QAAS,CACL6V,qBAAsB,EACtBC,WAAY,KCoCdC,GAAgB,kBAClB5tB,IAAIC,QAAQ,+BAA+BqB,MAAgB,SAAAzI,GAAC,OAAIA,EAAE2F,WAuDtDyV,8BAvFD,SAACC,GAAD,MAAiB,CAC5BL,KAAM,CACF1J,QAAS,QAEb3R,KAAM,CACFgW,MAAO,OACPqf,SAAU,IACV9hB,gBAAiBmI,EAAMyT,QAAQmG,WAAWC,OAE9CC,KAAM,CACFlM,aAAc,OA6EN7N,EAlDhB,SAAcjJ,GAEV,IAAMijB,EAAkBC,aAAkBV,IAD9C,EAE0Ctf,mBAAS,IAFnD,oBAEWmf,EAFX,KAEwBc,EAFxB,KAGYrb,EAAY9H,EAAZ8H,QACAsb,EAA4B9jB,aAAiB+jB,IAA7CD,wBACFh2B,EAAQwW,SAASye,EAAa,IALxC,EAOyEiB,oBAAS,yBAA0BV,IAA1FW,EAPlB,EAOY51B,KAAwC61B,EAPpD,EAOyC/L,UAPzC,EAQ8D6L,oBAAS,CAAC,iBAAkB,SAAUjB,GAAe,MAAM,kBAZrGW,EAYsHX,GAAe,IAXrJrtB,IAAIC,QAAJ,uCAA4C+tB,IAAQ1sB,MAAmB,SAAAzI,GAAC,OAAIA,EAAE2F,UAD/D,IAACwvB,KAYFS,EARlB,EAQY91B,KAA+B+1B,EAR3C,EAQgCjM,UAG5BhR,qBAAU,WACN2c,EAAwBI,GAAoBE,KAC7C,CAACF,EAAkBE,EAAgBN,IAEtC,IAAM9B,EAAiBje,uBAAY,SAAC+V,EAAY7nB,GAxBrC,IAACghB,EAAWmP,EAAaiC,EAyBhCR,GAzBQ5Q,EAyBcnlB,EAzBHs0B,EAyBUtI,EAAEsI,IAzBCiC,EAyBIpyB,EAzBYoyB,EAAMpR,EAAK,GAAKmP,EAASnP,IAAM,GAAKmP,IAyB7CtmB,SAAS,IAAIyT,iBACrD,CAACzhB,IAEJqZ,qBAAU,WACT,IAAD,IACIwc,EAAgB,CACZN,WAAU,iBAAEc,QAAF,IAAEA,OAAF,EAAEA,EAAczpB,MAAMwB,cAAtB,QAAgC,EAC1CknB,qBAAoB,iBAAEe,QAAF,IAAEA,OAAF,EAAEA,EAAcG,gBAAgBpoB,cAAhC,QAA0C,MAGnE,CAACioB,EAAcR,IAElB,IAAMY,EAAW,OAAGN,QAAH,IAAGA,OAAH,EAAGA,EAAuB91B,KAAI,SAAAq2B,GAAE,kCAC1CA,GAD0C,IAE7CpR,SAAUtlB,EAAS,GAAK02B,EAAGpC,KAAQ,OAGjCqC,EAAU/jB,EAAMmL,MAAMjW,IAAIJ,QAAQ,OAAQ,IAEhD,OACI,uBAAK8T,UAAWd,EAAQe,MACpB,gBAAC6C,EAAA,EAAD,CAAOC,KAAM,CAAC,GAAD,OAAIoY,EAAJ,qBAAyB/jB,EAAMmL,MAAMjW,MAAQgY,OAAK,EAACtB,OAAQ,kBACxE,gCACI,gBAACwW,GAAD,CAAaxZ,UAAWd,EAAQkb,KAAMX,YAAaA,EAAatV,cAAeoW,IAC/E,gBAAC/B,GAAD,CAAaC,SAAQ,OAAEwC,QAAF,IAAEA,IAAe,GAAIvC,eAAgBA,QAG9D,gBAAC5V,EAAA,EAAD,CAAOC,KAAI,UAAKoY,EAAL,cAA0B7W,OAAK,EAACtB,OAAQ,wBAAM,gBAACqV,GAAD,CAAUjnB,MAAK,iBAAEypB,QAAF,IAAEA,OAAF,EAAEA,EAAcG,uBAAhB,QAAmC,QAC3G,gBAAClY,EAAA,EAAD,CAAOC,KAAI,UAAKoY,EAAL,UAAsB7W,OAAK,EAACtB,OAAQ,wBAAM,gBAACqV,GAAD,CAAUjnB,MAAK,iBAAEypB,QAAF,IAAEA,OAAF,EAAEA,EAAczpB,aAAhB,QAAyB,Y,6wBC9C1F,SAASgqB,GAAahkB,GACpC,IACW4I,EAA+C5I,EAA/C4I,UAAW1J,EAAoCc,EAApCd,MAAO+kB,EAA6BjkB,EAA7BikB,SAAUC,EAAmBlkB,EAAnBkkB,eADxC,EAEkChhB,mBAAmB,IAFrD,oBAEWihB,EAFX,KAEoBC,EAFpB,OAGoClhB,mBAAmB,IAHvD,oBAGWoO,EAHX,KAGqB+S,EAHrB,KAIU1K,EAAUC,qBAAWyJ,IAErBiB,EAAYjhB,uBAAY,kBAAM+gB,GAAW,SAAAG,GAAE,4BAAQA,GAAR,CAAY,UAAM,IAC7DC,EAAiBnhB,uBACnB,SAACjW,EAAeoB,GAAhB,OAAkC41B,GAAW,SAAAK,GAAE,OAhBxC,SAAgBC,EAAUl2B,EAAepB,GAEpD,IAAMH,EAASy3B,EAAIC,QAEnB,OADA13B,EAAOuB,GAASpB,EACTH,EAYgD23B,CAAOH,EAAIj2B,EAAOpB,QACrE,IAIJqZ,qBAAU,WACN2d,EAAW,IACXC,EAAY,MACb,CAACJ,IAEJ,IAAMY,EAAkB,uCAAG,gCAAAv2B,EAAA,sEACL0G,IAAIC,QAAJ,mBAAwBivB,EAAxB,UAAgD,OAAQC,EAAQ12B,KAAI,SAAAq3B,GAAC,OAAI1T,WAAW0T,OAD/E,YACjB/rB,EADiB,QAEhBrD,GAFgB,iCAIYqD,EAAIvF,OAJhB,OAIb7F,EAJa,OAKnB02B,EAAY12B,EAAKo3B,QAAQt3B,KAAI,SAAAu3B,GAAC,OAAIA,EAAEC,iBALjB,yCASAlsB,EAAIvF,OATJ,QASb7F,EATa,OAUnBgsB,EAAQ5B,MAAM,CACVjgB,QAASnK,EAAKqK,cAAgB2B,IAArB,MACTR,SAAU,UAZK,4CAAH,qDAiBxB,OACI,gBAAC,KAAD,CAAMyP,UAAWA,EAAW1J,MAAOA,GAC/B,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAM0Q,WAAS,EAAC1Q,MAAO,CAACC,QAAS,uBAC7B,gBAAC,KAAD,CAAMyQ,WAAS,EAACxG,QAAS,GACrB,gBAAC,KAAD,CAAMna,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAM7gB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QApDZ,WAoDkCzF,IAAlC,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAY1Q,QArDD,SAsDN6kB,EAASiB,MAAM,2BACfjB,EAASkB,MAAM,2BACflB,EAASmB,MAAM,2BACfnB,EAASoB,WAItB,gBAAC,KAAD,CAAMp2B,MAAI,EAAC6gB,GAAI,GACX,gBAAC,KAAD,CAAM7gB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QA/DZ,WA+DkCzF,IAAlC,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QA/DhB,SA+DkC6kB,EAASqB,WAE9D,gBAAC,KAAD,CAAMr2B,MAAI,EAAC6gB,GAAI,GACX,gBAAC,KAAD,CAAM7gB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAnEZ,WAmEkCzF,IAAlC,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAnEhB,SAmEkC6kB,EAASsB,QAE9D,gBAAC,KAAD,CAAMt2B,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CAAM7gB,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAvEZ,WAuEkCzF,IAAlC,QACnB,gBAAC,KAAD,CAAM1K,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAvEhB,SAuEkC6kB,EAASuB,iBAK1E,gBAAC,KAAD,KAEyB,IAApBlU,EAAS9V,OACN,gBAAC,KAAD,CAAMoU,WAAS,EAACxG,QAAS,GAErB+a,EAAQ12B,KAAI,SAACg4B,EAAQhE,GAAT,OACR,gBAACiE,GAAD,CAAclnB,IAAKijB,EAAGjzB,MAAOizB,EAAGr0B,MAAOq4B,EAAQ/hB,SAAU8gB,QAKjE,gBAAC,KAAD,CAAM5U,WAAS,EAACxG,QAAS,GACrB,gBAAC,KAAD,CAAMna,MAAI,GAAC,gBAAC,KAAD,CAAYmQ,QAAQ,SAASzF,IAA7B,QAEX2X,EAAS7jB,KAAI,SAAAk4B,GAAM,OACf,gBAAC,KAAD,CAAM12B,MAAI,EAAC6gB,GAAI,IAAI,gBAAC,KAAD,CAAY1Q,QAAQ,SAASumB,SAQhE,gBAAC,KAAD,CAAazmB,MAAO,CAACoc,QAAS,SAEJ,IAApBhK,EAAS9V,OACP,gCACA,gBAAC,KAAD,CAAQ4Y,KAAK,QAAQ7R,MAAM,UAAUf,QAAS8iB,EAAWtf,UAAU,QAAQrL,IAA3E,OAEKwqB,EAAQ3oB,OAAS,GAAK2oB,EAAQ,GAAG3oB,OAAS,EACvC,gBAAC,KAAD,CAAY+G,MAAM,UAAUf,QAASqjB,EAAoB7f,UAAU,OAAO9F,MAAO,CAAC8K,WAAY,OAAQpI,SAAU,cAC5G,gBAAC,KAAD,OAEJ,MAGR,OAcpB,SAAS8jB,GAAa1lB,GACrB,IACW0D,EAA2B1D,EAA3B0D,SAAUtW,EAAiB4S,EAAjB5S,MAAOoB,EAAUwR,EAAVxR,MAEnBo3B,EAAoBviB,uBACtB,SAACzP,GAAD,OAA4C8P,EAAS9P,EAAEiQ,OAAOzW,MAAOoB,KACrE,CAACA,EAAOkV,IAGZ,OACI,gBAAC,KAAD,CAAMzU,MAAI,EAAC6gB,GAAI,IACX,gBAAC,KAAD,CACI1Q,QAAQ,SACR9S,MAAOqN,IAAF,KAAwBnL,EAAM,GACnCpB,MAAOA,EACPsW,SAAUkiB,EACVlkB,WAAY,CACRsC,aAAc,gBAAC,KAAD,CAAgBjC,SAAS,OAAzB,OAElBN,WAAS,K,sFC7KV,SAASiM,GAAM1N,GAC7B,IAAD,EACoCkD,mBAA0B,MAD9D,oBACW+gB,EADX,KACqB4B,EADrB,OAE8B3iB,mBAAwB,MAFtD,oBAEW4iB,EAFX,KAEkBC,EAFlB,KA2BI,OAXAtf,qBAAU,WACO,OAAVqf,GAEC9wB,IAAIC,QAAJ,mBAAwB6wB,EAAxB,aACKxvB,MAAK,SAAAyC,GAAG,OAAIA,EAAIrD,GAAKqD,EAAIvF,OAASe,QAAQI,OAAOoE,MACjDzC,KAAKuvB,GACL7O,OAAM,kBAAM6O,EAAY,WAElC,CAACC,IAIA,uBAAKld,UAAU,GAAG1J,MAAO,CAACC,QAAS,aAC/B,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAWC,QAAQ,SAAS9S,MAAOqN,IAAF,MAAyB8H,WAAS,EAC/DI,WAAY,CAAC+b,QA3Bb,SAAChqB,GAEI,KAAdA,EAAEoyB,QAEDD,EAASnyB,EAAEgR,cAAcxX,OAIzBy4B,EAAY,WAuBM,OAAb5B,GAA+B,OAAV6B,EAClB,uBAAK5mB,MAAO,CAAC8C,UAAW,KACpB,gBAACgiB,GAAD,CAAcC,SAAUA,EAAUC,eAAgB4B,KAEtD,MCxCb,IAAMzC,GAAkB/jB,gBAA2C,CACtEyY,MAAO,aACPqL,wBAAyB,eAOvB6C,GAAc,IAAIC,eAuCTC,OArCf,SAAcnmB,GACb,IACoB2L,EAAmC3L,EAA5CmL,MAASQ,KAAQ7B,EAA2B9J,EAA3B8J,QAASiO,EAAkB/X,EAAlB+X,MAAOza,EAAW0C,EAAX1C,OAEnC8oB,EAAkB,kBAAMtc,EAAQjb,KAAR,UAAgB8c,EAAhB,eACxB0a,EAAkB,kBAAMvc,EAAQjb,KAAR,UAAgB8c,EAAhB,eAIxBgO,EAAU/W,mBAAQ,iBAAO,CAC3BmV,QACAqL,wBAAyB9lB,KACzB,CAACya,EAAOza,IAGZ,OACI,gBAAC,uBAAD,CAAqBrJ,OAAQgyB,IACzB,gBAAC5C,GAAgBxV,SAAjB,CAA0BzgB,MAAOusB,GACjC,gBAACnO,EAAA,EAAD,KACI,gBAACE,EAAA,EAAD,CAAOC,KAAI,UAAKA,EAAL,aAAsB3G,UAAWshB,KAC5C,gBAAC5a,EAAA,EAAD,CAAOC,KAAI,UAAKA,EAAL,aAAsB3G,UAAWuhB,KAC5C,gBAAC7a,EAAA,EAAD,CAAOE,OAAQ,kBACX,uBAAK1M,MAAO,CAACC,QAAS,aAClB,gBAAC,KAAD,CAAQC,QAAQ,WAAWoC,QAAS4kB,EAAiB3kB,WAAS,GAA9D,kBAGA,gBAAC,KAAD,CAAQrC,QAAQ,WAAWoC,QAAS6kB,EAAiB5kB,WAAS,EAACvC,MAAO,CAAC8C,UAAW,IAAlF,2BChDXtR,GAAQgP,ICQL,eAAC3Q,EAAD,uDAAS,GAAT,OAA6BA,IDRG,QAAS,EAAG,CAAEy3B,UAAW,CAAC,KAAM,WAAY,kBAG7EC,GAFK3mB,GAAapP,GAAOqP,I,mDEHjC,SAAS2mB,GAAY5c,GAC3B,IAAD,EACoC5G,mBAAS4G,EAAQxR,UADrD,oBACWA,EADX,KACqBquB,EADrB,KAMI,OAJAlgB,qBACI,kBAAMqD,EAAQ8c,QAAO,SAAAtuB,GAAQ,OAAIquB,EAAYruB,QAC7C,CAACwR,IAEExR,E,iPCIX,IAAMuuB,GAAY,CACd,SACA,QACA,aAMEC,GAAU,SAAC5xB,EAAa6xB,GAAd,IAAgC7Z,IAAhC,gEACkC,OAA9C8Z,aAAU9xB,EAAK,CAAEyW,KAAMob,EAAU7Z,WAErC,SAAS+Z,GAAgBnd,EAAkBod,GAGvC,OATW,SAACA,EAAgB9Z,GAAjB,OACX3F,KAAK0f,IAAI,EAAGD,EAAKze,WAAU,SAAAvT,GAAG,OAAI4xB,GAAQ1Z,EAAUlY,OAQ7CkyB,CAAOF,EADGR,GAAY5c,GACAsD,UAGjC,IAAMia,GAAU,SAACtD,EAAiB7uB,GAAlB,OACX6uB,EAAU,IAAM7uB,GAAKJ,QAAQ,SAAU,MAmB7BwyB,GAjBI,SAAUtnB,GAC5B,IAAD,EACiDunB,aAAe/E,IAApDG,EADZ,EACYA,WAAYD,EADxB,EACwBA,qBACGqB,EAAuB/jB,EAAtCmL,MAASQ,KAAiB7B,EAAY9J,EAAZ8J,QAE5B0d,EAAYP,GAAgBnd,EAAS+c,GAAUp5B,KAAI,SAAAyH,GAAG,OAAImyB,GAAQtD,EAAS7uB,OAGjF,OACI,kBAAC,KAAD,CAAM9H,MAAOo6B,EAAWpoB,QAAQ,YAAYsE,SAAU,SAACiP,EAAGlkB,GAAJ,OAHpCD,EAG2DC,EAHzCqb,EAAQhV,QAAR,UAAmBuyB,GAAQtD,EAAS8C,GAAUr4B,MAAjE,IAACA,IAId,kBAAC,KAAD,CAAKlC,MAAOqN,IAAF,QACV,kBAAC,KAAD,CAAKrN,MAAOqN,IAAF,KAAgBgpB,KAC1B,kBAAC,KAAD,CAAKr2B,MAAOqN,IAAF,KAAc+oB,OCrCpC,SAAS+E,GAAWznB,GACnB,IACoB2L,EAAoB3L,EAA7BmL,MAASQ,KACXrT,EAAWouB,GADoB1mB,EAAZ8J,SAGzB,OACI,gBAAC0B,EAAA,EAAD,CAAQlT,SAAUA,GACd,gBAACoT,EAAA,EAAD,CAAOC,KAAI,UAAKA,EAAL,aAAsB3G,UAAWsiB,M,4ECVxD,ICuCe9nB,GANU,CACrB7C,GACAC,GDlCJ,CACIiI,MAAOlL,IAAF,MACL+Q,KAAMW,KACNrG,UAAW0iB,GACXxyB,IAAK,SACLiC,MAAO,CAAC,oBACRwwB,KAAMC,yBDWK,kBACX,gBAAC,IAAD,CAAUl3B,MAAOA,IAEb4O,gBAAoBuoB,YAAWJ,W,wFGPvC,IAQMK,G,4MAEFC,aAAe,kBAAM,EAAK/nB,MAAMtJ,YAAY,EAAKsJ,MAAMgoB,e,uDAInD,OACI,gBAAC,KAAD,CAAQjmB,SAAS,SAASQ,MAAM,WAC5B,gBAAC,KAAD,KACI,gBAAC,KAAD,CAAYrB,aAAW,OAAOqB,MAAM,UAAUf,QAASzQ,KAAKg3B,cACxD,gBAAC,KAAD,OAEJ,gBAAC,KAAD,CAAY3oB,QAAQ,QAAQmD,MAAM,WAC7BxR,KAAKiP,MAAM6E,OAASlL,IAApB,QAGT,gBAAC6R,EAAA,EAAD,KAEIyc,GAAQx6B,KAAI,SAAA8C,GAAM,OACbA,EAAOo3B,KACJ,gBAACjc,EAAA,EAAD,CAAOlN,IAAKjO,EAAO2E,IAAKyW,KAAMpb,EAAO2E,KAAM3E,EAAOo3B,MAClD,c,GArBLroB,aA8BRgC,gBAtCS,SAACvS,GAAD,MAAuB,CAC3Ci5B,aAAcxqB,GAAmBzO,OAGV,SAAC0G,GAAD,MAAoB,CAC3CiB,WAAY,SAACC,GAAD,OAAmBlB,EAASiB,EAAWC,QAiCxC2K,CAA6CwmB,I,sKCnD5D,IAOeI,GAPAviB,KAAOC,IAAV,MAIE,SAAC5F,GAAD,OAAkBA,EAAMmoB,WAAa,OAAS,a,ybCY5D,IAUMC,GAAYziB,KAAOC,IAAV,MAMTyiB,G,4MAEMC,mB,IAERv5B,MAAe,CACXK,SAAU,GACViD,SAAU,I,EAedk2B,aAAe,WACd,IAAD,EACiC,EAAKx5B,MAA5BK,EADV,EACUA,SAAUiD,EADpB,EACoBA,SACbjD,EAASie,QAAQ,MAAQ,IAEzBje,EAAW,aAAeA,GAE7B,EAAK4Q,MAAMwoB,MAAMp5B,EAAUiD,I,EAG/Bo2B,iBAAmB,SAAC70B,GAGhB,EAAKoS,SAAS,CAAC5W,SAAUwE,EAAEgR,cAAcxX,S,EAG7Cs7B,iBAAmB,SAAC90B,GAEhB,EAAKoS,SAAS,CAAC3T,SAAUuB,EAAEgR,cAAcxX,S,wEA9BnBglB,GAEnBA,EAAUuW,cAAgB53B,KAAKiP,MAAM2oB,cAEpC53B,KAAKiV,SAAS,CAAE3T,SAAU,UACAnD,IAAvB6B,KAAKu3B,eAEJv3B,KAAKu3B,cAAchS,W,+BA2B9B,IAAD,SACwCvlB,KAAKiP,MAAjC2oB,EADZ,EACYA,YAAa/qB,EADzB,EACyBA,WADzB,EAEmC7M,KAAKhC,MAA5BK,EAFZ,EAEYA,SAAUiD,EAFtB,EAEsBA,SACZu2B,EAAiB73B,KAAKiP,MAAM6oB,cAA+B,KAAbz5B,GAAkC,KAAbiD,EAEzE,OAAGuL,EAEQ,gBAACuP,EAAA,EAAD,CAAUzU,GAAG,MAIpB,gCAEQiwB,EACI,gBAAC,GAAD,CAAQzpB,MAAO,CAAC8C,UAAW,KACvB,gBAAC,KAAD,CAAY3C,cAAY,EAACkD,MAAM,SAAS5I,IAAxC,QAEJ,KAER,gBAAC,GAAD,CAAQwuB,YAAU,GACd,gBAACC,GAAD,KACI,gBAAC,KAAD,CAAW97B,MAAOqN,IAAF,MAAkBvM,MAAOgC,EAAUsU,SAAU3S,KAAK03B,iBAAkBnQ,OAAO,SAAS7W,WAAS,IAC7G,gBAAC,KAAD,CAAWsV,SAAU,SAAAjkB,GAAK,OAAI,EAAKw1B,cAAgBx1B,GAAQxG,MAAOqN,IAAF,MAAkBvM,MAAOiF,EAAUqR,SAAU3S,KAAK23B,iBAAkBpQ,OAAO,SAAS/rB,KAAK,WAAWkV,WAAS,IAC7K,gBAAC,KAAD,CAAQsC,SAAU6kB,EAAermB,MAAM,UAAUnD,QAAQ,YAAYoC,QAASzQ,KAAKw3B,cAAe5uB,IAAlG,c,GAlEJ2F,aA2ELgC,gBA3FS,SAACvS,GAAD,MAAuB,CAC3C6O,WAAYA,GAAW7O,GACvB85B,aAAc/qB,GAAgB/O,GAC9B45B,YAAa3qB,GAAejP,OAGL,SAAC0G,GAAD,MAAoB,CAC3C+yB,MAAO,SAACp5B,EAAkBiD,GAAnB,OAAwCoD,E7EuB9B,SAACrG,EAAkBiD,GAAnB,8CAAwC,WAAOoD,GAAP,SAAAnH,EAAA,6DAGzDmH,EA3BqD,CAAElJ,KALzB,uBAiC9BkJ,EAASmB,GAAK,IAJ2C,kBAQ/C7C,IAAKy0B,MAAMp5B,EAAUiD,GAR0B,OASrDoD,EAASyB,EAAiB9H,EAAU2E,IAAKoD,QATY,gDAarD1B,EA7B0D,CAAElJ,KANnC,oBAM4Du8B,OA6B5D,EAAD,KACxBrzB,EAhB6C,CAAElJ,KAAM,qBAEA,QAiBzDkJ,EAASmB,GAAK,IAjB2C,yDAAxC,sD6EvBuC4xB,CAAMp5B,EAAUiD,QAoF7DiP,CAA6C+mB,I,wCCrF7C,O,iDA3BHU,UAA4C,G,6DAEnCx8B,EAAyB+E,GAEtCP,KAAKg4B,UAAUx8B,GAAQwE,KAAKg4B,UAAUx8B,IAAS,GAC/CwE,KAAKg4B,UAAUx8B,GAAMsC,KAAKyC,K,0CAGV/E,EAAc+E,GAE3B/E,KAAQwE,KAAKg4B,YAEZh4B,KAAKg4B,UAAUx8B,GAAQwE,KAAKg4B,UAAUx8B,GAAMyC,QAAO,SAAAuC,GAAC,OAAIA,IAAMD,Q,2BAIjE/E,GAEEA,KAAQwE,KAAKg4B,WAEZh4B,KAAKg4B,UAAUx8B,GAAMiF,SAAQ,SAAAkK,GAAE,OAAIA,W,6HCf/C,IAAMstB,GAAS,CACXC,aAAc,CACV1mB,MAAO2mB,KAAO,OAIhBC,GAAelgB,KAAW+f,GAAX/f,EAAmB,gBAAGnB,EAAH,EAAGA,QAAYshB,EAAf,mCACpC,kBAAC,KAAD,eAAQxgB,UAAWd,EAAQmhB,cAAkBG,OA0ClCC,OAxBf,WAEI,IAAMC,EAhBV,WACC,IAAD,EACsCpmB,mBAAgC,MADtE,oBACWqmB,EADX,KACsBC,EADtB,KASI,OANA/iB,qBAAU,WACN,IAAM5O,EAAU,kBAAM2xB,EAAa,CAAEF,iBAAiB,KAEtD,OADAG,GAA0Bna,iBAAiB,kBAAmBzX,GACvD,kBAAM4xB,GAA0Bla,oBAAoB,kBAAmB1X,MAC/E,IAEI0xB,EAMiBG,GAExB,OAAGJ,GAAmBA,EAAgBA,gBAG9B,kBAAC,KAAD,CACIK,aAAc,CACVC,SAAU,SACVC,WAAY,QAEhBlzB,MAAM,EACNmB,QAAS6B,IAAF,MACP/J,OAAQ,CACJ,kBAACu5B,GAAD,CAAc3qB,IAAI,UAAU4V,KAAK,QAAQ5S,QAAS,kBAAMwN,OAAO1W,SAASwxB,WAAxE,aAMT,M,mDChCLC,GAAc,CAChBpK,QAASC,KACTC,QAASE,KACTrsB,MAAOssB,KACPthB,KAAMsrB,MA8BJC,GAAe,SAAC,GAAiE,IAAhE9wB,EAA+D,EAA/DA,SAAU2O,EAAqD,EAArDA,QACvBuD,EAAO0e,GAAY5wB,GACzB,OAAO,kBAACkS,EAAD,CAAMzC,UAAWshB,KAAGpiB,EAAQ4C,KAAM5C,EAAQqiB,gBAU/CC,GAA8B,SAAC,GAAD,IAAGtyB,EAAH,EAAGA,QAASgQ,EAAZ,EAAYA,QAAS1F,EAArB,EAAqBA,QAArB,OAChC,kBAAC,KAAD,CACIwG,UAAWd,EAAQhQ,EAAQqB,UAC3BrB,QACI,0BAAM8Q,UAAWd,EAAQhQ,SACrB,kBAAC,GAAD,CAAcqB,SAAUrB,EAAQqB,SAAU2O,QAASA,IAClDhQ,EAAQA,SAGjBlI,OAAQ,CACJ,kBAAC,KAAD,CACE4O,IAAI,QACJ0C,aAAW,QACXqB,MAAM,UACNf,QAAS,kBAAMY,EAAQtK,KAEvB,kBAAC,KAAD,CAAW8Q,UAAWd,EAAQ4C,YAiB5C,IAAM2f,GAAgCphB,uBAxEvB,SAACC,GAAD,MAAmB,CAC9ByW,QAAS,CACL5e,gBAAiBC,SAAM,MAE3BtN,MAAO,CACHqN,gBAAiBmI,EAAMyT,QAAQjpB,MAAMkpB,MAEzCle,KAAM,CACFqC,gBAAiBmI,EAAMyT,QAAQxb,QAAQyb,MAE3CiD,QAAS,CACL9e,gBAAiB+e,SAAM,MAE3BpV,KAAM,CACF9I,SAAU,IAEduoB,YAAa,CACTG,QAAS,GACTxY,YAAa5I,EAAME,QAAQC,MAE/BvR,QAAS,CACLwjB,QAAS,OACTzL,WAAY,aAkDkB5G,EAXtC,SAA6BjJ,GAC5B,IACWuqB,EAAiCvqB,EAAjCuqB,SAAUziB,EAAuB9H,EAAvB8H,QAAS0iB,EAAcxqB,EAAdwqB,UACrBC,EAASF,EAAS98B,KAAI,SAAAqK,GAAO,OAC/B,kBAAC,KAAD,CAAUnB,MAAI,GACV,kBAAC,GAAD,CAA6BmB,QAASA,EAASgQ,QAASA,EAAS1F,QAASooB,QAGlF,OAAO,oCAAGC,MClGDC,GAAY,SAACvzB,EAA0BwzB,GAUhD,GARoB,kBAAVxzB,IAENA,EAAQ,CAACA,IAGQA,EAAM1J,KAAI,SAAAqG,GAAI,OAAI62B,EAAaliB,WAAU,SAAA3M,GAAC,OAAIhI,IAASgI,QACvE9O,QAAO,SAACC,EAAQgC,GAAT,OAAkBhC,GAAWgC,GAAQ,KAAI,GAIjD,OAAO,EAGX,IAAM27B,EAAWD,EACZ37B,QAAO,SAAA8E,GAAI,OAAIA,EAAK0H,OAAS,GAA+B,MAA1B1H,EAAKA,EAAK0H,OAAS,IAAwC,MAA1B1H,EAAKA,EAAK0H,OAAS,MACtF/N,KAAI,SAAAqG,GAAI,OAAIA,EAAK+2B,UAAU,EAAG/2B,EAAK0H,OAAS,MAGjD,OAAOrE,EAAMsR,WAAU,SAAA3U,GAAI,OAAI82B,EAASniB,WAAU,SAAA3M,GAAC,OAAwB,IAApBhI,EAAKuZ,QAAQvR,OAAa,MAAM,GCgCrFqqB,G,4MAEFp3B,MAAe,CAAEw7B,SAAU,I,EAE3BO,WAAa,kBAAM,EAAK9qB,MAAMtJ,YAAW,I,EACzCq0B,YAAc,kBAAM,EAAK/qB,MAAMtJ,YAAW,I,EAC1CqxB,aAAe,kBAAM,EAAK/nB,MAAMgrB,aAAe,EAAKD,cAAgB,EAAKD,c,EAEjEG,YACR,CACI3tB,OAAQ,SAAC1G,GAAD,OAAmB,EAAKoJ,MAAM8c,QAAQlmB,IAC9CmhB,MAAO,SAACjgB,EAA8BkgB,GAA/B,OACH,EAAKhS,SAAS,CAAEukB,SAAS,GAAD,mBAAM,EAAKx7B,MAAMw7B,UAAjB,CAA2BzyB,OACvD1I,SAAU,EAAK4Q,MAAM5Q,U,EAiCjB87B,sBAAwB,SAACpzB,GAE7B,EAAKkO,SAAS,CAAEukB,SAAU,EAAKx7B,MAAMw7B,SAASv7B,QAAO,SAAAm8B,GAAC,OAAIA,IAAMrzB,Q,2DAhCvD8T,GACZ,IAAD,OACUwf,EACN,CACI9tB,OAAQ,SAAC1G,GAAD,OAAmB,EAAKoJ,MAAM8c,QAAQlmB,IAC9CmhB,MAAO,SAACjgB,EAA8BkgB,GAA/B,OACH,EAAKhS,SAAS,CAAEukB,SAAS,GAAD,mBAAM,EAAKx7B,MAAMw7B,UAAjB,CAA2BzyB,OACvD1I,SAAU2B,KAAKiP,MAAM5Q,SACrBmxB,QAAS,SAACzsB,GAAD,OAAkB,EAAKkM,MAAMqrB,UAAYX,GAAU,EAAK1qB,MAAMsrB,UAAW,CAACx3B,MAGvF,YAAc5E,IAAX0c,EAEQqc,GAAQx6B,KAAI,gBAAEyH,EAAF,EAAEA,IAAgBq2B,EAAlB,EAAOvmB,UAAP,OACf,gBAAC0G,EAAA,EAAD,CAAOC,KAAMzW,EAAKsJ,IAAKtJ,EAAK0W,OAAQ,SAAC5L,GAAD,OAChC,gBAACurB,EAAD,iBAAevrB,EAAWorB,UAM3BnD,GAAQx6B,KAAI,SAAA8C,GAAM,OACrB,gBAACmb,EAAA,EAAD,CAAOC,KAAMpb,EAAO2E,IAAKsJ,IAAKjO,EAAO2E,KAChC0W,EAAOrb,S,+BAavB,IAAD,EACyCQ,KAAKiP,MAAlCqrB,EADZ,EACYA,SAAU/yB,EADtB,EACsBA,SAAU1B,EADhC,EACgCA,KAC5B,OAAIy0B,GAAkC,WAAtB/yB,EAAS8U,SAMrB,gCACI,gBAAC0K,GAAcjK,SAAf,CAAwBzgB,MAAO2D,KAAKk6B,aAChC,gBAACzf,EAAA,EAAD,KACKza,KAAKy6B,cAAa,gBAAE3mB,EAAF,EAAEA,MAAF,OAAa,gBAAC,GAAD,CAAUA,MAAOA,OACjD,gBAAC6G,EAAA,EAAD,KACI,gBAAC,GAAD,QAGN9U,EAAO,gBAAC,KAAD,CAAgBwI,QAAQ,gBAAgBF,MAAO,CAAC4X,cAAe,KAAU,KAClF,gBAACtL,EAAA,EAAD,KACKza,KAAKy6B,eACN,gBAAC9f,EAAA,EAAD,CAAOC,KAAK,UACR,gBAAC,GAAD,OAEJ,gBAACD,EAAA,EAAD,CAAOC,KAAK,KACR,gBAAC,GAAD,QAGR,gBAAC,GAAD,MACA,gBAAC,GAAD,CAAqB4e,SAAUx5B,KAAKhC,MAAMw7B,SAAUC,UAAWz5B,KAAKm6B,0BAvBrE,gBAAC/d,EAAA,EAAD,CAAUzU,GAAG,e,GAxDb4G,aAsFJuoB,eAAWvmB,aAxGF,SAACvS,GAAD,MAAmC,CACvDi8B,aAAcxtB,GAAmBzO,GACjCs8B,SAAUztB,GAAW7O,GACrBK,SAAUsO,GAAY3O,GACtB6H,KAAM0G,GAAOvO,GACbu8B,UAAWptB,GAAanP,OAGD,SAAC0G,GAAD,MAAoB,CAC3CiB,WAAY,SAACC,GAAD,OAAmBlB,EAASiB,EAAWC,KACnDmmB,QAAS,SAACxf,GAAD,OAAqB7H,EAASmB,EAAK0G,QA8FtBgE,CAA6C6kB,K,uXC7GvE,I,MAWMsF,G,4MAEFV,YAAc,kBAAM,EAAK/qB,MAAMtJ,YAAW,I,EAE1Cg1B,cAAgB,SAAC/zB,GAAD,OAAiB,WAE7B,EAAKqI,MAAM8J,QAAQjb,KAAK8I,GACxB,EAAKozB,gB,EAGTY,cAAgB,kBAAM,EAAK3rB,MAAMrN,U,EAEjCi5B,iBAAmB,WAEZ,kBAAmBC,WAElBA,UAAUC,cAAcC,kBACnBz1B,MAAK,SAAA01B,GAAG,OAAIA,GAAOA,EAAIpH,a,EAKpCqH,eAAiB,a,EAIjBC,aAAe,WAEXn4B,IAAKrB,W,uDAIR,IAAD,SAEoC3B,KAAKiP,MAA7BqrB,EAFZ,EAEYA,SAAUC,EAFtB,EAEsBA,UACZa,EAAYd,EACZ,SAAC96B,GAAD,OAAoBm6B,GAAUY,EAAW/6B,EAAO4G,QAChD,kBAAM,GAEZ,OACI,gBAAC,KAAD,CAAQR,KAAM5F,KAAKiP,MAAMgoB,aAAc5lB,QAASrR,KAAKg6B,aACjD,uBAAK7rB,MAAO,CAACC,QAAS,KAClB,gBAAC,KAAD,CAAYC,QAAQ,SAApB,qBACA,gBAAC,KAAD,CAAYA,QAAQ,aAApB,YAA0CgtB,eAE9C,gBAAC,KAAD,KAEQnE,GAAQj5B,OAAOm9B,GAAW1+B,KAAI,gBAAEoX,EAAF,EAAEA,MAAO3P,EAAT,EAASA,IAAWmW,EAApB,EAAcX,KAAd,OAC1B,gBAAC,KAAD,CAAUlM,IAAKtJ,EAAKoW,QAAM,EAAC9J,QAAS,EAAKkqB,cAAcx2B,GAAM6O,UAAWsnB,GACpE,gBAAC,KAAD,KACI,gBAAChgB,EAAD,OAEJ,gBAAC,KAAD,KACKxG,OAKjB,gBAAC,KAAD,MAMA,gBAAC,KAAD,CAAUyG,QAAM,EAAC9J,QAASzQ,KAAK66B,kBAC3B,gBAAC,KAAD,KACKjyB,IADL,QAIJ,gBAAC,KAAD,CAAU2R,QAAM,EAAC9J,QAASzQ,KAAKm7B,cAC3B,gBAAC,KAAD,KACKvyB,IADL,QAIJ,gBAAC,KAAD,CAAU2R,QAAM,EAAC9J,QAASzQ,KAAKk7B,gBAC3B,gBAAC,KAAD,KACKtyB,IADL,QAIF0xB,EACE,gBAAC,KAAD,CAAU/f,QAAM,EAAC9J,QAASzQ,KAAK46B,eAC3B,gBAAC,KAAD,KACKhyB,IADL,QAKJ,W,GAtFA2F,aA+FTuoB,eAAWvmB,aA1GF,SAACvS,GAAD,MAAuB,CAC3Ci5B,aAAcxqB,GAAmBzO,GACjCs8B,SAAUztB,GAAW7O,GACrBu8B,UAAWptB,GAAanP,OAGD,SAAC0G,GAAD,MAAoB,CAC3CiB,WAAY,SAACC,GAAD,OAAmBlB,EAASiB,EAAWC,KACnDhE,OAAQ,kBAAM8C,EnFqCI,uCAAM,WAAOA,GAAP,SAAAnH,EAAA,sEAElByF,IAAKpB,SAFa,OAGxB8C,EAxD4C,CAC5ClJ,KANuB,gBA8DvBkJ,EA1BiD,CAAElJ,KAAM,qBAsBjC,2CAAN,2DmF6DI+U,CAA6CmqB,K,qBCrIjEY,GAAG,sBAAGrd,cAAH,cAAG,GAAQsd,6BAAX,UAAoC,OAS9BpjB,GARDqjB,0BAAe,CACzB5P,QAAS,CACLxb,QAAS,CACLqrB,KAAe,SAARH,GAAkB,UAAY,cCWjDI,SAASnd,iBAAiB,mBAA1B,sBAA8C,sBAAAhhB,EAAA,yDACV,YAA7Bm+B,SAASC,gBAD8B,gCAGV34B,IAAK44B,kBAHK,mBAIjBd,UAAUe,OAJO,gCAM5B74B,IAAKpB,SANuB,4CAW9CoB,IAAKub,iBAAiB,UAAU,WAC5B5e,GAAM+E,SrFRsC,CAC5ClJ,KANuB,mBqFgB3B,IAAMsgC,GAAmB94B,IAAK+4B,YACzBx2B,MAAK,kBAAMvC,IAAK44B,qBAChBr2B,MAAK,SAAArJ,GAEF,GAAGA,QAAyBiC,IAAf6E,IAAKpC,MAClB,CACI,IAAMo7B,EAAYC,KAAUj5B,IAAKpC,MAAMI,kBACtB7C,IAAd69B,QAA6C79B,IAAlB69B,EAAUl5B,KAEpCnD,GAAM+E,SAASyB,EAAiB61B,EAAUl5B,IAAKE,IAAKoD,YC7B9D81B,GAAcC,QACW,cAA7Ble,OAAO1W,SAAS60B,UAEe,UAA7Bne,OAAO1W,SAAS60B,UAEhBne,OAAO1W,SAAS60B,SAAShiB,MACvB,2DAsCN,SAASiiB,GAAgBC,EAAO7tB,GAC9BqsB,UAAUC,cACPwB,SAASD,GACT/2B,MAAK,SAAAi3B,GACJA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACd,MAApBD,IAGJA,EAAiBE,cAAgB,WACA,cAA3BF,EAAiB1+B,QACf88B,UAAUC,cAAc8B,YAI1Bj6B,QAAQ4C,IACN,iHAKEiJ,GAAUA,EAAOquB,UACnBruB,EAAOquB,SAASN,KAMlB55B,QAAQ4C,IAAI,sCAGRiJ,GAAUA,EAAO+O,WACnB/O,EAAO+O,UAAUgf,WAO5BvW,OAAM,SAAAtjB,GACLC,QAAQD,MAAM,4CAA6CA,ODlDlD,WAEX,IAAMo6B,EACF,gBAAC,KAAD,KACI,gBAAC,IAAD,CAAUp9B,MAAOA,IAEb,gBAAC,oBAAD,CAAkBwY,MAAOA,IACrB,gBAAC,IAAD,KACI,gCACI,gBAAC,KAAD,MACA,gBAAC,GAAD,MACA,gBAAC,GAAD,WASxB2jB,GAAiBv2B,MAAK,kBAAMsV,iBAAOkiB,EAAKrB,SAASsB,eAAe,YEApED,GD5CO,SAAkBtuB,GACvB,GAA6C,kBAAmBqsB,UAAW,CAGzE,GADkB,IAAImC,IAAI5B,GAAwBpd,OAAO1W,SAAS21B,MACpDC,SAAWlf,OAAO1W,SAAS41B,OAIvC,OAGFlf,OAAOM,iBAAiB,QAAQ,WAC9B,IAAM+d,EAAK,UAAMjB,GAAN,UAEPa,KAgEV,SAAiCI,EAAO7tB,GAEtCnM,MAAMg6B,EAAO,CACXl6B,QAAS,CAAE,iBAAkB,YAE5BmD,MAAK,SAAAhD,GAEJ,IAAM66B,EAAc76B,EAASH,QAAQi7B,IAAI,gBAEnB,MAApB96B,EAASC,QACO,MAAf46B,IAA8D,IAAvCA,EAAY9gB,QAAQ,cAG5Cwe,UAAUC,cAAcuC,MAAM/3B,MAAK,SAAAi3B,GACjCA,EAAae,aAAah4B,MAAK,WAC7B0Y,OAAO1W,SAASwxB,eAKpBsD,GAAgBC,EAAO7tB,MAG1BwX,OAAM,WACLrjB,QAAQ4C,IACN,oEAvFAg4B,CAAwBlB,EAAO7tB,GAI/BqsB,UAAUC,cAAcuC,MAAM/3B,MAAK,WACjC3C,QAAQ4C,IACN,iHAMJ62B,GAAgBC,EAAO7tB,OCiB/B8tB,CAAS,CACLO,SAAU,WACNl6B,QAAQ4C,IAAI,YACZkzB,GAA0Bh3B,KAAK,wB","file":"static/js/main.5998a9dc.chunk.js","sourcesContent":["import { CheckInOut, Absence, JobElement, JobActivity } from \"./typings\";\n\nexport const transactionType: CheckInOut[] = [\n { id: \"A0\", label: \"Indstempling normal\", type: \"in\", lang: \"da-dk\", next: \"B0\" },\n { id: \"B0\", label: \"Udstempling normal\", type: \"out\", lang: \"da-dk\" },\n { id: \"C0\", label: \"Indstempling overtid mod betaling\", type: \"in\", lang: \"da-dk\", next: \"D0\" },\n { id: \"D0\", label: \"Udstempling overtid mod betaling\", type: \"out\", lang: \"da-dk\" },\n { id: \"E0\", label: \"Indstempling overtid mod afspadsering\", type: \"in\", lang: \"da-dk\", next: \"F0\" },\n { id: \"F0\", label: \"Udstempling overtid mod afspadsering\", type: \"out\", lang: \"da-dk\" }\n];\n\nexport const absenceType: Absence[] = [\n { \"id\": \"1\", \"lang\": \"da-dk\", \"label\": \"Ferie\" },\n { \"id\": \"2\", \"lang\": \"da-dk\", \"label\": \"Ferie/fri\" },\n { \"id\": \"3\", \"lang\": \"da-dk\", \"label\": \"Barn 1. sygedag / hospitalsophold\" },\n { \"id\": \"4\", \"lang\": \"da-dk\", \"label\": \"Sygdom (ansat > 6 mdr.)\" },\n { \"id\": \"5\", \"lang\": \"da-dk\", \"label\": \"Sygdom (ansat < 6 mdr.)\" },\n { \"id\": \"6\", \"lang\": \"da-dk\", \"label\": \"Barsel\" },\n { \"id\": \"7\", \"lang\": \"da-dk\", \"label\": \"Afspadsering\" },\n { \"id\": \"8\", \"lang\": \"da-dk\", \"label\": \"Fri uden løn\" },\n { \"id\": \"9\", \"lang\": \"da-dk\", \"label\": \"Fridag 31/12\" },\n { \"id\": \"10\", \"lang\": \"da-dk\", \"label\": \"Blodbank, begravelse\" },\n { \"id\": \"11\", \"lang\": \"da-dk\", \"label\": \"Arbejdsulykke\" },\n { \"id\": \"12\", \"lang\": \"da-dk\", \"label\": \"Plejeorlov\" },\n { \"id\": \"13\", \"lang\": \"da-dk\", \"label\": \"Flex afholdelse\" },\n { \"id\": \"14\", \"lang\": \"da-dk\", \"label\": \"Flexjob ordning\" },\n { \"id\": \"15\", \"lang\": \"da-dk\", \"label\": \"Ledighedsdage\" },\n { \"id\": \"16\", \"lang\": \"da-dk\", \"label\": \"Børneomsorgsdag\" }\n];\n\nexport const elementType: JobElement[] = [\n { \"id\": \"120\", \"lang\": \"da-dk\", \"label\": \"Timer\" },\n { \"id\": \"122\", \"lang\": \"da-dk\", \"label\": \"Køretid\" }\n];\n\nexport const activityType: JobActivity[] = [\n { \"id\": \"4\", \"lang\": \"da-dk\", \"label\": \"Møde og administration\" },\n { \"id\": \"6\", \"lang\": \"da-dk\", \"label\": \"Status og optælling\" },\n { \"id\": \"7\", \"lang\": \"da-dk\", \"label\": \"Oprydning\" },\n { \"id\": \"10\", \"lang\": \"da-dk\", \"label\": \"Uddannelse\" },\n { \"id\": \"13\", \"lang\": \"da-dk\", \"label\": \"RMA\" },\n { \"id\": \"19\", \"lang\": \"da-dk\", \"label\": \"Vedligeholdelse\" }\n];","export const toMap = (nodes: TNode[], keySelector: (node: TNode) => string | number) => \n nodes.reduce((result, node) => { \n result[keySelector(node)] = node;\n return result;\n }, {} as { [id: string]: TNode });\n\nexport const groupBy = (nodes: TNode[], keySelector: (node: TNode) => string) => \n nodes.reduce((result, node) => { \n result[keySelector(node)] = [...(result[keySelector(node)] || []), node];\n return result;\n }, {} as { [id: string]: TNode[] });\n\nexport const getObjectValues = (obj: { [id: string]: T } ): T[] =>\n Object.keys(obj).map(key => obj[key]);","export const assertNever = (value: never): void => {};\n\ntype FnAction = (...args: any[]) => void;\nexport const debounce = (timeout: number, f: T): T => \n{\n let handle: number | undefined = undefined;\n\n function wrap()\n {\n const args = Array.prototype.slice.call(arguments);\n f.apply(f, args);\n }\n\n function fn()\n {\n window.clearTimeout(handle);\n handle = window.setTimeout(wrap, timeout);\n }\n\n return (fn as T);\n}","import { produce } from \"immer\";\nimport { toMap } from \"../../../util/collection\";\nimport { TimeRecordingState, Transaction, OrderedById, Event, ManualEntryEvent } from \"./typings\";\nimport { transactionType, absenceType, elementType, activityType } from \"./initial\";\nimport { TRANSACTION_OPEN, TransactionOpenAction, TRANSACTION_EVENT_ADD, TransactionEventAddAction, \n FetchManualTimeEntriesSuccessAction, DeleteManuelTimeEntryAction, \n AddManualTimeEntryAction } from \"./action\";\nimport { TRANSACTION_CLOSE, TransactionCloseAction } from \"./action\";\nimport { assertNever } from \"../../../util\";\n\nconst toOrderedById = (collection: T[], keySelector: (item: T) => string) => ({\n byId: toMap(collection, keySelector),\n list: collection.map(keySelector)\n});\n\nconst initialState: TimeRecordingState =\n{\n data: \n {\n checkinout: toOrderedById(transactionType, x => x.id),\n absence: toOrderedById(absenceType, x => x.id),\n activity: toOrderedById(activityType, x => x.id),\n element: toOrderedById(elementType, x => x.id)\n },\n \n transaction: {\n current: {},\n byId: {},\n list: []\n },\n\n checkin: {},\n \n manual: {},\n}\n\ntype Action = \n TransactionOpenAction | TransactionCloseAction | TransactionEventAddAction \n | FetchManualTimeEntriesSuccessAction\n | DeleteManuelTimeEntryAction\n | AddManualTimeEntryAction\n ;\n\ntype Dict = { [id: string]: T };\nconst createDict = (ts: T[], keySelector: (t: T) => string): Dict => \n ts.reduce((result: Dict, v) => { result[keySelector(v)] = v; return result; }, {});\n\nconst mergeEvents = (a: ManualEntryEvent[], b: ManualEntryEvent[]): ManualEntryEvent[] => \n{\n const index = createDict(a, x => x.id);\n for(let b0 of b)\n {\n if(b0.id in index)\n {\n const a0 = index[b0.id];\n a0.deleted = a0.deleted || b0.deleted;\n }\n else\n {\n a.push(b0);\n }\n }\n return a;\n}\n\nconst reducer = (state = initialState, action: Action): TimeRecordingState => produce(state, draft => \n{\n if(action.type === TRANSACTION_OPEN)\n {\n const { id, event, username } = action;\n draft.transaction.current[username] = id;\n draft.transaction.byId[id] = { id, events: [event], username };\n draft.transaction.list.push(id);\n return;\n }\n\n if(action.type === TRANSACTION_CLOSE)\n {\n const { id, username } = action;\n delete draft.transaction.current[username];\n draft.transaction.byId[id] = { ...draft.transaction.byId[id] };\n return;\n }\n\n if(action.type === TRANSACTION_EVENT_ADD)\n {\n const { event, transactionId } = action;\n draft.transaction.byId[transactionId].events.push(event);\n return;\n }\n\n if (action.type === \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\")\n {\n const { events, username } = action;\n draft.manual[username] = mergeEvents(draft.manual[username] || [], events);\n return;\n }\n\n if (action.type === \"ADD_MANUAL_TIME_ENTRY\")\n {\n const { username, entry } = action;\n draft.manual[username] = draft.manual[username] || [];\n draft.manual[username].push(entry);\n return;\n }\n\n if (action.type === \"DELETE_MANUEL_TIME_ENTRY\")\n {\n const { id, username } = action;\n if(username in draft.manual)\n {\n const entry = draft.manual[username].find(v => v.id === id)\n if(entry !== undefined)\n {\n entry.deleted = true;\n }\n }\n return;\n }\n \n assertNever(action);\n});\n\nconst getOrderedList = (state: OrderedById) =>\n state.list.map(id => state.byId[id]).filter(item => item !== undefined);\n\nexport const getTransactions = (state: TimeRecordingState): Transaction[] =>\n state.transaction.list.map(id => state.transaction.byId[id]);\n\nexport const getTransaction = (state: TimeRecordingState, transactionId: string) =>\n state.transaction.byId[transactionId];\n\nexport const getCurrentTransaction = (username: string, state: TimeRecordingState): Transaction | undefined => \n{\n const { current, byId } = state.transaction;\n return current[username] ? byId[current[username]] : undefined;\n}\n\nexport const getEvents = (state: TimeRecordingState, transactionId: string): Event[] =>\n{\n const transaction = getTransaction(state, transactionId);\n return (transaction === undefined) ? [] : transaction.events;\n}\n\nexport const getCheckinTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.checkinout);\n\nexport const getAbsenceTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.absence);\n\nexport const getElementTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.element);\n\nexport const getActivityTypes = (state: TimeRecordingState) =>\n getOrderedList(state.data.activity);\n\nexport const getCheckin = (state: TimeRecordingState) => \n state.checkin.type;\n\nexport const getManualEntries = (state: TimeRecordingState, username: string) => \n state.manual[username];\n\nexport * from \"./typings\";\nexport default reducer;","module.exports = __webpack_public_path__ + \"static/media/scan.2109c7c0.svg\";","import ClientOAuth2 from \"client-oauth2\";\nimport { Token } from \"client-oauth2\";\nimport { TokenStore } from \"../service/TokenStore\";\nimport jwt_decode from \"jwt-decode\";\n\ninterface JwtToken\n{\n sub: string;\n role?: string[] | string;\n}\n\nclass Auth\n{\n private client_: ClientOAuth2;\n private token_?: Token;\n private store_?: TokenStore;\n private callbacks_: { [key: string]: Function[] } = {};\n\n constructor(store?: TokenStore) \n {\n this.client_ = new ClientOAuth2({\n clientId: \"mobility.app\",\n clientSecret: \"Motedulghot9\",\n authorizationUri: \"https://identity.guldmann.com/connect/authorize\",\n accessTokenUri: \"https://identity.guldmann.com/connect/token\",\n scopes: [\"mobility\", \"offline_access\"]\n });\n this.store_ = store;\n }\n\n // addEventListener(type: \"logout\", callback: () => void);\n addEventListener(type: string, callback: () => void)\n {\n (this.callbacks_[type] = this.callbacks_[type] || []).push(callback);\n }\n\n removeEventListener(type: string, callback: () => void)\n {\n if(this.callbacks_[type])\n {\n this.callbacks_[type] = this.callbacks_[type].filter(c => c !== callback);\n }\n }\n\n private emit(type: string) \n {\n if(this.callbacks_[type])\n {\n this.callbacks_[type].forEach(cb => cb());\n }\n }\n\n async loadToken()\n {\n if(this.store_ !== undefined)\n {\n const token = await this.store_.load();\n if(token !== null)\n {\n this.token_ = this.client_.createToken(token.data);\n\n const decoded: any = jwt_decode(token.accessToken);\n if(decoded && typeof decoded.exp === \"number\")\n {\n // XXX token.expires\n (this.token_ as any).expires = new Date(decoded.exp * 1000);\n }\n else \n {\n // XXX token.expires\n (this.token_ as any).expires = new Date(0);\n }\n }\n }\n }\n\n private async saveToken()\n {\n if(this.store_ !== undefined)\n {\n if(this.token !== undefined)\n {\n await this.store_.save(this.token);\n }\n else\n {\n this.store_.clear();\n }\n }\n }\n\n async login(username: string, password: string): Promise\n {\n const token = await this.client_.owner.getToken(username, password);\n this.token_ = token;\n await this.saveToken();\n this.emit(\"login\");\n }\n\n async logout(): Promise\n {\n this.token_ = undefined;\n await this.saveToken();\n this.emit(\"logout\");\n }\n\n get token(): Token | undefined\n {\n return this.token_;\n }\n\n async isAuthenticated() : Promise\n {\n if(this.token_ === undefined)\n {\n return false;\n }\n\n // XXX token.expireds\n if((this.token_ as any).expires < new Date())\n {\n try \n {\n await this.refresh();\n }\n catch (e)\n {\n this.logout();\n await this.logout();\n return false;\n }\n }\n return true;\n }\n\n async refresh()\n {\n if(this.token_ === undefined)\n {\n throw Error(\"You must call login before using fetch with authentication\");\n }\n this.token_ = await this.token_.refresh();\n await this.saveToken();\n }\n\n get username(): string | undefined {\n if(this.token_)\n {\n try \n {\n const token = jwt_decode(this.token_.accessToken) as JwtToken;\n return token.sub;\n }\n catch(e)\n {\n console.error(e);\n }\n }\n return undefined;\n }\n\n get roles() : string[]\n {\n if(this.token_)\n {\n try \n {\n const token = jwt_decode(this.token_.accessToken) as JwtToken;\n if(typeof token.role === \"string\")\n {\n return [token.role];\n }\n return token.role || [];\n }\n catch(e)\n {\n console.error(e);\n }\n }\n return [];\n }\n\n getAuthenticatedFetch() \n {\n const af = async (input: Request | string, init?: RequestInit): Promise =>\n {\n if(this.token_ === undefined)\n {\n throw Error(\"You must call login before using fetch with authentication\");\n }\n\n const req: Request = new Request(input, { ...(init || {}), credentials: \"include\", });\n req.headers.set(\"Authorization\", `Bearer ${this.token_.accessToken}`);\n try \n {\n const response = await fetch(req);\n if(response.status === 401) // access-token expired\n {\n await this.refresh();\n return await af(input, init);\n }\n if(response.status === 400)\n {\n const body = await response.json();\n await this.logout();\n throw body.error; // invalid_grant, etc...\n }\n return response;\n }\n catch(e)\n {\n console.error({e});\n throw e;\n }\n }\n return af;\n }\n}\n\nexport default Auth;","import Auth from \"../api/auth\";\nimport { LocalStorageTokenStore } from \"./TokenStore\";\n\nconst auth = new Auth(new LocalStorageTokenStore());\n\nexport default auth;\n","import { Token } from \"client-oauth2\";\n\nexport interface TokenStore\n{\n save(token: Token): Promise;\n load(): Promise;\n clear(): Promise;\n}\n\nexport class LocalStorageTokenStore implements TokenStore\n{\n private key_: string = \"___TOKEN\";\n\n save(token: Token): Promise \n {\n const { client, ...dataToken } = token;\n localStorage.setItem(this.key_, JSON.stringify(dataToken));\n return Promise.resolve();\n } \n \n load(): Promise \n {\n const json = localStorage.getItem(this.key_);\n if(json === null)\n {\n return Promise.resolve(null);\n }\n try\n {\n const token = JSON.parse(json) as Token;\n return Promise.resolve(token);\n }\n catch(e)\n {\n return Promise.reject(e);\n }\n }\n\n clear(): Promise\n {\n localStorage.removeItem(this.key_);\n return Promise.resolve();\n }\n}\n","import auth from \"../service/auth\";\n\n// it is possible to set the localStorage \"guldmann_mobility:base_url\" key to an url to use\n// or it will default to https://mobility.guldmann.com\nexport const API_BASE_URL = (localStorage.getItem(\"guldmann_mobility:base_url\") || \"/api\").replace(/\\/+$/, \"\");\n\nconst fetch = auth.getAuthenticatedFetch(); //(typeof UNAUTHENTICATED_FETCH !== \"undefined\" && UNAUTHENTICATED_FETCH) ? window.fetch : auth.getAuthenticatedFetch();\n\nclass Api\n{\n static request = (url: string, method = \"GET\", body?: any) =>\n {\n const init: RequestInit = { method };\n if(body !== undefined)\n {\n init.body = JSON.stringify(body);\n init.headers = new Headers({\n \"Content-Type\": \"application/json\"\n });\n }\n return fetch(`${API_BASE_URL}/${url}`, init);\n }\n}\n\nexport default Api;","import { OfflineAction } from \"../types\";\n\nexport const createOfflineMeta = (username: string, url: string, method = \"GET\", body?: any): OfflineAction[\"meta\"] => ({\n offline: { \n effect: { username, url, method, body }\n }\n});\n","import { ManualEntryEvent } from \"..\";\nimport Api from \"../../../../api/api\";\nimport { createOfflineMeta } from \"../../../../util/offline\";\nimport { OfflineAction } from \"../../../../types\";\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES\n//\nexport const FETCH_MANUAL_TIME_ENTRIES = \"FETCH_MANUAL_TIME_ENTRIES\";\nexport interface FetchManualTimeEntriesAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES\";\n}\n\nexport const fetchManualTimeEntries = (username: string) => (dispatch: any) => (async () => \n{\n const initAction: FetchManualTimeEntriesAction = { type: \"FETCH_MANUAL_TIME_ENTRIES\" };\n dispatch(initAction);\n try\n {\n const response = await Api.request(\"time-tracking/manual\");\n if (response.ok)\n {\n const events: ManualEntryEvent[] = await response.json();\n dispatch(fetchManualTimeEntriesSuccess(username, events));\n }\n else\n {\n throw response.statusText;\n }\n }\n catch(e)\n {\n dispatch(FetchManualTimeEntriesFailure(e));\n }\n})();\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES_SUCCESS\n//\nexport const FETCH_MANUAL_TIME_ENTRIES_SUCCESS = \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\";\nexport interface FetchManualTimeEntriesSuccessAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES_SUCCESS\";\n username: string;\n events: ManualEntryEvent[];\n}\nexport const fetchManualTimeEntriesSuccess = (username: string, events: ManualEntryEvent[]): FetchManualTimeEntriesSuccessAction => ({\n type: FETCH_MANUAL_TIME_ENTRIES_SUCCESS,\n username,\n events\n});\n\n//\n// Action: FETCH_MANUAL_TIME_ENTRIES_FAILURE\n//\nexport const FETCH_MANUAL_TIME_ENTRIES_FAILURE = \"FETCH_MANUAL_TIME_ENTRIES_FAILURE\";\nexport interface FetchManualTimeEntriesFailureAction\n{\n type: \"FETCH_MANUAL_TIME_ENTRIES_FAILURE\";\n error: any;\n}\nexport const FetchManualTimeEntriesFailure = (error: any): FetchManualTimeEntriesFailureAction => ({\n type: FETCH_MANUAL_TIME_ENTRIES_FAILURE,\n error\n});\n\n//\n// Action: DELETE_MANUEL_TIME_ENTRY\n//\nexport const DELETE_MANUEL_TIME_ENTRY = \"DELETE_MANUEL_TIME_ENTRY\";\nexport interface DeleteManuelTimeEntryAction extends OfflineAction\n{\n type: \"DELETE_MANUEL_TIME_ENTRY\";\n id: string;\n username: string;\n}\nexport const deleteManuelTimeEntry = (username: string, id: string): DeleteManuelTimeEntryAction => ({\n type: DELETE_MANUEL_TIME_ENTRY,\n id,\n username,\n meta: createOfflineMeta(username, `time-tracking/manual/${id}`, \"DELETE\")\n});\n\n//\n// Action: ADD_MANUAL_TIME_ENTRY\n//\nexport const ADD_MANUAL_TIME_ENTRY = \"ADD_MANUAL_TIME_ENTRY\";\nexport interface AddManualTimeEntryAction extends OfflineAction\n{\n type: \"ADD_MANUAL_TIME_ENTRY\";\n entry: ManualEntryEvent;\n username: string;\n}\nexport const addManualTimeEntry = (username: string, entry: ManualEntryEvent): AddManualTimeEntryAction => ({\n type: ADD_MANUAL_TIME_ENTRY,\n entry, username,\n meta: createOfflineMeta(username, \"time-tracking/manual\", \"PUT\", entry)\n});","import { Dispatch } from \"redux\";\nimport { Event, CheckinEvent } from \"../typings\";\nimport { generateUuid } from \"../../../../util/uuid\";\nimport { OfflineAction } from \"../../../../types\";\nimport Api from \"../../../../api/api\";\nimport { createOfflineMeta } from \"../../../../util/offline\";\n\n//\n// Action: TRANSACTION_ADD\n//\nexport const TRANSACTION_OPEN = \"TRANSACTION_OPEN\";\nexport interface TransactionOpenAction extends OfflineAction\n{\n type: \"TRANSACTION_OPEN\";\n id: string;\n username: string;\n event: CheckinEvent;\n}\nexport const transactionOpen = (username: string, event: CheckinEvent, id = generateUuid()): TransactionOpenAction => ({\n type: TRANSACTION_OPEN,\n id,\n username,\n event: { ...event, transactionId: id },\n meta: createOfflineMeta(username, \"time-tracking/entry\", \"PUT\", { ...event, transactionId: id })\n});\n\n//\n// Action: TRANSACTION_CLOSE\n//\nexport const TRANSACTION_CLOSE = \"TRANSACTION_CLOSE\";\nexport interface TransactionCloseAction\n{\n type: \"TRANSACTION_CLOSE\";\n id: string;\n username: string;\n}\nexport const transactionClose = (username: string, id: string): TransactionCloseAction => ({\n type: TRANSACTION_CLOSE,\n id,\n username\n});\n\n//\n// Action: EVENT_ADD\n//\nexport const TRANSACTION_EVENT_ADD = \"TRANSACTION_EVENT_ADD\";\nexport interface TransactionEventAddAction extends OfflineAction\n{\n type: \"TRANSACTION_EVENT_ADD\";\n transactionId: string;\n event: Event;\n}\nexport const transactionEventAdd = (event: Event): TransactionEventAddAction => ({\n type: TRANSACTION_EVENT_ADD,\n transactionId: event.transactionId,\n event,\n meta: createOfflineMeta(event.username, \"time-tracking/entry\", \"PUT\", event)\n});\n\n//\n// Action: TRANSACTION_CHECKIN\n//\nexport const TRANSACTION_CHECKIN = \"TRANSACTION_CHECKIN\";\nexport interface TransactionCheckinAction\n{\n type: \"TRANSACTION_CHECKIN\";\n checkin: string;\n absence?: string;\n}\n/**\n * Adds a check-in event to the given transaction\n * @param checkin \n * @param absence \n */\nexport const transactionCheckin = (checkin: string, absence?: string): TransactionCheckinAction => ({\n type: TRANSACTION_CHECKIN,\n checkin,\n absence\n});\n\nexport const fetchTransactions = () => (dispatch: Dispatch) => \n{\n Api.request(\"time-tracking/entry\").then(result => console.log(result));\n};","import UUID from \"pure-uuid\";\n\nexport const generateUuid = () => \n new UUID(4).format();\n\n ","import { Action } from \"redux\";\n\nexport const DRAWER_OPEN = \"DRAWER_OPEN\";\nexport interface DrawerOpenAction extends Action\n{\n type: \"DRAWER_OPEN\",\n open: boolean;\n}\nexport const drawerOpen = (open = true): DrawerOpenAction => ({\n type: DRAWER_OPEN,\n open\n});\n\nexport const BUSY = \"BUSY\";\nexport interface Busy\n{\n type: \"BUSY\";\n busy: boolean;\n}\n\nexport const busy = (busy: boolean): Busy => ({ type: BUSY, busy });\n","import { AnyAction } from \"redux\";\n\nexport interface BusyAction\n{\n uiMeta: { busy: boolean };\n}\n\nconst isBusyAction = (action: any): action is BusyAction => \n typeof action.uiMeta === \"object\" \n && typeof action.uiMeta.busy === \"boolean\"\n ;\n\nconst busyReducer = (state = false, action: AnyAction): boolean =>\n isBusyAction(action) ? action.uiMeta.busy : state;\n\nexport default busyReducer;","import { \n Busy,\n DrawerOpenAction, \n BUSY,\n DRAWER_OPEN \n} from \"./actions\";\nimport busyReducer from \"./busy\";\n\nexport interface UiState\n{\n drawer: { open: boolean },\n busy: boolean;\n}\n\ntype UIAction = DrawerOpenAction | Busy;\n\nconst initialState: UiState = \n{\n drawer: \n {\n open: false\n },\n busy: false\n};\n\nconst uiReducer = (state = initialState, action: UIAction): UiState =>\n{\n state.busy = busyReducer(state.busy, action);\n\n if(action.type === DRAWER_OPEN)\n {\n const { open } = action;\n return {\n ...state,\n drawer: {\n ...state.drawer,\n open\n }\n }\n }\n\n if(action.type === BUSY)\n {\n const { busy } = action\n return {\n ...state,\n busy\n };\n }\n\n return state;\n};\n\nexport const getDrawerOpenState = (state: UiState) => state.drawer.open;\n\nexport const isBusy = (state: UiState) => state.busy;\n\nexport default uiReducer;","import { Action } from \"redux\";\nimport { busy } from \"../ui/actions\";\nimport auth from \"../../service/auth\";\n\nexport const USER_LOGIN_SUCCESS = \"USER_LOGIN_SUCCESS\";\nexport interface UserLoginSuccess extends Action\n{\n type: \"USER_LOGIN_SUCCESS\";\n username: string;\n roles: string[];\n}\nexport const userLoginSuccess = (username: string, roles: string[]): UserLoginSuccess => ({\n type: USER_LOGIN_SUCCESS,\n username, roles\n});\n\nexport const USER_LOGOUT = \"USER_LOGOUT\"\nexport interface UserLogout extends Action\n{\n type: \"USER_LOGOUT\";\n}\nexport const userLoggedOut = (): UserLogout => ({\n type: USER_LOGOUT\n});\n\nexport const USER_LOGIN_PENDING = \"USER_LOGIN_PENDING\";\nexport interface UserLoginPending extends Action\n{\n type: \"USER_LOGIN_PENDING\";\n}\nexport const userLoginPending = (): UserLoginPending => ({ type: USER_LOGIN_PENDING });\n\nexport const USER_LOGIN_FAILED = \"USER_LOGIN_FAILED\";\nexport interface UserLoginFailed extends Action\n{\n type: \"USER_LOGIN_FAILED\";\n reason: any;\n}\nexport const userLoginFailed = (reason: any): UserLoginFailed => ({ type: USER_LOGIN_FAILED, reason });\n\nexport interface UserUpdateRoles\n{\n type: \"USER_UPDATE_ROLES\";\n roles: string[];\n}\nexport const userUpdateRoles = (roles: string[]): UserUpdateRoles => ({ type: \"USER_UPDATE_ROLES\", roles });\n\nexport interface UserClearRoles\n{\n type: \"USER_CLEAR_ROLES\";\n}\n\nexport const userClearRoles = (): UserClearRoles => ({ type: \"USER_CLEAR_ROLES\" });\n\nexport const login = (username: string, password: string) => async (dispatch: any) =>\n{\n // TODO - perform authentication\n dispatch(userLoginPending());\n dispatch(busy(true));\n\n try \n {\n await auth.login(username, password);\n dispatch(userLoginSuccess(username, auth.roles));\n }\n catch(reason)\n {\n dispatch(userLoginFailed(reason));\n dispatch(userClearRoles());\n }\n\n dispatch(busy(false));\n};\n\nexport const logout = () => async (dispatch: any) =>\n{\n await auth.logout();\n dispatch(userLoggedOut());\n dispatch(userClearRoles());\n}","import { \n USER_LOGIN_PENDING,\n USER_LOGIN_SUCCESS,\n USER_LOGOUT,\n UserLoginSuccess,\n UserLogout,\n UserLoginPending,\n USER_LOGIN_FAILED,\n UserLoginFailed,\n UserClearRoles,\n UserUpdateRoles\n} from \"./action\";\n\ntype UserActions = UserLoginSuccess | UserLogout | UserLoginPending | UserLoginFailed | UserUpdateRoles | UserClearRoles;\n\nexport interface UserState\n{\n username?: string;\n pending: boolean;\n failedLogin: boolean;\n roles: string[];\n}\n\nconst initialState: UserState =\n{\n // username: a\n pending: false,\n failedLogin: false,\n roles: []\n}\n\nconst user = (state = initialState, action: UserActions) =>\n{\n if(action.type === USER_LOGIN_SUCCESS)\n {\n const { username, roles } = action;\n return {\n ...state,\n username,\n roles,\n pending: false,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGOUT)\n {\n return {\n ...state,\n username: undefined,\n pending: false,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGIN_PENDING)\n {\n return {\n ...state,\n pending: true,\n failedLogin: false\n }\n }\n\n if(action.type === USER_LOGIN_FAILED)\n {\n return {\n ...state,\n pending: false,\n username: undefined,\n failedLogin: true\n }\n }\n\n if (action.type === \"USER_CLEAR_ROLES\") \n {\n return {\n ...state,\n roles: []\n };\n }\n\n if (action.type === \"USER_UPDATE_ROLES\") \n {\n const { roles } = action;\n return {\n ...state,\n roles\n };\n }\n\n return state;\n}\n\nexport const getUsername = (state: UserState) => state.username;\nexport const isLoggedIn = (state: UserState) => state.username !== undefined;\nexport const getLoginPending = (state: UserState) => state.pending;\nexport const getLoginFailed = (state: UserState) => state.failedLogin;\nexport const getUserRoles = (state: UserState) => state.roles;\n\nexport default user;","import { ERROR_SERVER_NOT_AVAILABLE, ERROR_INTERNAL_SERVER_FAILURE, ERROR_CLIENT_ERROR } from \"../constants/error\";\nimport auth from \"../../../service/auth\";\nimport { Printer, LabelTypes } from \"../state/types\";\nimport { API_BASE_URL } from \"../../../api/api\";\n\nconst defaultHeaders: RequestInit = {\n mode: \"cors\", \n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n};\n\nexport interface Draft\n{\n id: string;\n name: string;\n}\n\nexport const TRACKING_BATCH = 0;\nexport const TRACKING_SERIAL = 1;\nexport const TRACKING_ORDINARY = 2;\n\ntype TrackingType = 0 | 1 | 2;\n\nexport interface Item\n{\n ean: string;\n sku: string;\n unit: string;\n name: string;\n tracking: TrackingType;\n barcode: string;\n lotNumber: string;\n quantity: string;\n}\n\n// for development\n// const API_BASE_URI = \"http://localhost:52184/stock-management/inventory\";\n\nconst defaultHandler: ResponseHandler = (response: Response) => response.json();\n\ntype ResponseHandler = (response: Response) => T;\n\nexport interface RelocationRequest\n{\n from: string;\n to: string;\n item: Item;\n qty: number;\n warehouse: string;\n}\n\nexport interface LabelRequest\n{\n printer: string;\n quantity: number;\n barcode: string;\n labelSku: string;\n additionalFields: { [key: string]: string };\n}\n\nexport const apiCall = async (uri: string, options: RequestInit = { credentials: \"include\", mode: \"cors\" }, handler: ResponseHandler = defaultHandler): Promise => \n{\n try\n {\n const fetch = auth.getAuthenticatedFetch();\n const response = await fetch(`${API_BASE_URL}/${uri}`, options);\n \n if(response.ok)\n {\n return handler(response);\n }\n\n if(response.status === 500)\n {\n let message = null;\n try \n {\n const responseBody = await response.json();\n message = responseBody.errorMessage;\n } catch(e) {}\n throw { error: ERROR_INTERNAL_SERVER_FAILURE, message };\n }\n\n if(response.status === 404)\n {\n throw { error: ERROR_CLIENT_ERROR };\n }\n\n if(response.status === 409)\n {\n throw await response.json();\n }\n\n } catch (e)\n {\n if (e instanceof TypeError)\n {\n throw { error: ERROR_SERVER_NOT_AVAILABLE }\n }\n throw e;\n }\n return null as any;\n};\n\nexport const getDrafts = async (warehouse: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/drafts`);\n\nexport const getItem = async (barcode: string): Promise => \n apiCall(`lookup/barcode/${barcode}`).then(item => ({ ...item, barcode }));\n\nexport const getQty = async (warehouse: string, location: string, sku: string) =>\n apiCall(`lookup/${warehouse}/location/${location}/item/${sku}`);\n\nexport const moveItem = async ({ from, to, item: { barcode: item }, warehouse, qty: quantity }: RelocationRequest) =>\n apiCall(`stock-management/relocate`, {\n ...defaultHeaders,\n method: \"POST\",\n body: JSON.stringify({ from, to, item, warehouse, quantity }),\n }, response => response.ok);\n\nexport const updateItem = async (draft: string, warehouse: string, barcode: string, location: string, quantity: number): Promise => \n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/item/${barcode}`, { \n ...defaultHeaders,\n method: \"PUT\",\n body: JSON.stringify({ quantity, location })\n }, response => response.ok);\n\nexport const fetchPrinters = async (): Promise =>\n apiCall(`stock-management/label/printers`);\n\nexport const fetchLabelTypes = async (barcode: string, languageId = \"en-US\"): Promise =>\n apiCall(`lookup/barcode/${barcode}/labels/${languageId}`);\n\nexport const requestLabel = async (labelRequest: LabelRequest): Promise => \n apiCall(`stock-management/label/print`, {\n ...defaultHeaders,\n method: \"POST\",\n body: JSON.stringify(labelRequest)\n }, response => response.ok);\n\nexport const fetchPendingItems = async (warehouse: string, draft: string, location: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/pending/${location}`, undefined, res => \n (res.ok) ? (\n res.status === 204 ? [] : res.json()\n ) : defaultHandler(res));\n\nexport const confirmLocationComplete = async (warehouse: string, draft: string, location: string): Promise =>\n apiCall(`stock-management/inventory/${warehouse}/draft/${draft}/pending/${location}/complete`, {\n ...defaultHeaders,\n method: \"POST\"\n }, res => res.ok ? Promise.resolve() : defaultHandler(res));\n// export const requestLabelConfig = async (itemId: string): Promise< => \n","export const ERROR_SERVER_NOT_AVAILABLE = 0;\nexport const ERROR_INTERNAL_SERVER_FAILURE = 1;\nexport const ERROR_CLIENT_ERROR = 2;\n","import { Dispatch } from \"redux\";\nimport { ActionFailure, getErrorReason } from \"../../action\";\nimport { getItem, Item } from \"../../../api/StockApi\";\nimport { getQty } from \"../../../api/StockApi\";\nimport { generateUuid } from \"../../../../../util/uuid\";\n\n//\n// Action: STOCK_FETCH_ITEM\n//\nexport const STOCK_FETCH_ITEM = \"STOCK_FETCH_ITEM\";\nexport interface StockFetchItemAction\n{\n type: \"STOCK_FETCH_ITEM\";\n}\nexport const _stockFetchItem = (): StockFetchItemAction => ({\n type: \"STOCK_FETCH_ITEM\"\n});\n\nexport const stockFetchItem = (draft: string, barcode: string, location: string, warehouse:string) => (dispatch: Dispatch) => \n{\n dispatch(_stockFetchItem());\n (async () => {\n try\n {\n const item = await getItem(barcode);\n\n // Added to validate Qty 10-8-2021\n const qtyInStockLoc = await getQty(warehouse, location, item.sku);\n item.quantity = qtyInStockLoc;\n\n dispatch(stockFetchItemSuccess(item, location));\n\n }\n catch(e)\n {\n let errorMessage = (e.message) \n ? e.message\n : `${getErrorReason(e.error)}Could not fetch item`;\n dispatch(stockFetchItemFailure(generateUuid(), errorMessage));\n }\n })();\n}\n\n//\n// Action: STOCK_FETCH_ITEM_FAILURE\n//\nexport const STOCK_FETCH_ITEM_FAILURE = \"STOCK_FETCH_ITEM_FAILURE\";\nexport interface StockFetchItemFailureAction extends ActionFailure\n{\n type: \"STOCK_FETCH_ITEM_FAILURE\";\n}\nexport const stockFetchItemFailure = (id: string, message: string): StockFetchItemFailureAction => ({\n type: STOCK_FETCH_ITEM_FAILURE,\n notification: {\n id, message,\n severity: \"error\",\n source: \"server\"\n }\n});\n\n//\n// Action: STOCK_FETCH_ITEM_SUCCESS\n//\nexport const STOCK_FETCH_ITEM_SUCCESS = \"STOCK_FETCH_ITEM_SUCCESS\";\nexport interface StockFetchItemSuccessAction\n{\n type: \"STOCK_FETCH_ITEM_SUCCESS\";\n item: Item;\n location: string;\n}\nexport const stockFetchItemSuccess = (item: Item, location: string): StockFetchItemSuccessAction => ({\n type: STOCK_FETCH_ITEM_SUCCESS,\n item,\n location\n});","import { Dispatch } from \"redux\";\nimport { updateItem } from \"../../../api/StockApi\";\nimport { generateUuid } from \"../../../../../util/uuid\";\nimport { Notification } from \"../../types\";\nimport { ActionFailure } from \"../../action\";\nimport i18n from \"es2015-i18n-tag\";\n\nexport const STOCK_UPDATE_ITEM = \"STOCK_UPDATE_ITEM\";\nexport interface StockUpdateItemAction\n{\n \n type: \"STOCK_UPDATE_ITEM\";\n draftId: string;\n barcode: string;\n location: string;\n quantity: number;\n warehouse: string;\n sku: string;\n}\nexport const _stockUpdateItem = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string): StockUpdateItemAction => ({\n type: STOCK_UPDATE_ITEM,\n draftId, barcode, location, quantity, warehouse, sku\n});\n\nexport const stockUpdateItem = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockUpdateItem(draftId, warehouse, barcode, location, quantity, sku));\n let errorMessage = i18n`Could not update inventory draft.`;\n (async () => {\n try\n {\n const result = await updateItem(draftId, warehouse, barcode, location, quantity);\n if(result)\n {\n const message = `Updated ${sku} quantity to ${quantity} at ${location}`;\n const notification: Notification = {\n id: generateUuid(),\n message,\n severity: \"success\",\n source: \"client\"\n }\n dispatch(stockUpdateItemSuccess(draftId, warehouse, barcode, location, quantity, notification));\n return;\n }\n }\n catch(e)\n {\n if(e.message)\n {\n errorMessage = e.message;\n }\n console.warn(e);\n }\n\n dispatch(stockUpdateItemFailure(generateUuid(), errorMessage)); \n })();\n}\n\nexport const STOCK_UPDATE_ITEM_SUCCESS = \"STOCK_UPDATE_ITEM_SUCCESS\";\nexport interface StockUpdateItemSuccessAction\n{\n type: \"STOCK_UPDATE_ITEM_SUCCESS\";\n draftId: string;\n barcode: string;\n location: string;\n quantity: number;\n warehouse: string;\n notification?: Notification;\n}\nexport const stockUpdateItemSuccess = (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, notification?: Notification): StockUpdateItemSuccessAction => ({\n type: STOCK_UPDATE_ITEM_SUCCESS,\n draftId, barcode, location, quantity, warehouse, notification\n});\n\nexport const STOCK_UPDATE_ITEM_FAILURE = \"STOCK_UPDATE_ITEM_FAILURE\";\nexport interface StockUpdateItemFailureAction extends ActionFailure\n{\n type: \"STOCK_UPDATE_ITEM_FAILURE\";\n}\nexport const stockUpdateItemFailure = (id: string, message: string): StockUpdateItemFailureAction => ({\n type: STOCK_UPDATE_ITEM_FAILURE,\n notification: {\n id, message,\n source: \"server\",\n severity: \"error\"\n }\n});\n","import { StockItem, Notification } from \"./types\";\nimport { Dispatch } from \"redux\";\nimport { Draft, getDrafts, Item, fetchPendingItems, confirmLocationComplete } from \"../api/StockApi\";\nimport { generateUuid } from \"../../../util/uuid\";\n\nimport { StockFetchItemFailureAction, StockFetchItemSuccessAction, StockFetchItemAction } from \"./action/item/fetch\";\nimport { StockUpdateItemAction, StockUpdateItemSuccessAction, StockUpdateItemFailureAction } from \"./action/item/update\";\nimport { StockDebugClearStateAction } from \"./action/debug\";\nimport i18n from \"es2015-i18n-tag\";\nimport { ERROR_SERVER_NOT_AVAILABLE, ERROR_INTERNAL_SERVER_FAILURE } from \"../constants/error\";\n\nexport * from \"./action/item/fetch\";\nexport * from \"./action/item/update\";\nexport * from \"./action/debug\";\n\nexport const getErrorReason = (errorCode: number): string => \n (errorCode === ERROR_SERVER_NOT_AVAILABLE)\n ? i18n`Server not reachable: `\n : (errorCode === ERROR_INTERNAL_SERVER_FAILURE)\n ? i18n`Request failed: `\n : \"\";\n\n\nexport interface ActionFailure\n{\n notification: Notification;\n}\n\n//\n// Action: STOCK_INIT\n//\nexport const STOCK_INIT = \"STOCK_INIT\";\nexport interface StockInitAction\n{\n type: \"STOCK_INIT\";\n}\nexport const stockInit = (): StockInitAction => ({\n type: STOCK_INIT\n});\n\n\n\n//\n// Action: STOCK_UPDATE_CURRENT\n//\nexport const STOCK_UPDATE_CURRENT = \"STOCK_UPDATE_CURRENT\";\nexport interface StockUpdateCurrentAction\n{\n type: \"STOCK_UPDATE_CURRENT\";\n item: Partial;\n}\nexport const stockUpdateCurrent = (item: Partial): StockUpdateCurrentAction => ({\n type: STOCK_UPDATE_CURRENT, item\n});\n\n//\n// Action: STOCK_RESET_CURRENT\n//\nexport const STOCK_RESET_CURRENT = \"STOCK_RESET_CURRENT\";\nexport interface StockResetCurrentAction\n{\n type: \"STOCK_RESET_CURRENT\";\n}\nexport const stockResetCurrent = (): StockResetCurrentAction => ({\n type: STOCK_RESET_CURRENT\n});\n\n//\n// Action: STOCK_SET_WAREHOUSE\n//\nexport const STOCK_SET_WAREHOUSE = \"STOCK_SET_WAREHOUSE\";\nexport interface StockSetWarehouseAction\n{\n type: \"STOCK_SET_WAREHOUSE\";\n warehouse: string;\n}\nexport const stockSetWarehouse = (warehouse: string): StockSetWarehouseAction => ({\n type: STOCK_SET_WAREHOUSE,\n warehouse\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD\n//\nexport const STOCK_DRAFTS_LOAD = \"STOCK_DRAFTS_LOAD\";\nexport interface StockDraftsLoadAction\n{\n type: \"STOCK_DRAFTS_LOAD\";\n}\nconst _stockDraftsLoad = (): StockDraftsLoadAction => ({\n type: STOCK_DRAFTS_LOAD\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD_SUCCESS\n//\nexport const STOCK_DRAFTS_LOAD_SUCCESS = \"STOCK_DRAFTS_LOAD_SUCCESS\";\nexport interface StockDraftsLoadSuccessAction\n{\n type: \"STOCK_DRAFTS_LOAD_SUCCESS\";\n drafts: Draft[];\n warehouse: string;\n}\nexport const stockDraftsLoadSuccess = (warehouse: string, drafts: Draft[]): StockDraftsLoadSuccessAction => ({\n type: STOCK_DRAFTS_LOAD_SUCCESS,\n warehouse,\n drafts\n});\n\n//\n// Action: STOCK_DRAFTS_LOAD_FAILURE\n//\nexport const STOCK_DRAFTS_LOAD_FAILURE = \"STOCK_DRAFTS_LOAD_FAILURE\";\nexport interface StockDraftsLoadFailureAction extends ActionFailure\n{\n type: \"STOCK_DRAFTS_LOAD_FAILURE\";\n}\nexport const stockDraftsLoadFailure = (id: string, message: string): StockDraftsLoadFailureAction => ({\n type: STOCK_DRAFTS_LOAD_FAILURE,\n notification: {\n id, message,\n severity: \"error\",\n source: \"server\"\n }\n});\n\nexport const stockDraftsLoad = (warehouse: string) => (dispatch: Dispatch) => \n{\n (async () => \n {\n dispatch(_stockDraftsLoad());\n try\n {\n const drafts = await getDrafts(warehouse);\n dispatch(stockDraftsLoadSuccess(warehouse, drafts));\n } \n catch(e)\n {\n const prefix = getErrorReason(e.error);\n dispatch(stockDraftsLoadFailure(generateUuid(), `${prefix}Could not load drafts for ${warehouse}`)); /* TODO i18n for error messages */\n }\n })();\n};\n\n//\n// Action: STOCK_SCANNED_LOCATION\n//\nexport const STOCK_SCANNED_LOCATION = \"STOCK_SCANNED_LOCATION\";\nexport interface StockScannedLocationAction\n{\n type: \"STOCK_SCANNED_LOCATION\";\n location: string;\n}\nexport const stockScannedLocation = (location: string): StockScannedLocationAction => ({\n type: STOCK_SCANNED_LOCATION,\n location\n});\n\n//\n// Action: STOCK_SCANNED_ITEM\n//\nexport const STOCK_SCANNED_ITEM = \"STOCK_SCANNED_ITEM\";\nexport interface StockScannedItemAction\n{\n type: \"STOCK_SCANNED_ITEM\";\n item: string;\n}\nexport const stockScannedItem = (item: string): StockScannedItemAction => ({\n type: STOCK_SCANNED_ITEM,\n item\n});\n\n//\n// Action: STOCK_SCANNED_CLEAR\n//\nexport const STOCK_SCANNED_CLEAR = \"STOCK_SCANNED_CLEAR\";\nexport interface StockScannedClearAction\n{\n type: \"STOCK_SCANNED_CLEAR\";\n}\nexport const stockScannedClear = (): StockScannedClearAction => ({\n type: STOCK_SCANNED_CLEAR\n});\n\n//\n// Action: STOCK_DISMISS_ERROR\n//\nexport const STOCK_DISMISS_ERROR = \"STOCK_DISMISS_ERROR\";\nexport interface StockDismissErrorAction\n{\n type: \"STOCK_DISMISS_ERROR\";\n id: string;\n}\nexport const stockDismissError = (id: string): StockDismissErrorAction => ({\n type: STOCK_DISMISS_ERROR,\n id\n});\n\n//\n// Action: STOCK_REVERT_LOCATION\n//\nexport interface StockRevertLocationAction\n{\n type: \"STOCK_REVERT_LOCATION\";\n}\nexport const stockRevertLocation = (): StockRevertLocationAction => ({\n type: \"STOCK_REVERT_LOCATION\"\n});\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS\n//\nexport interface StockFetchPendingItemsAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS\";\n warehouse: string;\n draft: string;\n location: string;\n}\nexport const _stockFetchPendingItems = (warehouse: string, draft: string, location: string): StockFetchPendingItemsAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS\",\n warehouse, draft, location\n});\n\nexport const stockFetchPendingItems = (warehouse: string, draft: string, location: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockFetchPendingItems(warehouse, draft, location));\n (async () => {\n try \n { \n const items = await fetchPendingItems(warehouse, draft, location);\n dispatch(stockFetchPendingItemsSuccess(items));\n }\n catch(e)\n {\n dispatch(stockFetchPendingItemsFailure(e.message));\n }\n })();\n\n};\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS_SUCCESS\n//\nexport interface StockFetchPendingItemsSuccessAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\";\n items: Item[];\n}\nexport const stockFetchPendingItemsSuccess = (items: Item[]): StockFetchPendingItemsSuccessAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\",\n items\n});\n\n//\n// Action: STOCK_FETCH_PENDING_ITEMS_FAILURE\n//\nexport interface StockFetchPendingItemsFailureAction\n{\n type: \"STOCK_FETCH_PENDING_ITEMS_FAILURE\";\n message: string;\n}\nexport const stockFetchPendingItemsFailure = (message: string): StockFetchPendingItemsFailureAction => ({\n type: \"STOCK_FETCH_PENDING_ITEMS_FAILURE\",\n message\n});\n\n//\n// Action: STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\n//\nexport interface StockClearPreviousLocationAndItemsAction\n{\n type: \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\";\n}\nexport const stockClearPreviousLocationAndItems = (): StockClearPreviousLocationAndItemsAction => ({\n type: \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\"\n});\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE\n//\nexport interface StockConfirmLocationCompleteAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE\";\n warehouse: string;\n location: string;\n draft: string;\n}\nexport const _stockConfirmLocationComplete = (warehouse: string, draft: string, location: string): StockConfirmLocationCompleteAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE\",\n warehouse, draft, location\n});\n\nexport const stockConfirmLocationComplete = (warehouse: string, draft: string, location: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockConfirmLocationComplete(warehouse, draft, location));\n (async () => {\n try \n {\n await confirmLocationComplete(warehouse, draft, location);\n dispatch(stockConfirmLocationCompleteSuccess());\n }\n catch(e)\n {\n dispatch(stockConfirmLocationCompleteFailure(e.message));\n }\n })();\n}\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\n//\nexport interface StockConfirmLocationCompleteSuccessAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\";\n}\nexport const stockConfirmLocationCompleteSuccess = (): StockConfirmLocationCompleteSuccessAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\"\n});\n\n//\n// Action: STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\n//\nexport interface StockConfirmLocationCompleteFailureAction\n{\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\";\n message: string;\n}\nexport const stockConfirmLocationCompleteFailure = (message: string): StockConfirmLocationCompleteFailureAction => ({\n type: \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\",\n message\n});\n\nexport type StockAction = StockFetchItemAction\n| StockFetchItemFailureAction\n| StockFetchItemSuccessAction\n| StockUpdateCurrentAction\n| StockResetCurrentAction\n| StockSetWarehouseAction\n| StockDraftsLoadAction\n| StockDraftsLoadSuccessAction\n| StockDraftsLoadFailureAction\n| StockScannedLocationAction\n| StockScannedItemAction\n| StockScannedClearAction\n| StockInitAction\n| StockUpdateItemAction\n| StockUpdateItemSuccessAction\n| StockUpdateItemFailureAction\n| StockDismissErrorAction\n| StockDebugClearStateAction\n| StockFetchPendingItemsAction\n| StockFetchPendingItemsSuccessAction\n| StockFetchPendingItemsFailureAction\n| StockClearPreviousLocationAndItemsAction\n| StockRevertLocationAction\n| StockConfirmLocationCompleteAction\n| StockConfirmLocationCompleteSuccessAction\n| StockConfirmLocationCompleteFailureAction\n;\n","import { InventoryState } from \"../types\";\nimport { StockAction } from \"../action\";\nimport {\n STOCK_FETCH_ITEM,\n STOCK_FETCH_ITEM_FAILURE,\n STOCK_FETCH_ITEM_SUCCESS,\n STOCK_UPDATE_CURRENT,\n STOCK_RESET_CURRENT,\n STOCK_SET_WAREHOUSE,\n STOCK_DRAFTS_LOAD_SUCCESS,\n STOCK_SCANNED_ITEM, \n STOCK_SCANNED_LOCATION,\n STOCK_SCANNED_CLEAR,\n STOCK_INIT, \n STOCK_UPDATE_ITEM, \n STOCK_UPDATE_ITEM_SUCCESS, \n STOCK_UPDATE_ITEM_FAILURE, \n STOCK_DRAFTS_LOAD_FAILURE,\n STOCK_DISMISS_ERROR\n} from \"../action\";\nimport { Draft } from \"../../api/StockApi\";\nimport { STOCK_DEBUG_CLEAR_STATE } from \"../action/debug\";\n\nconst initialState: InventoryState =\n{\n fetchingItem: false,\n updatingItem: false,\n notifications: [],\n scanned: { }\n};\n\nconst reducer = (state = initialState, action: StockAction): InventoryState =>\n{\n if(action.type === STOCK_INIT)\n {\n return {\n ...state,\n fetchingItem: false,\n current: undefined,\n \n updatingItem: false,\n scanned: {}\n }\n }\n\n if(action.type === STOCK_RESET_CURRENT) \n {\n return {\n ...state,\n current: undefined\n };\n }\n\n if(action.type === STOCK_UPDATE_CURRENT)\n {\n const { item } = action;\n return {\n ...state,\n current: {\n ...state.current,\n ...item\n } as any // TODO FIX\n };\n }\n\n if(action.type === STOCK_FETCH_ITEM)\n {\n return {\n ...state, \n fetchingItem: true\n };\n }\n\n if(action.type === STOCK_FETCH_ITEM_SUCCESS)\n {\n const { item, location } = action;\n return {\n ...state, \n fetchingItem: false,\n current: { ...item, location }\n }\n }\n\n if(action.type === STOCK_FETCH_ITEM_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n fetchingItem: false,\n scanned: {},\n notifications: [...state.notifications, notification]\n }\n }\n\n if(action.type === STOCK_SET_WAREHOUSE)\n {\n const { warehouse } = action;\n return {\n ...state,\n drafts: undefined,\n warehouse\n }\n }\n\n if(action.type === STOCK_DRAFTS_LOAD_SUCCESS)\n {\n const { drafts } = action;\n return {\n ...state,\n drafts\n };\n }\n\n if(action.type === STOCK_DRAFTS_LOAD_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n notifications: [...state.notifications, notification]\n }\n }\n\n if(action.type === STOCK_SCANNED_ITEM)\n {\n const { item } = action;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n item\n }\n }\n }\n\n if(action.type === STOCK_SCANNED_LOCATION)\n {\n const { location } = action;\n const { location: previousLocation } = state.scanned;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n location, previousLocation,\n pendingItems: undefined\n }\n }\n }\n\n if(action.type === \"STOCK_REVERT_LOCATION\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n location: state.scanned.previousLocation,\n previousLocation: undefined\n }\n };\n }\n\n if(action.type === \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n previousLocation: undefined,\n pendingItems: undefined\n }\n };\n }\n\n if(action.type === \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\")\n {\n const { items: pendingItems } = action;\n return {\n ...state,\n scanned: {\n ...state.scanned,\n pendingItems\n }\n }\n }\n\n if(action.type === \"STOCK_FETCH_PENDING_ITEMS_FAILURE\")\n {\n // TODO: Handle this\n }\n\n if(action.type === \"STOCK_CLEAR_PREVIOUS_LOCATION_AND_ITEMS\")\n {\n return {\n ...state,\n scanned: {\n ...state.scanned,\n pendingItems: undefined,\n previousLocation: undefined\n }\n };\n }\n\n if(action.type === STOCK_SCANNED_CLEAR)\n {\n return {\n ...state, \n updatingItem: false,\n fetchingItem: false,\n current: undefined,\n scanned: {\n location: state.scanned.location\n }\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM)\n {\n return {\n ...state,\n updatingItem: true\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM_SUCCESS)\n {\n const { notification = undefined } = action;\n const notifications = (notification === undefined) \n ? state.notifications\n : [...state.notifications, notification];\n\n return {\n ...state,\n updatingItem: false,\n current: undefined,\n scanned: {\n location: state.scanned.location\n },\n notifications\n }\n }\n\n if(action.type === STOCK_UPDATE_ITEM_FAILURE)\n {\n const { notification } = action;\n return {\n ...state,\n updatingItem: false,\n current: undefined,\n scanned: {},\n notifications: [...(state.notifications || []), notification]\n }\n }\n\n if(action.type === STOCK_DISMISS_ERROR)\n {\n const { id } = action;\n return {\n ...state,\n notifications: state.notifications.filter(err => err.id !== id)\n }\n }\n\n if(action.type === STOCK_DEBUG_CLEAR_STATE)\n {\n return initialState;\n }\n\n return state;\n};\n\nexport const getCurrentWarehouse = (state: InventoryState) => state.warehouse;\n\nexport const getDrafts = (state: InventoryState): Draft[] => state.drafts || [];\n\nexport const getCurrentItem = (state: InventoryState) => state.current;\n\nexport const getScannedItem = (state: InventoryState) => state.scanned.item;\n\nexport const getScannedLocation = (state: InventoryState) => state.scanned.location;\n\nexport const getPreviousLocaiton = (state: InventoryState) => state.scanned.previousLocation;\n\nexport const getPendingItems = (state: InventoryState) => state.scanned.pendingItems;\n\nexport const getIsLoadingItem = (state: InventoryState) => state.fetchingItem;\n\nexport const getIsUpdatingItem = (state: InventoryState) => state.updatingItem;\n\nexport const getNotifications = (state: InventoryState) => state.notifications || [];\n\nexport default reducer;","//\n// Action: STOCK_DEBUG_CLEAR_STATE\n//\nexport const STOCK_DEBUG_CLEAR_STATE = \"STOCK_DEBUG_CLEAR_STATE\";\nexport interface StockDebugClearStateAction\n{\n type: \"STOCK_DEBUG_CLEAR_STATE\";\n}\nexport const stockDebugClearState = (): StockDebugClearStateAction => ({\n type: STOCK_DEBUG_CLEAR_STATE\n});","import { Item, RelocationRequest } from \"../../api/StockApi\";\nimport { StockRelocationAction } from \"../action/relocation\";\nimport produce from \"immer\";\n\nexport interface State \n{\n request: Partial;\n currentItem?: Item;\n}\n\nconst initialState: State = { request: { } };\n\nconst reducer = (state = initialState, action: StockRelocationAction): State => produce(state, state => \n{\n if(action.type === \"STOCK_RELOCATION_FETCH_ITEM\")\n {\n state.currentItem = undefined;\n }\n\n else if(action.type === \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\")\n {\n state.currentItem = action.item;\n }\n\n else if(action.type === \"STOCK_RELOCATION_CLEAR\" || action.type === \"STOCK_RELOCATION_COMMIT_SUCCESS\")\n {\n state.request = {};\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_SOURCE_LOCATION\")\n {\n state.request.from = action.location;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\")\n {\n state.request.to = action.location;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_QUANTITY\")\n {\n state.request.qty = action.qty;\n }\n\n else if(action.type === \"STOCK_RELOCATION_SET_ITEM\")\n {\n state.request.item = action.item;\n }\n\n});\n\nexport const getCurrentItem = (state: State) => state.currentItem;\nexport const getRelocationRequest = (state: State) => state.request;\n\nexport default reducer;","import produce from \"immer\";\nimport { LabelActions } from \"../action/label\";\nimport { Printer } from \"../types\";\n\ninterface State\n{\n // labels: LabelTypes[];\n printers: Printer[];\n\n ui: {\n fetchingLabels: boolean;\n fetchingPrinters: boolean;\n errorLabels: null | string;\n errorPrinters: null | string;\n requestingLabel: boolean;\n errorLabelRequest: null | string;\n }\n}\n\nconst initialState: State = \n{\n // labels: [],\n printers: [],\n ui: {\n fetchingLabels: false,\n fetchingPrinters: false,\n errorLabels: null,\n errorPrinters: null,\n errorLabelRequest: null,\n requestingLabel: false,\n }\n};\n\nconst reducer = (state = initialState, action: LabelActions): State => produce(state, () => \n{\n if(action.type === \"FETCH_PRINTER_LIST\")\n {\n state.ui.fetchingPrinters = true;\n state.ui.errorPrinters = null;\n return;\n }\n\n if(action.type === \"FETCH_PRINTER_LIST_SUCCESS\")\n {\n state.ui.fetchingPrinters = false;\n state.printers = action.printers;\n return;\n }\n\n if(action.type === \"FETCH_PRINTER_LIST_FAILURE\")\n {\n state.ui.fetchingPrinters = false;\n state.ui.errorPrinters = action.error.toString();\n return;\n }\n\n if(action.type === \"FETCH_LABEL_TYPES\")\n {\n state.ui.fetchingLabels = true;\n state.ui.errorLabels = null;\n return;\n }\n\n // if(action.type === \"FETCH_LABEL_TYPES_SUCCESS\")\n // {\n // state.ui.fetchingLabels = false;\n // state.labels = action.labels;\n // return;\n // }\n\n // if(action.type === \"FETCH_LABEL_TYPES_FAILURE\")\n // {\n // state.ui.fetchingLabels = false;\n // state.ui.errorLabels = action.error.toString();\n // return;\n // }\n\n if(action.type === \"REQUEST_LABEL_PRINT\")\n {\n state.ui.requestingLabel = true;\n state.ui.errorLabelRequest = null;\n return;\n }\n\n if(action.type === \"REQUEST_LABEL_PRINT_SUCCESS\")\n {\n state.ui.requestingLabel = false;\n return;\n }\n\n if(action.type === \"REQUEST_LABEL_PRINT_FAILURE\")\n {\n state.ui.requestingLabel = false;\n state.ui.errorLabelRequest = action.error.toString();\n return;\n }\n\n if(action.type === \"INIT_LABEL_STATE\")\n {\n state.ui = { ...initialState.ui };\n return;\n }\n\n});\n\n// export const getLabelPrinters = (state: State) => state.printers;\n// export const getLabelTypes = (state: State) => state.labels;\n// export const getLabelPrintersLoading = (state: State) => state.ui.fetchingPrinters;\n// export const getLabelTypesLoading = (state: State) => state.ui.fetchingLabels;\n// export const getLabelTypesError = (state: State) => state.ui.errorLabels;\n// export const getLabelPrintersError = (state: State) => state.ui.errorPrinters;\n// export const getLabelRequestActive = (state: State) => state.ui.requestingLabel;\n// export const getLabelRequestError = (state: State) => state.ui.errorLabelRequest;\n\nexport default reducer;","import { StockRelocationCommitSuccessAction, StockRelocationCommitFailureAction } from \"../action/relocation\";\nimport {produce } from \"immer\";\nimport i18n from \"es2015-i18n-tag\";\n\nexport interface Notification\n{\n id: string;\n message: string;\n source: \"server\" | \"client\";\n severity: \"warning\" | \"error\" | \"success\";\n}\n\nexport interface State\n{\n notifications: Notification[];\n}\n\nconst initialState: State = { notifications: [] };\n\ntype Actions = \n | StockRelocationCommitSuccessAction\n | StockRelocationCommitFailureAction\n | { type: \"NOTIFICATIONS_CLEAR\" }\n ;\n\n\nexport default (state = initialState, action: Actions ): State => produce(state, draft => {\n\n if (action.type === \"STOCK_RELOCATION_COMMIT_SUCCESS\")\n {\n draft.notifications.push({\n id: \"relocation_success\",\n message: i18n`Item was successfully moved`,\n severity: \"success\",\n source: \"server\"\n });\n }\n\n if (action.type === \"STOCK_RELOCATION_COMMIT_FAILURE\")\n {\n draft.notifications.push({\n id: \"relocation_failed\",\n message: action.message,\n severity: \"error\",\n source: \"server\"\n });\n }\n\n if (action.type === \"NOTIFICATIONS_CLEAR\")\n {\n if (draft.notifications.length > 0)\n {\n draft.notifications = [];\n }\n }\n});\n\nexport const getModuleNotifications = (state: State) => state.notifications;\n","import inventory from \"./inventory\";\nimport relocation from \"./relocation\";\nimport label from \"./label\";\nimport module from \"./module\";\nimport { combineReducers } from \"redux\";\n\nimport {\n getCurrentWarehouse as getInventoryCurrentWarehouse_,\n getDrafts as getInventoryDrafts_,\n getCurrentItem as getInventoryCurrentItem_,\n getScannedItem as getInventoryScannedItem_,\n getScannedLocation as getInventoryScannedLocation_,\n getPreviousLocaiton as getInventoryPreviousLocation_,\n getPendingItems as getInventoryPendingItems_,\n getIsLoadingItem as getInventoryIsLoadingItem_,\n getIsUpdatingItem as getInventoryIsUpdatingItem_,\n getNotifications as getInventoryNotifications_\n} from \"./inventory\";\n\nimport {\n getCurrentItem as getCurrentItem_,\n getRelocationRequest as getRelocationRequest_\n} from \"./relocation\";\n\nimport {\n getModuleNotifications as getModuleNotifications_\n} from \"./module\"\nimport { StockAction } from \"../action\";\n\nconst busy = (state: boolean = false, action: StockAction) =>\n{\n if(\"uiMeta\" in action && \"busy\" in action[\"uiMeta\"])\n {\n return !! action[\"uiMeta\"][\"busy\"];\n }\n\n switch(action.type)\n {\n case \"STOCK_FETCH_ITEM\":\n case \"STOCK_DRAFTS_LOAD\":\n case \"STOCK_UPDATE_ITEM\":\n case \"STOCK_FETCH_PENDING_ITEMS\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE\":\n return true;\n\n case \"STOCK_UPDATE_ITEM_FAILURE\":\n case \"STOCK_UPDATE_ITEM_SUCCESS\":\n case \"STOCK_FETCH_PENDING_ITEMS_SUCCESS\":\n case \"STOCK_FETCH_ITEM_FAILURE\":\n case \"STOCK_FETCH_ITEM_SUCCESS\":\n case \"STOCK_DRAFTS_LOAD_FAILURE\":\n case \"STOCK_DRAFTS_LOAD_SUCCESS\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE_FAILURE\":\n case \"STOCK_CONFIRM_LOCATION_COMPLETE_SUCCESS\":\n return false;\n\n default:\n return state;\n }\n}\n\nconst reducer = combineReducers({\n busy,\n inventory, \n relocation,\n label,\n module\n});\n\nexport type StockState = ReturnType;\n\n\nconst retarget = (fn: (s: TTarget) => TChild, selector: (s: TChild) => TResult) => \n (t: TTarget) => selector(fn(t));\n\nexport const getInventoryCurrentWarehouse = retarget((s: StockState) => s.inventory, getInventoryCurrentWarehouse_);\nexport const getInventoryDrafts = retarget((s: StockState) => s.inventory, getInventoryDrafts_);\nexport const getInventoryCurrentItem = retarget((s: StockState) => s.inventory, getInventoryCurrentItem_);\nexport const getInventoryScannedItem = retarget((s: StockState) => s.inventory, getInventoryScannedItem_);\nexport const getInventoryScannedLocation = retarget((s: StockState) => s.inventory, getInventoryScannedLocation_);\nexport const getInventoryPreviousLocation = retarget((s: StockState) => s.inventory, getInventoryPreviousLocation_);\nexport const getInventoryPendingItems = retarget((s: StockState) => s.inventory, getInventoryPendingItems_);\nexport const getInventoryIsLoadingItem = retarget((s: StockState) => s.inventory, getInventoryIsLoadingItem_);\nexport const getInventoryIsUpdatingItem = retarget((s: StockState) => s.inventory, getInventoryIsUpdatingItem_);\nexport const getInventoryNotifications = retarget((s: StockState) => s.inventory, getInventoryNotifications_);\n\nexport const getCurrentItem = retarget((s: StockState) => s.relocation, getCurrentItem_);\nexport const getRelocationRequest = retarget((s: StockState) => s.relocation, getRelocationRequest_);\n\nexport const getModuleNotifications = retarget((s: StockState) => s.module, getModuleNotifications_);\n\nexport const getIsBusy = ((s: StockState) => !!s.busy);\n\n// export const getLabelPrinters = retarget((s: StockState) => s.label, labelSelector.getLabelPrinters);\n// export const getLabelTypes = retarget((s: StockState) => s.label, labelSelector.getLabelTypes);\n// export const getLabelPrintersLoading = retarget((s: StockState) => s.label, labelSelector.getLabelPrintersLoading);\n// export const getLabelTypesLoading = retarget((s: StockState) => s.label, labelSelector.getLabelTypesLoading);\n// export const getLabelTypesError = retarget((s: StockState) => s.label, labelSelector.getLabelTypesError);\n// export const getLabelPrintersError = retarget((s: StockState) => s.label, labelSelector.getLabelPrintersError);\n// export const getLabelRequestActive = retarget((s: StockState) => s.label, labelSelector.getLabelRequestActive);\n// export const getLabelRequestError = retarget((s: StockState) => s.label, labelSelector.getLabelRequestError);\n\n\n\nexport default reducer;","import timeRecording, {\n getCheckinTypes as _getCheckinData\n} from \"../../modules/time-recording/state\";\nimport stockManagement from \"../../modules/stock-management/state\";\nimport { combineReducers } from \"redux\";\n\nconst reducer = combineReducers(\n{ \n timeRecording, stockManagement,\n _version: (state = 0) => state\n});\ntype CombinedState = ReturnType;\n\nexport type Module = keyof CombinedState;\n\nexport const getCheckinData = (state: CombinedState) => _getCheckinData(state.timeRecording);\n\nexport default reducer;\n","import { combineReducers } from \"redux\";\nimport ui from \"./ui\";\nimport user from \"./user\";\nimport module from \"./module\";\n\nconst rootReducer = combineReducers({\n ui,\n user,\n module\n});\n\nexport type RootState = ReturnType;\n\nexport default rootReducer;","import { offline } from \"@redux-offline/redux-offline\";\nimport offlineConfig from \"@redux-offline/redux-offline/lib/defaults\";\nimport { OfflineAction } from \"@redux-offline/redux-offline/lib/types\";\n\nimport { createStore, applyMiddleware, compose } from \"redux\";\nimport { createTransform } from \"redux-persist\";\nimport thunkMiddleware from \"redux-thunk\";\nimport { createLogger } from \"redux-logger\";\n// import { persistReducer, PersistConfig, persistStore, Storage } from \"redux-persist\";\n// import _storage from \"redux-persist/lib/storage\";\n\nimport rootReducer from \"./reducers\";\nimport auth from \"../service/auth\";\nimport Api from \"../api/api\";\n\nexport interface Effect\n{\n username: string;\n url: string;\n method?: string;\n body?: any\n}\n\ninterface DiscardError\n{\n username?: string;\n status?: number;\n}\n\nofflineConfig.discard = (error: DiscardError, _action: OfflineAction, _retries: number) =>\n{\n if(error.username !== undefined)\n {\n return false;\n }\n if(error.status !== undefined)\n {\n return (400 <= error.status) && (error.status < 500); // discard on client errors\n }\n return true;\n};\n\nofflineConfig.effect = ({username, url, method = \"GET\", body}: Effect) =>\n auth.username === username \n ? Api.request(url, method, body).then(res => res.ok ? Promise.resolve() : Promise.reject({ status: res.status }))\n : Promise.reject({ username });\n\n\nconst logger = createLogger({ collapsed: true });\nexport default (stateVersion: number) => \n{\n const upgradeTransform = createTransform(\n (inState: object, key) => { \n if(key === \"module\")\n {\n return { ...inState, _version: stateVersion };\n }\n return inState;\n },\n (outState: any, key) => \n { \n if(key === \"module\" && (outState._version === undefined || outState._version < stateVersion))\n {\n console.info(\"Module state cleared for upgrade\");\n return undefined;\n }\n return outState;\n }\n );\n\n const store = createStore(rootReducer,\n compose(\n applyMiddleware(\n thunkMiddleware,\n logger\n ),\n offline({ ...offlineConfig, persistOptions: { transforms: [upgradeTransform] }})\n )\n );\n\n return { store }\n}","import { RootState } from \".\";\n\nimport {\n isLoggedIn as isLoggedIn_,\n getUsername as getUsername_,\n getLoginPending as getLoginPending_,\n getLoginFailed as getLoginFailed_,\n getUserRoles as getUserRoles_\n} from \"./user\"\n\nimport { \n getDrawerOpenState as getDrawerOpenState_,\n isBusy as isBusy_\n} from \"./ui\";\n\n\n\n// ui\nexport const isBusy = (state: RootState) => isBusy_(state.ui);\nexport const getDrawerOpenState = (state: RootState) => getDrawerOpenState_(state.ui);\n\n// user\nexport const getUsername = (state: RootState) => getUsername_(state.user);\nexport const isLoggedIn = (state: RootState) => isLoggedIn_(state.user);\nexport const getLoginPending = (state: RootState) => getLoginPending_(state.user);\nexport const getLoginFailed = (state: RootState) => getLoginFailed_(state.user);\nexport const getUserRoles = (state: RootState) => getUserRoles_(state.user);\n\n// module\nexport const getModuleState = (state: RootState) => state.module;\n","import createStore from \"./configureStore\";\n\n// increment this constant when the state tree is reorganized/refactorered\n// this will clear the state on upgrades (module-state only)\nconst STATE_VERSION = 2;\n\nconst { store } = createStore(STATE_VERSION);\n\nexport { store };\nexport * from \"./reducers\";\nexport * from \"./actions\";\n","import * as React from \"react\"\nimport Typography from \"@material-ui/core/Typography\";\n\nexport interface Props\n{\n}\n\n\nclass Overview extends React.Component\n{\n render()\n {\n return (\n
\n \n Welcome to Guldmann Mobility\n \n \n Open the menu in the upper left corner to \n start using the app.\n \n
\n );\n }\n}\n\nexport default Overview;","import * as React from \"react\";\nimport { Reducer, createStore, compose, applyMiddleware, Store } from \"redux\";\nimport thunkMiddleware from \"redux-thunk\";\nimport { createLogger } from \"redux-logger\";\n\nimport { offline } from \"@redux-offline/redux-offline\";\nimport offlineConfig from \"@redux-offline/redux-offline/lib/defaults\";\nimport { OfflineAction } from \"@redux-offline/redux-offline/lib/types\";\nimport { createTransform } from \"redux-persist\";\n\nimport auth from \"../service/auth\";\nimport Api from \"../api/api\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ModuleProps } from \"./config\";\nimport { Provider } from \"react-redux\";\n\nexport interface Effect\n{\n username: string;\n url: string;\n method?: string;\n body?: any\n}\n\ninterface DiscardError\n{\n username?: string;\n status?: number;\n}\n\nconst createOfflineStoreEnhancer = (key: string, stateVersion: number, options: PersistConfig) =>\n{\n const config = \n {\n ...offlineConfig,\n discard: (error: DiscardError, _action: OfflineAction, _retries: number) =>\n {\n if(error.username !== undefined)\n {\n return false;\n }\n if(error.status !== undefined)\n {\n return (400 <= error.status) && (error.status < 500); // discard on client errors\n }\n return true;\n },\n\n effect: ({username, url, method = \"GET\", body}: Effect, action: OfflineAction) =>\n auth.username === username \n ? Api.request(url, method, body).then(res => res.ok ? Promise.resolve() : Promise.reject({ status: res.status }))\n : Promise.reject({ username })\n };\n\n const upgradeTransform = createTransform(\n (inState: object, key) => { \n if(key === \"module\")\n {\n return { ...inState, _version: stateVersion };\n }\n return inState;\n },\n (outState: any, key) => \n { \n if(key === \"module\" && (outState._version === undefined || outState._version < stateVersion))\n {\n console.info(\"Module state cleared for upgrade\");\n return undefined;\n }\n return outState;\n }\n );\n return offline({ ...config, persistOptions: { \n keyPrefix: `reduxPersist_${key}`,\n transforms: [upgradeTransform],\n ...options\n }});\n}\n\ninterface PersistConfig\n{\n whitelist?: string[];\n blacklist?: string[];\n}\n\nexport const createModuleStore = (reducer: Reducer, moduleKey: string, version: number, options: PersistConfig = {}) =>\n{\n const middleware = applyMiddleware(\n thunkMiddleware,\n createLogger({ collapsed: true })\n );\n\n return createStore(reducer, compose(\n middleware,\n createOfflineStoreEnhancer(moduleKey, version, options)\n ));\n}\n\nexport const createModule = & ModuleProps>(store: Store, App: React.ComponentType

) => \n (props: P) => (\n \n \n \n );\n \n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { Event, TimeRecordingState, getActivityTypes, getElementTypes, ManualEntryEvent, getAbsenceTypes } from \"../state\";\n\nimport green from \"@material-ui/core/colors/green\";\n\nimport List from \"@material-ui/core/List\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport IconButton from \"@material-ui/core/IconButton\";\n\nimport ShoppingCart from \"@material-ui/icons/ShoppingCart\";\nimport Receipt from \"@material-ui/icons/Receipt\";\nimport Flag from \"@material-ui/icons/Flag\";\nimport MoreHoriz from \"@material-ui/icons/MoreHoriz\";\n\ninterface Props\n{\n currentEvent?: Event;\n events: Event[];\n currentTitle?: string;\n restTitle?: string;\n getSecondaryText?: (event: Event) => string;\n secondaryAction?: (event: Event) => typeof ListItemSecondaryAction;\n // itemContextMenu?: (event: Event) => Menu\n}\n\nconst mapStateToProps = (state: TimeRecordingState) => ({\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state),\n absenceTypes: getAbsenceTypes(state)\n});\n\nexport const formatEventTime = (event: Event) => i18n`${new Date(new Date(event.date))}:t(t)`;\n\nclass EventList extends React.Component>\n{\n private getEventIcon(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_ORDER\":\n return ;\n case \"ACTIVITY_OTHER\":\n return ;\n case \"ACTIVITY_PROJECT\":\n return ;\n default:\n return \"C\";\n }\n }\n\n private formatEventTitle(event: Event | ManualEntryEvent)\n {\n switch(event.type)\n {\n case \"ACTIVITY_OTHER\":\n const activity = this.props.activityTypes.find(a => a.id === event.activityType);\n return activity ? activity.label : event.activityType;\n case \"ACTIVITY_ORDER\":\n return `Order ${event.orderNo}`;\n case \"ACTIVITY_PROJECT\":\n const elementType = this.props.elementTypes.find(e => e.id === event.elementType);\n return elementType ? elementType.label : event.elementType;\n case \"ABSENCE\":\n const absenceType = this.props.absenceTypes.find(e => e.id === event.absence);\n return absenceType ? absenceType.label : i18n`Absence`;\n default:\n return \"[TODO:TITLE]\";\n }\n }\n\n render()\n {\n const { \n currentEvent: current, events, restTitle, currentTitle,\n getSecondaryText = formatEventTime,\n secondaryAction: getSecondaryAction\n } = this.props;\n return (\n \n {\n currentTitle ? {currentTitle} : null\n }\n {\n (current !== undefined) ? (\n \n \n {this.getEventIcon(current)}\n \n \n \n \n \n \n \n \n ) : null\n }\n {\n (events.filter(e => e !== current).length > 0) ? (\n <>\n {\n restTitle ? {restTitle} : null\n }\n {\n events.map(event => (\n \n {this.getEventIcon(event)}\n { getSecondaryAction ? getSecondaryAction(event) : null }\n \n \n ))\n }\n \n ) : null\n }\n \n )\n }\n}\n\nexport default connect(mapStateToProps)(EventList);","import * as React from \"react\";\nimport TextField, { TextFieldProps } from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport CalendarIcon from \"mdi-material-ui/Calendar\";\n\nfunction DateTitle(props: TextFieldProps)\n{\n return (\n \n \n )\n }}> {props.value}\n );\n}\n\nexport default DateTitle;","import * as React from \"react\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Button from \"@material-ui/core/Button\";\n\nimport red from \"@material-ui/core/colors/red\";\n\ninterface AlertDialogProps\n{\n open?: boolean;\n onConfirm?: React.ReactEventHandler;\n onHandleClose?: React.ReactEventHandler;\n}\n\nfunction AlertDialog(props: AlertDialogProps)\n{\n const { open, onConfirm, onHandleClose } = props;\n return (\n \n {\"Delete event?\"}\n \n \n Are you sure you want to delete the event? It is not possible to undo.\n \n \n \n \n \n \n \n )\n}\n\nexport type Props = AlertDialogProps;\nexport default AlertDialog;","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport DeleteIcon from \"@material-ui/icons/Delete\"\n\nimport { ManualEntryEvent } from \"../../state\";\n\nexport function DeleteAction(props: { event: ManualEntryEvent, onClick?: (event: ManualEntryEvent) => void })\n{\n const { event, onClick } = props;\n\n const clickHandler = useMemo(() =>\n onClick ? () => onClick(event) : undefined\n , [event, onClick]);\n\n return (\n \n \n \n \n \n );\n}\n","import * as React from \"react\";\nimport { findDOMNode } from \"react-dom\";\nimport { useState, useCallback, useMemo } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { ManualEntryEvent, JobActivity, JobElement, Absence } from \"../../state\";\nimport { generateUuid } from \"../../../../util/uuid\";\n\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport TextField from \"@material-ui/core/TextField\";\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport withMobileDialog, { InjectedProps } from '@material-ui/core/withMobileDialog';\n\nexport interface Props\n{\n date: string;\n username: string;\n elementTypes: JobElement[];\n activityTypes: JobActivity[];\n absenceTypes: Absence[];\n onAddEntry: (entry: ManualEntryEvent) => void;\n onCancel: () => void;\n}\n\ninterface AddFormProps\n{\n entry: ManualEntryEvent;\n onChange: (entry: ManualEntryEvent) => void;\n}\n\nconst isValidNumber = (q: number | undefined): q is number => q !== undefined && !isNaN(q);\n\nconst fieldStyle: React.CSSProperties = { marginTop: 16 };\n\nfunction useOutlinedSelect(): [(input: InputLabel) => void, JSX.Element]\n{\n const [labelWidth, setLabelWidth] = useState(0);\n const ref = useCallback((label: InputLabel) => {\n const node = findDOMNode(label) as HTMLLabelElement;\n if(node !== null)\n {\n setLabelWidth(node.getBoundingClientRect().width);\n }\n }, []);\n \n const input = useMemo(() => , [labelWidth]);\n return [ref, input];\n}\n\ninterface OrderFormProps extends AddFormProps\n{\n elementTypes: JobElement[];\n}\n\nfunction AddOrderForm(props: OrderFormProps)\n{\n const { entry, onChange, elementTypes } = props;\n const [ref, input] = useOutlinedSelect();\n\n const onOrderNumberChange = (e: React.ChangeEvent) => onChange({ ...entry, orderNo: parseInt(e.target.value) });\n const onElementNumberChange = (e: React.ChangeEvent) => onChange({ ...entry, elementNumber: parseInt(e.target.value) });\n const onTypeFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, elementType: e.target.value, quantity: 0 });\n\n return (\n <>\n \n \n \n {i18n`Type`}\n \n \n onChange({...entry, quantity: parseInt(e.target.value)})} \n InputProps={{\n endAdornment: {\n (entry.elementType === \"122\") ? \"km\" : \n (entry.elementType === \"120\") ? \"min\" : \"\"\n },\n }}\n />\n \n );\n}\n\nfunction AddOtherForm(props: AddFormProps & { activityTypes: JobActivity[] })\n{\n const { entry, onChange, activityTypes } = props;\n const [ref, input] = useOutlinedSelect();\n const onSelectFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, activityType: e.target.value });\n const onDurationFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, quantity: parseInt(e.target.value) })\n\n return (\n <>\n \n {i18n`Type`}\n \n \n min,\n }}\n />\n \n );\n}\n\ninterface AddAbsenceProps extends AddFormProps\n{\n absenceTypes: Absence[];\n}\n\nfunction AddAbsence(props: AddAbsenceProps)\n{\n const { entry, onChange, absenceTypes } = props;\n const [ref, input] = useOutlinedSelect();\n \n const onSelectFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, absence: e.target.value });\n const onQuantityFieldChange = (e: React.ChangeEvent) => onChange({ ...entry, quantity: parseInt(e.target.value) });\n\n return (\n <>\n \n {i18n`Activity`}\n \n \n Kg,\n // }}\n />\n );\n}\n\nconst isEntryValid = (entry: ManualEntryEvent) => \n (isValidNumber(entry.quantity) && entry.quantity > 0)\n && ((entry.type === \"ACTIVITY_ORDER\" && entry.orderNo !== undefined && entry.orderNo !== undefined && !isNaN(entry.orderNo))\n || (entry.type === \"ACTIVITY_OTHER\" && entry.activityType !== undefined)\n || (entry.type === \"ABSENCE\" && entry.absence !== undefined && isValidNumber(entry.quantity))\n );\n //|| (entry.type === \"ACTIVITY_PROJECT\" && entry.elementType !== undefined));\n\nexport function AddDialog(props: Props & InjectedProps)\n{\n const { elementTypes, activityTypes, fullScreen, absenceTypes } = props;\n const [ref, input] = useOutlinedSelect();\n const [entry, setEntry] = useState({\n id: generateUuid(),\n type: \"ACTIVITY_ORDER\",\n day: props.date,\n deleted: false,\n username: props.username\n });\n\n return (\n

\n {i18n`Add Entry`}\n \n \n {i18n`Type`}\n \n \n {\n (entry.type === \"ACTIVITY_ORDER\") ? (\n \n ) : (entry.type === \"ACTIVITY_OTHER\") ? (\n \n ) : (entry.type === \"ABSENCE\") ? (\n \n ) : null\n }\n\n \n \n \n \n \n \n );\n}\n\nexport default withMobileDialog()(AddDialog);","import * as React from \"react\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport { ChangeEvent } from \"react\";\n\nexport interface Props \n{\n title?: string;\n name?: string;\n required?: boolean;\n\n value?: string;\n onChange?: (value: string) => void;\n}\n\ninterface State\n{\n value: string;\n}\n\nclass RadioButtonGroup extends React.Component\n{\n\n private handleChange = (event: ChangeEvent) => \n {\n if(this.props.onChange)\n {\n this.props.onChange(event.currentTarget.value);\n }\n };\n\n render() {\n const c1: any = \"fieldset\";\n const c2: any = \"legend\";\n const { title, name, value, required = false } = this.props;\n return (\n \n {title}\n \n {this.props.children}\n \n \n )\n }\n}\n\nexport default RadioButtonGroup;","import * as React from \"react\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Radio from \"@material-ui/core/Radio\";\n\nexport interface Props\n{\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nclass RadioButton extends React.Component\n{\n render()\n {\n return (\n } />\n )\n }\n}\n\nexport default RadioButton;","\nexport const formatDate = (date: Date = new Date()) =>\n date.toISOString();","import { CheckinEvent, OtherActivityEvent, OrderActivityEvent, ProjectActivityEvent } from \"../state\";\nimport { formatDate } from \"../../../util/date\";\nimport { generateUuid } from \"../../../util/uuid\";\n\nexport const EVENT_TYPE_CHECK_IN = \"CHECK_IN\";\n\nexport const checkIn = (username: string, absence?: string, id = generateUuid(), date = formatDate()): CheckinEvent => ({\n type: EVENT_TYPE_CHECK_IN,\n id,\n date, \n username,\n transactionId: \"\",\n absence\n});\n\nexport const createOtherActivityEvent = (username: string, transactionId: string, activityType: string, id = generateUuid(), date = new Date().toISOString()): OtherActivityEvent => ({\n type: \"ACTIVITY_OTHER\",\n id,\n date,\n username,\n transactionId,\n activityType\n});\n\nexport const createOrderActivityEvent = (username: string, transactionId: string, orderNo: string, id = generateUuid(), date = new Date().toISOString()): OrderActivityEvent => ({\n type: \"ACTIVITY_ORDER\",\n id,\n date,\n username,\n transactionId,\n orderNo\n});\n\nexport const createProjectActivityEvent = (username: string, transactionId: string, elementType: string, id = generateUuid(), date = new Date().toISOString()): ProjectActivityEvent => ({\n type: \"ACTIVITY_PROJECT\",\n id,\n date,\n username,\n transactionId,\n elementType\n});\n","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\"\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport styled from \"styled-components\";\nimport RadioButtonGroup from \"../../../components/RadioButtonGroup\";\nimport RadioButton from \"../../../components/RadioButton\";\nimport { getCheckinTypes, getAbsenceTypes, CheckinEvent, getCurrentTransaction, TimeRecordingState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { checkIn } from \"../events\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends ReturnType, RouteComponentProps\n{\n username: string;\n onCheckin?: (username: string, event: CheckinEvent) => void;\n}\n\nconst Block = styled.div`\n padding: 16px;\n margin-top: 16px;\n`;\n\nconst ButtonBar = styled.div`\n margin-top: 32px;\n`;\n\ninterface State\n{\n checkin?: string;\n absence?: string;\n}\n\nclass CheckInOut extends React.Component\n{\n state: State = \n {\n absence: \"__NONE__\"\n }\n \n private onCheckinChange = (checkin: string) =>\n {\n this.setState({ checkin });\n }\n\n private onAbsenceChange = (e: React.ChangeEvent) =>\n {\n this.setState({ absence: e.target.value });\n }\n\n private onCheckinClick = () =>\n {\n if(this.state.checkin !== undefined)\n {\n const { absence } = this.state;\n const { username } = this.props;\n const event = checkIn(username, absence === \"__NONE__\" ? undefined : absence);\n if(this.props.onCheckin !== undefined)\n {\n this.props.onCheckin(username, event);\n }\n }\n }\n\n render()\n {\n const { transactionType, absenceType } = this.props;\n const { checkin } = this.state;\n const c2: any = \"fieldset\";\n return (\n \n \n {\n transactionType.filter(t => t.type === \"in\").map(t => (\n \n ))\n }\n \n \n {i18n`Absence`}\n \n \n \n \n\n \n \n \n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: {username: string}) => {\n return ({\n transactionType: getCheckinTypes(state),\n absenceType: getAbsenceTypes(state),\n transaction: getCurrentTransaction(ownProps.username, state)\n });\n};\n\nexport default connect(mapStateToProps)(CheckInOut);","import * as React from \"react\";\n\nconst UsernameContext = React.createContext(undefined);\nexport default UsernameContext;\n","import * as React from \"react\" ;\nimport { useState, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { useCallback } from \"react\";\nimport { Dialog, Toolbar, IconButton, Typography } from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { CheckinEvent } from \"../../state\";\nimport CheckinForm from \"../CheckinForm\";\nimport UsernameContext from \"../../../../context/UsernameContext\";\n\nexport interface Props \n{\n onClose?: () => void;\n onCheckin?: (info: CheckinEvent) => void;\n}\n\nfunction CheckinDialog(props: Props)\n{\n const { onClose, onCheckin } = props;\n const [open, setOpen]= useState(true);\n const username = React.useContext(UsernameContext);\n const onCheckinCallback = useCallback((username: string, event: CheckinEvent) => {\n if(onCheckin !== undefined)\n {\n onCheckin(event);\n }\n }, [onCheckin]);\n\n useEffect(() => () => setOpen(false), []);\n\n console.log(\"checkinDialog: render\");\n\n return (\n \n \n \n \n \n \n {i18n`Check In`}\n \n \n \n \n )\n}\n\nexport default CheckinDialog;","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport dayjs from \"dayjs\";\nimport DayjsUtils from \"@date-io/dayjs\";\nimport leftPad from \"left-pad\";\nimport { withStyles } from '@material-ui/core/styles';\nimport Fab from \"@material-ui/core/Fab\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport AlarmIcon from \"@material-ui/icons/Alarm\";\n\nimport { DatePicker, MuiPickersUtilsProvider } from \"material-ui-pickers\";\nimport { getManualEntries, TimeRecordingState, ManualEntryEvent, getActivityTypes, getElementTypes, getAbsenceTypes, CheckinEvent } from \"../state\";\n\nimport EventList from \"../components/EventList\";\n\nimport DateTitle from \"./Manuel/DateTitle\";\nimport AlertDialog from \"./Manuel/AlertDialog\";\nimport { DeleteAction } from \"./Manuel/DeleteAction\";\nimport { ModuleProps } from \"../../config\";\nimport { addManualTimeEntry, deleteManuelTimeEntry, fetchManualTimeEntries } from \"../state/action\";\nimport AddDialog from \"./Manuel/AddDialog\";\nimport i18n from \"es2015-i18n-tag\";\nimport CheckinDialog from \"./Manuel/CheckinDialog\";\n\nconst styles = (theme: any) => ({\n root: {\n // ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n } as any,\n picker: {\n ...theme.mixins.gutters()\n },\n fab: {\n position: 'absolute',\n bottom: theme.spacing.unit * 2,\n right: theme.spacing.unit * 2,\n } as any\n});\n\ninterface Props extends ModuleProps\n{\n classes: ReturnType\n}\n\ninterface State\n{\n date: dayjs.Dayjs;\n eventToDelete?: ManualEntryEvent;\n addEvent: boolean;\n checkin: boolean;\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => ({\n entries: ownProps.username ? getManualEntries(state, ownProps.username) : undefined,\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state),\n absenceTypes: getAbsenceTypes(state)\n});\n\nconst mapDispatchToProps = (dispatch: any, { username }: Props) => ({\n addEntry: (entry: ManualEntryEvent) => username ? dispatch(addManualTimeEntry(username, entry)) : false,\n deleteEntry: (entry: ManualEntryEvent) => username ? dispatch(deleteManuelTimeEntry(username, entry.id)) : false,\n fetchEntries: () => username ? dispatch(fetchManualTimeEntries(username)) : false\n});\n\ntype StateProps = ReturnType & ReturnType;\n\nclass Manuel extends React.Component\n{\n state: State = { date: dayjs().startOf(\"day\"), addEvent: false , checkin: false };\n\n componentWillMount()\n {\n this.props.fetchEntries();\n }\n\n private onDeleteClick = (event: ManualEntryEvent) => \n {\n this.setState({ eventToDelete: event });\n }\n\n private onHandleDeleteCancel = () => this.setState({ eventToDelete: undefined });\n\n private onHandleDelete = () => \n {\n const e = this.state.eventToDelete;\n if (e !== undefined)\n {\n this.props.deleteEntry(e);\n }\n this.setState({ eventToDelete: undefined });\n }\n\n private onHandleAddCancel = () => this.setState({ addEvent: false });\n\n private onHandleAdd = (entry: ManualEntryEvent) => \n {\n this.props.addEntry(entry);\n this.setState({ addEvent: false });\n };\n\n private formatDuration = (duration: number) => \n `${Math.floor(duration / 60)}:${leftPad(duration % 60, 2, \"0\")}`;\n\n private getSecondaryText = (entry: ManualEntryEvent) =>\n (entry.type === \"ABSENCE\" && entry.quantity !== undefined) ? i18n`Quantity: ` + entry.quantity :\n (entry.quantity !== undefined) ? this.formatDuration(entry.quantity) : \"\";\n\n private onCheckin = (info: CheckinEvent) =>\n {\n const { transactionId, date, ...rest } = info;\n const entry: ManualEntryEvent = {\n ...rest,\n day: dayjs(this.state.date).format() ,\n deleted: false\n };\n this.props.addEntry(entry);\n }\n\n render()\n {\n const { eventToDelete, date, addEvent, checkin } = this.state;\n const { classes, entries = [], activityTypes, elementTypes, absenceTypes, username = \"\" } = this.props;\n const minDate = dayjs().subtract(30, \"day\").toDate();\n const maxDate = dayjs().add(5, \"day\").toDate();\n\n const now = dayjs(date).startOf(\"day\");\n const filteredEntries = entries.filter(entry => !entry.deleted && dayjs(entry.day).isSame(now));\n const isCheckedIn = filteredEntries.findIndex(e => e.type === \"CHECK_IN\") > -1;\n\n return (\n <>\n \n {\n (addEvent) ? (\n \n ) : null\n }\n {\n (!isCheckedIn && checkin) ? (\n \n ) : null\n }\n\n \n
\n
\n this.setState({ date })} TextFieldComponent={DateTitle} minDate={minDate} maxDate={maxDate} />\n
\n e.type !== \"CHECK_IN\")}\n getSecondaryText={(entry: ManualEntryEvent) => this.getSecondaryText(entry) }\n secondaryAction={(e: ManualEntryEvent) => } />\n { \n isCheckedIn ? (\n this.setState({ addEvent: true })}>\n \n \n ) : (\n this.setState({ checkin: true })}>\n \n \n )\n }\n
\n
\n \n );\n }\n}\n\nexport default withStyles(styles)(connect(mapStateToProps, mapDispatchToProps)(Manuel));\n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport { createOrderActivityEvent } from \"../../events\";\nimport { Event, getCurrentTransaction, TimeRecordingState } from \"../../state\";\nimport { transactionEventAdd } from \"../../state/action\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string;\n}\n\ninterface State\n{\n orderNo: string;\n}\n\nclass AddOrder extends React.Component\n{\n state: State = { orderNo: \"\" };\n\n private onOrderNumberChange = (e: React.ChangeEvent) => \n {\n this.setState({ orderNo: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { orderNo } = this.state;\n if(transaction !== undefined)\n {\n const event = createOrderActivityEvent(username, transaction.id, orderNo);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { orderNo } = this.state;\n\n return (\n
\n {i18n`Add Order Activity`}\n \n\n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n transaction: getCurrentTransaction(username, state)\n });\n};\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOrder);","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { Event, getCurrentTransaction, getElementTypes, TimeRecordingState } from \"../../state\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { transactionEventAdd } from \"../../state/action\";\nimport { createProjectActivityEvent } from \"../../events\";\nimport { RouteComponentProps } from \"react-router\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string; \n}\n\ninterface State\n{\n elementType: string;\n}\n\nclass AddOther extends React.Component\n{\n state: State = { elementType: \"\" };\n\n private onElementTypeChange = (e: React.ChangeEvent) => \n {\n this.setState({ elementType: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { elementType } = this.state;\n if(transaction !== undefined)\n {\n const event = createProjectActivityEvent(username, transaction.id, elementType);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { elementTypes } = this.props;\n const { elementType } = this.state;\n\n return (\n
\n {i18n`Add Project Activity`}\n \n {i18n`Choose Activity`}\n \n \n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n transaction: getCurrentTransaction(username, state),\n elementTypes: getElementTypes(state)\n });\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOther);","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { connect } from \"react-redux\";\nimport { getActivityTypes, Event, getCurrentTransaction, TimeRecordingState } from \"../../state\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { transactionEventAdd } from \"../../state/action\";\nimport { createOtherActivityEvent } from \"../../events\";\nimport { RouteComponentProps } from \"react-router\";\n\ntype StateProps = ReturnType & ReturnType;\n\nexport interface Props extends RouteComponentProps, StateProps\n{\n username: string;\n}\n\ninterface State\n{\n selectedActivity: string;\n}\n\nclass AddOther extends React.Component\n{\n state: State = { selectedActivity: \"\" };\n\n private onActivityChange = (e: React.ChangeEvent) => \n {\n this.setState({ selectedActivity: e.target.value });\n };\n\n private onAdd = () => \n {\n const { transaction, transactionEventAdd, username } = this.props;\n const { selectedActivity: activityType } = this.state;\n if(transaction !== undefined)\n {\n const event = createOtherActivityEvent(username, transaction.id, activityType);\n transactionEventAdd(event);\n }\n this.props.history.goBack();\n };\n\n private onCancel = () =>\n {\n this.props.history.goBack();\n }\n\n render()\n {\n const { activities } = this.props;\n const { selectedActivity } = this.state;\n\n return (\n
\n {i18n`Add Activity`}\n \n {i18n`Choose Activity`}\n \n \n
\n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: { username: string }) => \n{\n const username = ownProps.username;\n return ({\n activities: getActivityTypes(state),\n transaction: getCurrentTransaction(username, state),\n });\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n transactionEventAdd: (event: Event) => dispatch(transactionEventAdd(event))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddOther);","import * as React from \"react\"\nimport { connect } from \"react-redux\";\nimport i18n from \"es2015-i18n-tag\"\nimport styled from \"styled-components\";\nimport { Switch, RouteComponentProps, Route } from \"react-router\";\n\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport ShoppingCart from \"@material-ui/icons/ShoppingCart\";\nimport Receipt from \"@material-ui/icons/Receipt\";\nimport Flag from \"@material-ui/icons/Flag\";\nimport MoreHoriz from \"@material-ui/icons/MoreHoriz\";\nimport green from \"@material-ui/core/colors/green\";\n\nimport AddOrder from \"./AddOrder\";\nimport AddProject from \"./AddProject\";\nimport AddOther from \"./AddOther\";\nimport { getCurrentTransaction, Event, getActivityTypes, getElementTypes, TimeRecordingState } from \"../../state\";\n\nexport interface Props extends RouteComponentProps\n{\n username: string;\n}\n\ninterface State\n{\n newDialogOpen: boolean;\n}\n\nconst Block = styled.div`\n padding: 16px;\n min-height: 100vh;\n`;\n\nconst LowerRightButton = styled.div`\n position: fixed;\n bottom: ${56 + 16}px;\n right: 16px;\n`;\n\ntype ViewProps = { username: string } & RouteComponentProps;\n\ninterface View \n{\n urlPart: \"add-order\" | \"add-project\" | \"add-other\";\n view: React.ComponentType;\n icon: React.ComponentType;\n label: string;\n}\n\nconst views: View[] = [\n { urlPart: \"add-order\", label: i18n`Order`, view: AddOrder, icon: ShoppingCart },\n { urlPart: \"add-project\", label: i18n`Project`, view: AddProject, icon: Receipt },\n { urlPart: \"add-other\", label: i18n`Other`, view: AddOther, icon: Flag },\n]\n\nclass CurrentJob extends React.Component\n{\n state: State =\n {\n newDialogOpen: false\n }\n\n private onNewDialogClose = () =>\n {\n this.setState({ newDialogOpen: false });\n }\n\n private onNewDialogChoose = (type: string) => () =>\n {\n this.props.history.push(this.props.match.url + \"/\" + type);\n this.setState({ newDialogOpen: false });\n }\n\n private onAddClick = () =>\n {\n this.setState({ newDialogOpen: true });\n }\n\n private renderNewDialog()\n {\n return (\n \n {/* {i18n`Select Type`} */}\n
\n \n {\n views.map(({urlPart, icon: Icon, label}) => (\n \n \n \n \n {label}\n \n ))\n }\n \n
\n
\n );\n }\n\n private getEventIcon(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_ORDER\":\n return ;\n case \"ACTIVITY_OTHER\":\n return ;\n case \"ACTIVITY_PROJECT\":\n return ;\n default:\n return \"C\";\n }\n }\n\n private formatEventTitle(event: Event)\n {\n switch(event.type)\n {\n case \"ACTIVITY_OTHER\":\n const activity = this.props.activityTypes.find(a => a.id === event.activityType);\n return activity ? activity.label : event.activityType;\n case \"ACTIVITY_ORDER\":\n return `Order ${event.orderNo}`;\n case \"ACTIVITY_PROJECT\":\n const elementType = this.props.elementTypes.find(e => e.id === event.elementType);\n return elementType ? elementType.label : event.elementType;\n default:\n return \"[TODO:TITLE]\";\n }\n }\n\n private formatEventTime(event: Event)\n {\n return i18n`${new Date(new Date(event.date))}:t(t)`;\n }\n\n private renderEventList()\n {\n const { transaction } = this.props;\n if(transaction !== undefined)\n {\n // pick out the events in reverse order\n // and filter out the CHECK_IN/CHECK_OUT events\n const [current, ...rest] = [...transaction.events]\n .filter(e => (e.type !== \"CHECK_IN\") && (e.type !== \"CHECK_OUT\"))\n .reverse();\n\n return (\n \n {i18n`Current activity`}\n {\n (current !== undefined) ? (\n \n \n {this.getEventIcon(current)}\n \n \n \n \n \n \n \n \n ) : (\n null\n )\n }\n {\n (rest.length > 0) ? (\n <>\n {i18n`Former activities`}\n {\n rest.map(event => (\n \n {this.getEventIcon(event)}\n \n \n ))\n }\n \n ) : (\n null\n )\n }\n \n );\n }\n\n }\n\n private renderViews()\n {\n const { match: { url } } = this.props;\n return (\n \n {\n views.map(({urlPart, view: View}) => (\n \n \n } />\n ))\n }\n \n <>\n {this.renderEventList()}\n \n \n \n \n \n \n \n \n )\n }\n\n render()\n {\n return (\n <>\n {this.renderNewDialog()}\n {this.renderViews()}\n \n );\n }\n}\n\ntype StateProps = ReturnType;\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => {\n const { username } = ownProps;\n return ({\n transaction: getCurrentTransaction(username, state),\n activityTypes: getActivityTypes(state),\n elementTypes: getElementTypes(state)\n });\n}\n\nexport default connect(mapStateToProps)(CurrentJob);","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\"\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Typography from \"@material-ui/core/Typography\";\nimport styled from \"styled-components\";\nimport RadioButtonGroup from \"../../../components/RadioButtonGroup\";\nimport RadioButton from \"../../../components/RadioButton\";\nimport { getCheckinTypes, getAbsenceTypes, getCheckin, CheckinEvent, getCurrentTransaction, TimeRecordingState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { transactionOpen, transactionClose } from \"../state/action\";\nimport { checkIn, EVENT_TYPE_CHECK_IN } from \"../events\";\nimport { Event } from \"../state\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends ReturnType, ReturnType, RouteComponentProps\n{\n username: string;\n}\n\nconst Block = styled.div`\n padding: 16px;\n margin-top: 16px;\n`;\n\nconst ButtonBar = styled.div`\n margin-top: 32px;\n`;\n\ninterface State\n{\n checkin?: string;\n absence?: string;\n}\n\nclass CheckInOut extends React.Component\n{\n state: State = \n {\n absence: \"__NONE__\"\n }\n \n private onCheckinChange = (checkin: string) =>\n {\n this.setState({ checkin });\n }\n\n private onAbsenceChange = (e: React.ChangeEvent) =>\n {\n this.setState({ absence: e.target.value });\n }\n\n private onCheckinClick = () =>\n {\n if(this.state.checkin !== undefined)\n {\n const { absence } = this.state;\n const { username } = this.props;\n const event = checkIn(username, absence === \"__NONE__\" ? undefined : absence);\n this.props.transactionOpen(username, event);\n }\n }\n\n private onCheckoutClick = () =>\n {\n const { transactionClose, transaction, username } = this.props;\n if(transaction)\n {\n transactionClose(username, transaction.id);\n }\n }\n\n private getCheckin(): CheckinEvent | undefined\n {\n const { transaction } = this.props;\n if(transaction)\n {\n return transaction.events.find(t => t.type === EVENT_TYPE_CHECK_IN) as CheckinEvent\n }\n }\n\n private renderCheckin()\n {\n const { transactionType, absenceType } = this.props;\n const { checkin } = this.state;\n const c2: any = \"fieldset\";\n return (\n \n \n {\n transactionType.filter(t => t.type === \"in\").map(t => (\n \n ))\n }\n \n \n {i18n`Absence`}\n \n \n \n \n\n \n \n \n \n );\n }\n\n private renderCheckout(checkin: CheckinEvent, events: Event[])\n {\n const { absenceType } = this.props;\n const absence = absenceType.find(a => a.id === checkin.absence);\n const absenceLabel = absence ? absence.label : i18n`None`;\n\n const lastActivityDate = (events.length > 0) \n ? new Date(events[events.length - 1].date)\n : new Date(checkin.date);\n\n return (\n \n \n {i18n`You are checked in`}\n \n\n {i18n`Check-in Time`}\n {i18n`${new Date(checkin.date)}`}\n\n {i18n`Absence`}\n {absenceLabel}\n\n {i18n`Last Activity`}\n {i18n`${lastActivityDate}`}\n\n\n \n \n \n \n );\n }\n\n render()\n {\n const { transaction} = this.props;\n const checkin = this.getCheckin();\n const view = (checkin === undefined) ? (\n this.renderCheckin()\n ) : (\n this.renderCheckout(checkin, transaction ? transaction.events : [])\n );\n\n\n return (\n <>\n {view}\n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: {username: string}) => {\n return ({\n transactionType: getCheckinTypes(state),\n absenceType: getAbsenceTypes(state),\n checkedIn: getCheckin(state),\n transaction: getCurrentTransaction(ownProps.username, state)\n });\n};\n\nconst mapDispatchToProps = (dispatch: any) => ({\n // checkinSetType: (type: string) => dispatch(checkinSetType(type)),\n transactionOpen: (username: string, event: CheckinEvent) => dispatch(transactionOpen(username, event)),\n transactionClose: (username: string, id: string) => dispatch(transactionClose(username, id))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckInOut);","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport styled from \"styled-components\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps, Route, Switch, Redirect } from \"react-router\";\n\nimport BottomNavigation from \"@material-ui/core/BottomNavigation\";\nimport BottomNavigationAction, { BottomNavigationActionProps} from \"@material-ui/core/BottomNavigationAction\";\nimport Alarm from \"@material-ui/icons/Alarm\";\nimport Assignment from \"@material-ui/icons/Assignment\";\n\nimport { getCurrentTransaction, TimeRecordingState } from \"../state\";\n\nimport CurrentJob from \"./CurrentJob\";\nimport CheckInOut from \"./CheckInOut\";\n\nimport { fetchTransactions } from \"../state/action\";\nimport { ModuleProps } from \"../../config\";\n\nconst MyBottomNavigation = styled(BottomNavigation)`\n bottom: 0;\n position: fixed;\n width: 100vw;\n` as any;\n\nconst MainView = styled.div`\n margin-bottom: 56px;\n min-height: calc(100vh - 112px);\n` ;\n\nexport interface Props extends ModuleProps\n{\n}\n\ntype StateProps = ReturnType & ReturnType;\n\ntype ViewType = \"activity\" | \"log\" | \"check-in-out\";\n\ntype ViewProps = { username: string } & RouteComponentProps;\n\ninterface View \n{\n urlPart: ViewType;\n view: React.ComponentType;\n icon: React.ComponentType;\n label: string;\n default?: boolean;\n props?: (props: Props & StateProps) => Partial;\n}\n\ninterface State\n{\n}\n\nclass Auto extends React.Component\n{\n componentWillMount()\n {\n this.props.fetchTransactions();\n }\n\n state: State =\n {\n currentView: \"check-in-out\"\n }\n\n private views: View[] = [\n { urlPart: \"check-in-out\", view: CheckInOut, icon: Alarm, label: i18n`Check In / Out`, default: true },\n { urlPart: \"activity\", view: CurrentJob, label: i18n`Activity`, icon: Assignment, props: ({transaction}) => ({ disabled: !transaction}) }\n // { urlPart: \"log\", view: Log, label: i18n`Log`, icon: PlaylistAddCheck, props: ({transaction}) => ({ disabled: !transaction}) }\n\n ];\n\n private onValueChange = (_event: React.ChangeEvent, value: ViewType) =>\n {\n this.props.history.replace(this.getPath(value));\n }\n\n private getPath(path: string)\n {\n return this.props.match.url + \"/\" + path;\n }\n\n private renderView() : React.ReactNode\n {\n const { username } = this.props;\n if(username === undefined)\n {\n return;\n }\n\n return (\n \n {\n this.views.map(({ urlPart, view: View }) => (\n } />\n ))\n }\n \n v.default)[0].urlPart)} />\n \n \n );\n }\n\n private getActiveView(): ViewType\n {\n const { location } = this.props;\n return this.views.map(view => view.urlPart)\n .find(urlPart => location.pathname.indexOf(this.getPath(urlPart)) === 0)\n || this.views[0].urlPart;\n }\n\n render()\n {\n return (\n <>\n \n {this.renderView()}\n \n \n {\n this.views.map(({label, icon: Icon, urlPart, props}) => (\n } value={urlPart} {...(props ? props(this.props) : {})} />\n ))\n }\n \n \n );\n }\n}\n\nconst mapStateToProps = (state: TimeRecordingState, ownProps: Props) => ({\n transaction: ownProps.username ? getCurrentTransaction(ownProps.username, state) : undefined\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n fetchTransactions: () => dispatch(fetchTransactions() as any)\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Auto); ","import * as React from \"react\";\nimport { ModuleProps } from \"../../config\";\nimport { Route, Switch, RouteComponentProps } from \"react-router\";\nimport { Button } from \"@material-ui/core\";\nimport i18n from \"es2015-i18n-tag\";\nimport Manuel from \"./Manuel\";\nimport Auto from \"./Auto\";\nimport UsernameContext from \"../../../context/UsernameContext\";\n\nexport interface Props extends ModuleProps\n{\n\n}\n\ntype NavigationButtonProps = { path: string, children: React.ReactChildren, style?: React.CSSProperties } & Pick, \"history\">;\n\nconst NavigationButton = ({ path, children, history, style }: NavigationButtonProps) => (\n \n);\n\nfunction Index(props: Props)\n{\n const urlAuto = `${props.match.url}/auto`;\n const urlManual = `${props.match.url}/manual`;\n return (\n \n \n (\n \n )}/>\n (\n \n )} />\n \n
\n {i18n`Standard`}\n {i18n`Manual Entry`}\n
\n
\n
\n
\n );\n}\n\nexport default Index;\n","import { createModuleStore, createModule } from \"../helper\";\n\nimport App from \"./views/Index\";\nimport reducer from \"./state\";\n\nconst store = createModuleStore(reducer, \"time_recording\", 1);\nconst TimeRecordingModule = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default TimeRecordingModule;\n","import i18n from \"es2015-i18n-tag\";\nimport Timer from \"@material-ui/icons/Timer\";\nimport TimeRecording from \".\";\nimport { Module } from \"../config\";\n\nconst config: Module =\n{\n title: i18n`Time Recording`, \n icon: Timer, \n component: TimeRecording, \n url: \"/time-recording\",\n roles: [\"mobility.time\"]\n}\n\nexport default config;\n","import styled, { keyframes }from \"styled-components\";\n\nconst kf = keyframes`\n 0% { opacity:1; }\n 50% { opacity:0; }\n 100% { opacity:1; }\n`;\n\ninterface Props\n{\n duration?: number;\n easing?: string;\n}\n\nconst SoftBlink = styled.div`\n animation: ${kf} ${props => (props.duration || 3) + \"s\"} infinite ${props => props.easing || \"ease-in-out\"};\n`;\n\nexport default SoftBlink;\n\n\n","\nexport type BarcodeType = \"container\" | \"item\" | \"location\" | \"unknown\";\n\nexport class Scanner\n{\n private scanHandle: number = -1;\n private scannedSymbols: string = \"\";\n private onSuccess: (barcode: string, type: BarcodeType) => void;\n private detectType: boolean;\n\n constructor(onSuccess: (barcode: string) => void);\n constructor(onSuccess: (barcode: string, type: BarcodeType) => void, detectType: true);\n constructor(onSuccess: (barcode: string, type: BarcodeType) => void, detectType = false)\n {\n this.onSuccess = onSuccess;\n this.detectType = detectType;\n window.addEventListener(\"keyup\", this.onKeyup);\n }\n\n destroy()\n {\n window.removeEventListener(\"keyup\", this.onKeyup);\n }\n\n private isContainer = (barcode: string | undefined) => (barcode !== undefined) && (barcode.length === 10) && (barcode.substr(0, 1).toUpperCase() === \"C\");\n\n private getBarcodeType(symbols: string): BarcodeType\n {\n if(this.isContainer(symbols))\n {\n return \"container\";\n }\n\n if((symbols.length === 28))\n {\n const control1 = symbols.substr(0, 2);\n const control2 = symbols.substr(16, 2);\n\n if(control1 === \"01\" && (control2 === \"10\" || control2 === \"21\"))\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 16)\n {\n const control1 = symbols.substr(0, 2);\n if(control1 === \"01\")\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 13)\n {\n const control1 = symbols.substr(0, 2);\n if(control1 === \"57\")\n {\n return \"item\";\n }\n }\n\n if(symbols.length === 6) // sku\n {\n return \"item\";\n }\n\n if(symbols.length === 9)\n {\n return \"location\";\n }\n \n return \"unknown\";\n }\n\n private onKeyup = (e: KeyboardEvent) => \n {\n const ch = e.key;\n window.clearTimeout(this.scanHandle);\n if(ch !== undefined && ch.length === 1)\n {\n this.scannedSymbols += e.shiftKey ? ch.toUpperCase() : ch;\n }\n this.scanHandle = window.setTimeout(this.scanTimeout, 200);\n }\n\n private scanTimeout = () =>\n {\n this.onSuccess(this.scannedSymbols, this.getBarcodeType(this.scannedSymbols));\n this.scannedSymbols = \"\";\n }\n}\n\n","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { RouteComponentProps } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport { getInventoryScannedItem, getInventoryScannedLocation, getInventoryIsLoadingItem, getInventoryCurrentItem, getInventoryIsUpdatingItem } from \"../../state\";\n\nimport scanIcon from \"../../icons/scan.svg\";\nimport SoftBlink from \"../../../../components/SoftBlink\";\nimport { stockScannedItem, stockScannedLocation, stockScannedClear, stockFetchItem, stockUpdateItem, stockFetchPendingItems, stockClearPreviousLocationAndItems, stockRevertLocation, stockConfirmLocationComplete } from \"../../state/action\";\nimport { Scanner } from \"../../../../util/scanner\";\nimport { TRACKING_SERIAL, TRACKING_BATCH, TRACKING_ORDINARY, apiCall } from \"../../api/StockApi\";\nimport RadioButtonGroup from \"../../../../components/RadioButtonGroup\";\nimport { StockState, getInventoryPreviousLocation, getInventoryPendingItems } from \"../../state/reducer\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Button from \"@material-ui/core/Button\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormLabel from \"@material-ui/core/FormLabel\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Input from \"@material-ui/core/Input\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport LinearProgress from \"@material-ui/core/LinearProgress\";\nimport Radio from \"@material-ui/core/Radio\";\nimport Check from \"@material-ui/icons/Check\";\nimport Close from \"@material-ui/icons/Close\";\nimport List from \"@material-ui/core/List\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormGroup from \"@material-ui/core/FormGroup\";\nimport Divider from \"@material-ui/core/Divider\";\nimport { RadioGroup, Table, TableHead, TableRow, TableCell, TableBody } from \"@material-ui/core\";\n\ninterface RouteParams {\n warehouse: string;\n draft: string;\n}\n\nexport interface Props extends RouteComponentProps {\n\n}\n\ninterface State {\n quantity: string;\n containerIsClosed?: string;\n confirmChecked: boolean;\n showAlreadyCountedDialog?: {\n result: ValidateResult;\n confirm: (action: \"cancel\" | \"add\" | \"overwrite\") => void;\n };\n action: string;\n}\n\ninterface ValidateResult {\n previouslyCounted: boolean;\n qty: number;\n date: string;\n addAllowed: boolean;\n draft: string;\n}\n\n\nconst mapStateToProps = (state: StockState) => ({\n scannedItem: getInventoryScannedItem(state),\n scannedLocation: getInventoryScannedLocation(state),\n previousLocation: getInventoryPreviousLocation(state),\n pendingItems: getInventoryPendingItems(state),\n loadingItem: getInventoryIsLoadingItem(state),\n updatingItem: getInventoryIsUpdatingItem(state),\n currentItem: getInventoryCurrentItem(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n scanItem: (item: string) => dispatch(stockScannedItem(item)),\n scanLocation: (location: string) => dispatch(stockScannedLocation(location)),\n scanClear: () => dispatch(stockScannedClear()),\n fetchItem: (draft: string, barcode: string, location: string, warehouse: string) => dispatch(stockFetchItem(draft, barcode, location, warehouse) as any),\n updateItem: (draftId: string, warehouse: string, barcode: string, location: string, quantity: number, sku: string) =>\n dispatch(stockUpdateItem(draftId, warehouse, barcode, location, quantity, sku) as any),\n fetchPendingItems: (warehouse: string, draft: string, location: string) =>\n dispatch(stockFetchPendingItems(warehouse, draft, location)),\n clearPreviousLocationAndItems: () => dispatch(stockClearPreviousLocationAndItems()),\n revertLocation: () => dispatch(stockRevertLocation()),\n confirmLocationComplete: (warehouse: string, draft: string, location: string) =>\n dispatch(stockConfirmLocationComplete(warehouse, draft, location))\n});\n\ntype StateProps = ReturnType & ReturnType;\n\nconst getTrackingTypeLabel = (n: number) =>\n (n === TRACKING_BATCH) ? i18n`Batch` :\n (n === TRACKING_SERIAL) ? i18n`Serial` :\n (n === TRACKING_ORDINARY) ? i18n`Ordinary`\n : i18n`Unknown`\n\ninterface ScanInputProps {\n label: string;\n value?: string;\n}\nconst ScanInput = ({ label, value = undefined }: ScanInputProps) => (\n \n \n \n {label}\n {\n value ? (\n {value}\n ) : (\n \n _\n \n )\n }\n \n \n {\n value ? : null\n }\n \n \n \n);\n\nclass Inventory extends React.Component\n{\n private scanner: Scanner | null = null;\n\n state: State = { quantity: \"\", confirmChecked: false, action: \"cancel\" };\n\n componentWillMount() {\n this.scanner = new Scanner(this.scannedBardcode);\n this.onPropsChanged(this.props);\n }\n\n componentWillUnmount() {\n if (this.scanner !== null) {\n this.scanner.destroy();\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps) {\n this.onPropsChanged(nextProps);\n }\n\n private onPropsChanged(props: Props & StateProps) {\n const { scannedItem, scannedLocation, currentItem, loadingItem, pendingItems, previousLocation, fetchPendingItems } = props;\n const { draft, warehouse } = props.match.params;\n\n if (previousLocation !== undefined) {\n if (pendingItems === undefined) {\n fetchPendingItems(warehouse, draft, previousLocation);\n }\n else if (pendingItems.length === 0) {\n this.props.clearPreviousLocationAndItems();\n }\n }\n\n if (scannedItem && scannedLocation) {\n if (!currentItem && !loadingItem) {\n this.props.fetchItem(draft, scannedItem, scannedLocation, warehouse);\n }\n else if (currentItem && currentItem !== this.props.currentItem && currentItem.tracking === TRACKING_SERIAL && !this.isContainer(scannedItem)) {\n this.props.updateItem(draft, warehouse, scannedItem, scannedLocation, 1, currentItem.sku);\n }\n }\n else {\n this.setState({ quantity: \"\" });\n }\n }\n\n private isContainer = (barcode: string | undefined) => (barcode !== undefined) && (barcode.length === 10) && (barcode.substr(0, 1).toUpperCase() === \"C\");\n\n private scannedBardcode = (symbols: string) => {\n if (this.showLoader()) {\n return;\n }\n\n if (this.isContainer(symbols)) {\n this.props.scanItem(symbols.toUpperCase());\n }\n\n if ((symbols.length === 28)) {\n const control1 = symbols.substr(0, 2);\n const control2 = symbols.substr(16, 2);\n\n if (control1 === \"01\" && (control2 === \"10\" || control2 === \"21\")) {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 16) {\n const control1 = symbols.substr(0, 2);\n if (control1 === \"01\") {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 13) {\n const control1 = symbols.substr(0, 2);\n if (control1 === \"57\") {\n this.props.scanItem(symbols);\n }\n }\n\n if (symbols.length === 6) // sku\n {\n this.props.scanItem(symbols);\n }\n\n if (symbols.length === 9) {\n this.props.scanLocation(symbols);\n }\n }\n\n private handleCloseDialog = () => {\n this.props.scanClear();\n this.setState({ quantity: \"\", containerIsClosed: undefined });\n }\n\n\n private showConfirmAlreadyCountedDialog = async (result: ValidateResult) => {\n return new Promise<\"add\" | \"overwrite\" | \"cancel\">((accept, reject) => {\n\n this.setState({\n showAlreadyCountedDialog: {\n confirm: (v) => accept(v),\n result\n },\n action: \"cancel\"\n });\n\n });\n }\n\n private handleSaveQuantity = async () => {\n const {\n match: { params: { draft, warehouse } },\n scannedItem, scannedLocation, currentItem\n } = this.props;\n\n let overrideQuantity: number | undefined = undefined;\n\n // TODO - skip for container\n\n const result: ValidateResult = await apiCall(`stock-management/inventory/${warehouse}/report/${scannedLocation}/item/${scannedItem}`);\n if (result.previouslyCounted || (result.draft !== null && draft !== result.draft)) {\n const dialogResult = await this.showConfirmAlreadyCountedDialog(result);\n if (dialogResult === \"add\") {\n overrideQuantity = parseFloat(this.state.quantity) + result.qty;\n }\n else if (dialogResult === \"overwrite\") {\n overrideQuantity = parseFloat(this.state.quantity);\n }\n\n this.setState({ showAlreadyCountedDialog: undefined });\n this.props.scanClear();\n\n if (dialogResult === \"cancel\") {\n return;\n }\n }\n\n\n if (scannedItem !== undefined && scannedLocation !== undefined && currentItem !== undefined) {\n const quantity = this.isContainer(scannedItem) ? 0 : (overrideQuantity ?? parseFloat(this.state.quantity));\n this.props.updateItem(draft, warehouse, scannedItem, scannedLocation, quantity, currentItem.sku);\n }\n }\n\n private showDialog = () => this.props.currentItem !== undefined\n && (this.props.currentItem.tracking !== TRACKING_SERIAL || this.isContainer(this.props.scannedItem));\n\n private showLoader = () => this.props.loadingItem;\n\n private showDialogLoader = () => this.props.updatingItem;\n\n private onQuantityChange = (e: React.ChangeEvent) => {\n const quantity = e.target.value;\n\n if (this.props.currentItem?.quantity !== undefined) {\n if ((Number(quantity)) >= Number(this.props.currentItem?.quantity)*1.1)\n e.target.style.color = \"red\";\n else\n e.target.style.color = \"inherit\";\n }\n\n this.setState({ quantity });\n }\n\n private renderDialog() {\n const { scannedLocation: location, currentItem: item, scannedItem: barcode } = this.props;\n const { quantity, containerIsClosed = undefined } = this.state;\n if (item === undefined) {\n return;\n }\n\n const onKeyPressEnterHandler = (e: React.KeyboardEvent): void => {\n if (e.key === \"Enter\" && e.currentTarget.value.length > 0) {\n this.handleSaveQuantity();\n }\n }\n\n const save = () => {\n if ((this.isContainer(barcode) && containerIsClosed === \"0\")) {\n this.handleCloseDialog();\n }\n else {\n this.handleSaveQuantity();\n }\n }\n\n return (\n this.props.scanClear()}>\n \n \n \n \n \n \n {i18n`Quantity`}\n \n \n \n \n
\n {this.showDialogLoader() ? this.renderLoader() : null}\n \n \n {i18n`Name`}\n {item.name}\n \n \n {i18n`Location`}\n {location}\n \n \n {i18n`SKU`}\n {item.sku}\n \n \n {i18n`Tracking Type`}\n {getTrackingTypeLabel(item.tracking)}\n \n {/**/}\n {/* {i18n`Expected Qty`}*/}\n {/* {item.quantity}*/}\n {/**/}\n \n {\n (this.isContainer(barcode)) ? (\n
\n \n {i18n`You have scanned a container. Is the container closed and sealed?`}\n this.setState({ containerIsClosed: v })}>\n } label=\"Yes, the container is closed\" />\n } label=\"No, the container is open\" />\n \n \n \n {\n (containerIsClosed === \"1\") ? i18n`Please keep the container closed and proceed to the next item.` :\n (containerIsClosed === \"0\") ? i18n`Please scan and count the contents of the container individually.` :\n null\n }\n \n
\n ) : (\n \n {i18n`Quantity`}\n {item.unit}}\n value={quantity}\n onChange={this.onQuantityChange}\n inputProps={{ onKeyDown: onKeyPressEnterHandler }}\n\n />\n \n )\n }\n
\n
\n
\n
\n )\n }\n\n private renderLoader = (left = 16, top = 16, right = 16) => (\n \n );\n\n private onConfirmNullClick = () => {\n const { previousLocation = \"\" } = this.props;\n const { draft, warehouse } = this.props.match.params;\n const { confirmLocationComplete } = this.props;\n this.setState({ confirmChecked: false });\n confirmLocationComplete(warehouse, draft, previousLocation);\n }\n\n private onCancelNullClick = () => {\n const { revertLocation } = this.props;\n this.setState({ confirmChecked: false });\n revertLocation();\n }\n\n private renderLocationChanged() {\n const { pendingItems, previousLocation: location } = this.props;\n\n if (location === undefined) {\n // TODO: we should never be here, fix up state and go back home\n return;\n }\n\n if (pendingItems === undefined || pendingItems.length === 0) {\n return (\n
Hold on a second
\n );\n }\n\n return (\n
\n \n {i18n`The following items are all registered at location ${location} but have not had quantities reported. Please check if all of these have no items present at the location before continuing.`}\n \n \n {\n pendingItems.map(item => (\n \n \n \n ))\n }\n \n \n \n this.setState({ confirmChecked })}\n control={}\n label={i18n`I confirm that none of the listed items above are present at location ${location}`}\n />\n \n \n \n  \n \n \n \n \n \n
\n );\n }\n\n renderAlreadyCounted() {\n const { showAlreadyCountedDialog, action } = this.state;\n const { draft } = this.props.match.params;\n\n const onDialogClose = () => {\n this.setState({ showAlreadyCountedDialog: undefined });\n this.props.scanClear();\n }\n\n return (\n \n \n \n \n \n \n \n {i18n`WARNING`}\n \n \n \n \n {\n (showAlreadyCountedDialog?.result.draft !== null && showAlreadyCountedDialog?.result.draft !== draft) ? (\n
\n \n This item was already counted on a different draft. Please contact the\n supervisor for help.\n \n
\n ) : (\n
\n \n This item has already been counted at this location\n \n \n \n \n Date\n Quantity\n \n \n \n \n {showAlreadyCountedDialog?.result.date}\n {showAlreadyCountedDialog?.result.qty}\n \n \n
\n this.setState({ action: (event.target as HTMLInputElement).value })} value={this.state.action} style={{ marginTop: 16 }}>\n } label={\n <>Overwrite the current count.Qty = {parseFloat(this.state.quantity)}\n } />\n } label={\n <>Add to the current count. Qty = {showAlreadyCountedDialog!.result.qty + parseFloat(this.state.quantity)}.\n } />\n } label={\n <>Do nothing. Qty = {showAlreadyCountedDialog!.result.qty}\n } />\n \n
\n )\n }\n
\n );\n }\n\n render() {\n const { warehouse, draft } = this.props.match.params;\n const { scannedItem = undefined, scannedLocation = undefined, previousLocation } = this.props;\n const { showAlreadyCountedDialog } = this.state;\n\n if (showAlreadyCountedDialog !== undefined) {\n return this.renderAlreadyCounted();\n }\n\n if (previousLocation !== undefined) {\n return this.renderLocationChanged();\n }\n\n return (\n
\n { this.showLoader() ? this.renderLoader() : null}\n \n \n \"Barcode\n \n \n \n \n \n {i18n`Warehouse`}\n {warehouse}\n \n \n {i18n`Draft`}\n {draft}\n \n \n \n \n \n {this.showDialog() ? this.renderDialog() : null}\n
\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Inventory);","import * as React from \"react\";\nimport { useState } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, TextField, MenuItem, Button } from \"@material-ui/core\";\nimport { Draft } from \"../../api/StockApi\";\n\nexport interface Props\n{\n warehouse: string;\n drafts: Draft[];\n navigate: (relativePath: string) => void;\n}\n\nfunction SelectDraft(props: Props)\n{\n const { warehouse = \"\", drafts, navigate } = props;\n const [draft, setDraft] = useState(\"\");\n \n return (\n <>\n \n \n setDraft(e.target.value)}\n label={i18n`Draft`}>\n \n {\n drafts.map(draft => (\n {draft.name}\n ))\n }\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default SelectDraft;","import * as React from \"react\"\nimport { RouteComponentProps, Switch, Route } from \"react-router\";\nimport styled from \"styled-components\";\nimport Inventory from \"./Inventory\";\nimport { getInventoryDrafts } from \"../../state\";\nimport { connect } from \"react-redux\";\nimport { stockDraftsLoad, stockInit, stockDismissError, stockDebugClearState } from \"../../state/action\";\nimport { StockState } from \"../../state/reducer\";\nimport SelectDraft from \"./SelectDraft\";\n\ninterface RouteProps\n{\n warehouse: string;\n}\n\nexport interface Props extends RouteComponentProps\n{\n}\n\nconst ViewBase = styled.div`\n padding: 16px;\n`;\n\nconst mapStateToProps = (state: StockState) => ({\n drafts: getInventoryDrafts(state),\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n draftsLoad: (warehouse: string) => dispatch(stockDraftsLoad(warehouse)),\n dismissError: (id: string) => dispatch(stockDismissError(id)),\n clearState: () => dispatch(stockDebugClearState()),\n init: () => dispatch(stockInit())\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface State\n{\n draft?: string;\n}\n\n\nclass StockManagement extends React.Component\n{\n state: State = {}\n\n private navigateToView = (relativePath: string) => \n this.props.history.push(`${this.props.match.url}/${relativePath}`);\n\n componentWillMount()\n {\n this.props.init();\n if(this.props.match.params.warehouse)\n {\n this.props.draftsLoad(this.props.match.params.warehouse);\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n const { warehouse: nextWarehouse = undefined } = nextProps.match.params;\n const { warehouse: currentWarehouse = undefined } = this.props.match.params;\n if(nextWarehouse !== currentWarehouse && nextWarehouse)\n {\n this.props.draftsLoad(nextWarehouse);\n }\n }\n\n render()\n {\n const { match, drafts } = this.props;\n\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StockManagement);","import { Dispatch } from \"redux\";\nimport { Item, getItem, RelocationRequest, moveItem } from \"../../../api/StockApi\";\nimport { getErrorReason } from \"../../action\";\nimport { generateUuid } from \"../../../../../util/uuid\";\nimport { BusyAction } from \"../../../../../state/ui/busy\";\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM\n//\nexport interface StockRelocationFetchItemAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM\";\n}\nexport const _stockRelocationFetchItem = (barcode: string): StockRelocationFetchItemAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM\", uiMeta: { busy: true }\n});\nexport const stockRelocationFetchItem = (barcode: string) => (dispatch: Dispatch) => \n{\n dispatch(_stockRelocationFetchItem(barcode));\n getItem(barcode)\n .then(item => { dispatch(stockRelocationFetchItemSuccess(item)) })\n .catch(e => {\n let errorMessage = (e.message) \n ? e.message\n : `${getErrorReason(e.error)}Could not fetch item`;\n dispatch(stockRelocationFetchItemFailure(generateUuid(), errorMessage));\n });\n}\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM_SUCCESS\n//\nexport interface StockRelocationFetchItemSuccessAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\";\n item: Item;\n}\nexport const stockRelocationFetchItemSuccess = (item: Item): StockRelocationFetchItemSuccessAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM_SUCCESS\",\n item,\n uiMeta: { busy: false }\n});\n\n//\n// Action: STOCK_RELOCATION_FETCH_ITEM_FAILED\n//\nexport interface StockRelocationFetchItemFailureAction extends BusyAction\n{\n type: \"STOCK_RELOCATION_FETCH_ITEM_FAILURE\";\n id: string;\n message: string;\n}\nexport const stockRelocationFetchItemFailure = (id: string, message: string): StockRelocationFetchItemFailureAction => ({\n type: \"STOCK_RELOCATION_FETCH_ITEM_FAILURE\",\n id, message,\n uiMeta: { busy: false }\n});\n\n//\n// Action: STOCK_RELOCATION_COMMIT\n//\nexport interface StockRelocationCommitAction\n{\n type: \"STOCK_RELOCATION_COMMIT\";\n request: RelocationRequest;\n}\nexport const _stockRelocationCommit = (request: RelocationRequest): StockRelocationCommitAction => ({\n type: \"STOCK_RELOCATION_COMMIT\",\n request\n});\n\nexport const stockRelocationCommit = (request: RelocationRequest) => (dispatch: Dispatch) =>\n{\n dispatch(_stockRelocationCommit(request));\n moveItem(request).then(\n () => dispatch(stockRelocationCommitSuccess(request)),\n e => dispatch(stockRelocationCommitFailure(request, generateUuid(), e?.message || \"Could not move item\"))\n );\n};\n\n//\n// Action: STOCK_RELOCATION_COMMIT_SUCCESS\n//\nexport interface StockRelocationCommitSuccessAction\n{\n type: \"STOCK_RELOCATION_COMMIT_SUCCESS\";\n request: RelocationRequest;\n}\nexport const stockRelocationCommitSuccess = (request: RelocationRequest): StockRelocationCommitSuccessAction => ({\n type: \"STOCK_RELOCATION_COMMIT_SUCCESS\",\n request\n});\n\n//\n// Action: STOCK_RELOCATION_COMMIT_FAILURE\n//\nexport interface StockRelocationCommitFailureAction\n{\n type: \"STOCK_RELOCATION_COMMIT_FAILURE\";\n request: RelocationRequest;\n id: string;\n message: string;\n}\nexport const stockRelocationCommitFailure = (request: RelocationRequest, id:string, message: string): StockRelocationCommitFailureAction => ({\n type: \"STOCK_RELOCATION_COMMIT_FAILURE\",\n request, id, message\n});\n\n//\n// Action: STOCK_RELOCATION_CLEAR\n//\nexport interface StockRelocationClearAction\n{\n type: \"STOCK_RELOCATION_CLEAR\";\n}\nexport const stockRelocationClear = (): StockRelocationClearAction => ({\n type: \"STOCK_RELOCATION_CLEAR\"\n});\n\n//\n// Action: STOCK_RELOCATION_SET_SOURCE_LOCATION\n//\nexport interface StockRelocationSetSourceLocationAction\n{\n type: \"STOCK_RELOCATION_SET_SOURCE_LOCATION\";\n location: string;\n}\nexport const stockRelocationSetSourceLocation = (location: string): StockRelocationSetSourceLocationAction => ({\n type: \"STOCK_RELOCATION_SET_SOURCE_LOCATION\",\n location\n});\n\n//\n// Action: STOCK_RELOCATION_SET_DESTINATION_LOCATION\n//\nexport interface StockRelocationSetDestinationLocationAction\n{\n type: \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\";\n location: string;\n}\nexport const stockRelocationSetDestinationLocation = (location: string): StockRelocationSetDestinationLocationAction => ({\n type: \"STOCK_RELOCATION_SET_DESTINATION_LOCATION\",\n location\n});\n\n//\n// Action: STOCK_RELOCATION_SET_QUANTITY\n//\nexport interface StockRelocationSetQuantityAction\n{\n type: \"STOCK_RELOCATION_SET_QUANTITY\";\n qty: number;\n}\nexport const stockRelocationSetQuantity = (qty: number): StockRelocationSetQuantityAction => ({\n type: \"STOCK_RELOCATION_SET_QUANTITY\",\n qty\n});\n\n//\n// Action: STOCK_RELOCATION_SET_ITEM\n//\nexport interface StockRelocationSetItemAction\n{\n type: \"STOCK_RELOCATION_SET_ITEM\";\n item: Item;\n}\nexport const stockRelocationSetItem = (item: Item): StockRelocationSetItemAction => ({\n type: \"STOCK_RELOCATION_SET_ITEM\",\n item\n});\n\nexport type StockRelocationAction = StockRelocationFetchItemAction\n | StockRelocationFetchItemSuccessAction\n | StockRelocationFetchItemFailureAction\n | StockRelocationCommitAction\n | StockRelocationCommitSuccessAction\n | StockRelocationCommitFailureAction\n | StockRelocationClearAction\n | StockRelocationSetSourceLocationAction\n | StockRelocationSetDestinationLocationAction\n | StockRelocationSetQuantityAction\n | StockRelocationSetItemAction\n ;","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { RouteComponentProps } from \"react-router\";\n\nimport Stepper from \"@material-ui/core/Stepper\";\nimport Step from \"@material-ui/core/Step\";\nimport StepLabel from \"@material-ui/core/StepLabel\";\nimport StepContent from \"@material-ui/core/StepContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\n\nimport { Scanner, BarcodeType } from \"../../../../util/scanner\";\nimport { stockRelocationFetchItem, stockRelocationSetItem, stockRelocationSetSourceLocation, stockRelocationSetDestinationLocation, stockRelocationSetQuantity, stockRelocationCommit, stockRelocationClear } from \"../../state/action/relocation\";\nimport { connect } from \"react-redux\";\nimport { Item, RelocationRequest } from \"../../api/StockApi\";\nimport { getRelocationRequest, getCurrentItem, StockState } from \"../../state/reducer\";\n\ninterface RouteProps\n{\n warehouse: string;\n}\n\nexport interface Props extends RouteComponentProps\n{\n \n}\n\nconst mapStateToProps = (state: StockState) => ({\n item: getCurrentItem(state),\n request: getRelocationRequest(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n fetchItem: (barcode: string) => dispatch(stockRelocationFetchItem(barcode)),\n setItem: (item: Item) => dispatch(stockRelocationSetItem(item)),\n setSourceLocation: (location: string) => dispatch(stockRelocationSetSourceLocation(location)),\n setDestLocation: (location: string) => dispatch(stockRelocationSetDestinationLocation(location)),\n setQuantity: (qty: number) => dispatch(stockRelocationSetQuantity(qty)),\n clear: () => dispatch(stockRelocationClear()),\n commit: (request: RelocationRequest) => dispatch(stockRelocationCommit(request)),\n clearNotifications: () => dispatch({ type: \"NOTIFICATIONS_CLEAR\" }),\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface State\n{\n quantityInput: string;\n}\n\nconst STEP_LOCATION_SOURCE = 0;\nconst STEP_ITEM = 1;\nconst STEP_QUANTITY = 2;\nconst STEP_LOCATION_DEST = 3;\nconst STEP_REVIEW = 4;\n\nclass Relocation extends React.Component\n{\n private qtyInput?: HTMLInputElement;\n private scanner?: Scanner;\n private clearNotificationsHandle: any = null;\n\n state: State = { quantityInput: \"\" };\n\n componentDidMount()\n {\n this.scanner = new Scanner(this.onItemScanned, true);\n if(this.props.item !== undefined)\n {\n this.onItemFetched(this.props.item);\n }\n }\n\n componentWillUnmount()\n {\n if(this.scanner !== undefined)\n {\n this.scanner.destroy();\n this.scanner = undefined;\n }\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n const { clearNotifications } = nextProps;\n\n if (nextProps.item !== undefined)\n {\n this.onItemFetched(nextProps.item);\n }\n\n if (this.getActiveStep() === STEP_LOCATION_SOURCE && this.clearNotificationsHandle === null)\n {\n this.clearNotificationsHandle = setTimeout(() => {\n clearNotifications();\n this.clearNotificationsHandle = null;\n }, 3000);\n }\n }\n\n componentDidUpdate()\n {\n if(this.getActiveStep() === STEP_QUANTITY && this.qtyInput !== undefined)\n {\n this.qtyInput.focus();\n }\n }\n\n private onItemFetched(item: Item)\n {\n const step = this.getActiveStep();\n if(step === STEP_ITEM)\n {\n this.props.setItem(item);\n }\n }\n\n private onItemScanned = (barcode: string, type: BarcodeType) =>\n {\n const step = this.getActiveStep();\n if(step === STEP_LOCATION_SOURCE && type === \"location\")\n {\n this.props.setSourceLocation(barcode);\n }\n else if (step === STEP_LOCATION_DEST && type === \"location\")\n {\n this.props.setDestLocation(barcode);\n }\n else if(step === STEP_ITEM && type === \"item\")\n {\n this.props.fetchItem(barcode);\n }\n }\n\n private getActiveStep(): number\n {\n if(this.props.request.from === undefined)\n {\n return STEP_LOCATION_SOURCE;\n }\n\n if(this.props.request.item === undefined)\n {\n return STEP_ITEM;\n }\n\n if(this.props.request.qty === undefined)\n {\n return STEP_QUANTITY;\n }\n\n if(this.props.request.to === undefined)\n {\n return STEP_LOCATION_DEST;\n }\n\n return STEP_REVIEW;\n }\n\n private onQuantityKeypress = (e: React.ChangeEvent) =>\n {\n this.setState({ quantityInput: e.currentTarget.value });\n }\n\n private isValidQuantityInput = () => /^\\d+(\\.\\d+)?$/.test(this.state.quantityInput);\n\n private onQuantityCommit = () => this.props.setQuantity(parseFloat(this.state.quantityInput));\n\n private onCommit = () =>\n {\n const request: RelocationRequest = {\n ...this.props.request as RelocationRequest,\n warehouse: this.props.match.params.warehouse\n }\n // I: to get this far all fields of request has been filled in\n this.props.commit(request);\n }\n\n private onClear = () => \n {\n this.props.clear();\n }\n\n render()\n {\n const {\n to: locationDest = undefined,\n from: locationSource = undefined,\n item = undefined,\n qty: quantity = undefined,\n } = this.props.request;\n\n const activeStep = this.getActiveStep();\n return (\n
\n Relocation\n
\n \n
\n \n \n {locationSource === undefined ? i18n`Scan source location` : i18n`Source location: ${locationSource}`}\n \n {i18n`Scan the location barcode where the items are currently located.`}\n \n \n \n {item === undefined ? i18n`Scan item`: i18n`Scan Item (SKU): \"${item.sku}\"`}\n \n {i18n`Scan the item that is being relocated.`}\n \n \n \n {quantity === undefined ? i18n`Enter quantity` : i18n`Quantity: ${quantity.toFixed(2)}`}\n \n pcs, type: \"number\" }}\n style={{marginTop: 8, marginBottom: 8}} \n inputRef={input => this.qtyInput = input} />\n \n \n \n \n {locationDest === undefined ? i18n`Scan destination location` : i18n`Destination location: ${locationDest}`}\n \n {i18n`Scan the location where the items are being moved to.`}\n \n \n \n {i18n`Review and commit`}\n \n {\n (item !== undefined && locationDest !== undefined && locationSource !== undefined) ? (\n \n {i18n`Item`}\n {item.name}\n \n {i18n`From`}\n {i18n`To`}\n {locationSource}\n {locationDest}\n \n {i18n`Quantity`}\n {quantity}\n \n \n \n \n ) : null\n }\n \n \n \n
\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Relocation);","import { useReducer, Reducer, useEffect } from \"react\";\n\ninterface State\n{\n response?: T;\n error?: any;\n isLoading: boolean;\n}\n\ninterface Resolved \n{\n type: \"SUCCESS\";\n value: T;\n}\n\ninterface Rejected\n{\n type: \"REJECTED\";\n error: any;\n}\n\ninterface Loading\n{\n type: \"LOADING\";\n}\n\ninterface Reset\n{\n type: \"RESET\";\n}\n\ntype Action = Resolved | Rejected | Loading | Reset;\n\nconst fetchReducer = (state: State, action: Action) =>\n{\n if(action.type === \"LOADING\")\n {\n return {\n isLoading: true\n }\n }\n\n if(action.type === \"SUCCESS\")\n {\n return {\n response: action.value,\n isLoading: false\n }\n }\n\n if(action.type === \"REJECTED\")\n {\n return {\n error: action.error,\n isLoading: false\n }\n }\n\n if(action.type === \"RESET\")\n {\n return { isLoading: false };\n }\n\n return state;\n}\n\nexport const createUseFetch = (fetch: typeof window.fetch) => (input: RequestInfo | null, init?: RequestInit): [T | undefined, boolean, any] =>\n{\n const [state, dispatch] = useReducer, Action>>(fetchReducer, { isLoading: false });\n\n useEffect(() =>\n {\n if (input === null)\n {\n dispatch({ type: \"RESET\" });\n return;\n }\n\n let cancelled = false;\n dispatch({ type: \"LOADING\" });\n fetch(input, init)\n .then(res =>\n {\n if (!cancelled)\n {\n if(res.ok)\n {\n return res.json();\n }\n else\n {\n return res.json().then(v => Promise.reject(v));\n }\n\n }\n })\n .then((value: T) =>\n {\n if (!cancelled)\n {\n dispatch({ type: \"SUCCESS\", value })\n }\n })\n .catch(error => dispatch({ type: \"REJECTED\", error }));\n\n return () => { cancelled = true; }\n }, [input, init]);\n\n return [state.response, state.isLoading, state.error];\n}\n\nexport const useFetch = createUseFetch(window.fetch);","import auth from \"../service/auth\"\nimport { createUseFetch } from \"./useFetch\";\n\nconst fetch = auth.getAuthenticatedFetch();\n\nexport const useAuthenticatedFetch = createUseFetch(fetch);","import * as React from \"react\";\nimport { NotificationMessage } from \"../modules/config\";\n\nexport interface ModuleContextData\n{\n isBusy: (busy: boolean) => void;\n toast: (message: NotificationMessage, timeout?: number) => void;\n username: string | undefined;\n}\n\nexport const ModuleContext = React.createContext({\n isBusy: () => {},\n toast: (message: NotificationMessage, timeout?: number) => {},\n username: undefined\n});\n","import * as React from \"react\";\nimport { useState, useCallback, useEffect } from \"react\";\nimport { Grid, TextField, Select, FormControl, InputLabel, MenuItem } from \"@material-ui/core\";\nimport { Field, DateField, NumberField, StringField, ChoiceField } from \"../../api/label\";\nimport { MuiPickersUtilsProvider, DatePicker } from \"material-ui-pickers\";\nimport DayjsUtils from \"@date-io/dayjs\";\nimport dayjs from \"dayjs\";\n\nexport type FieldValues = {\n [fieldName: string]: string;\n};\n\nexport interface Props\n{\n fields: Field[];\n onChange?: (values: FieldValues) => void;\n}\n\nfunction AdditionalFields(props: Props)\n{\n const { fields, onChange } = props;\n\n const [values, setValues] = useState({});\n\n const setFieldValue = useCallback((fieldName: string, value: string) => {\n setValues(values => {\n const newValues = ({...values, [fieldName]: value });\n onChange?.(newValues)\n return newValues;\n });\n \n }, [onChange]);\n\n useEffect(() => {\n const defaultValues: FieldValues = {};\n fields\n .filter(f => f.value !== undefined)\n .forEach(f => defaultValues[f.name] = f.value as string);\n\n // const newValues = ({...defaultValues, ...values});\n setValues(values => {\n const newValues = {...defaultValues, ...values};\n onChange?.(values);\n return newValues;\n });\n }, [fields, onChange]);\n\n return (\n \n {\n fields.map(field => (\n \n {\n (field.type === \"date\") ? (\n \n ) : (field.type === \"number\") ? (\n \n ) : (field.type === \"string\") ? (\n \n ) : (field.type === \"choice\") ? (\n \n ) : null\n }\n \n ))\n }\n \n )\n}\n\ninterface AdditionalFieldProps\n{\n field: T;\n onChange?: (fieldName: string, value: string) => void;\n}\n\nfunction DateFieldRender(props: AdditionalFieldProps)\n{\n const { field, onChange } = props;\n const [value, setValue] = useState(dayjs(field.value));\n \n const onChangeCallback = useCallback((date: dayjs.Dayjs) => {\n setValue(date);\n if(onChange)\n {\n date = date.add(date.utcOffset(), \"minute\");\n onChange(field.name, date.toISOString());\n }\n}, [onChange, field.name]);\n\n return (\n \n )\n}\n\nfunction NumberFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: defaultValue, name }, onChange } = props;\n const [value, setValue] = useState(defaultValue);\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n )\n}\n\nfunction StringFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: defaultValue, name }, onChange } = props;\n const [value, setValue] = useState(defaultValue);\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n )\n}\n\nfunction ChoiceFieldRender(props: AdditionalFieldProps)\n{\n const { field: { displayLabel, value: values, name }, onChange } = props;\n const [value, setValue] = useState(\"\");\n\n const onChangeCallback = useCallback((e: React.ChangeEvent) => {\n setValue(e.target.value);\n onChange?.(name, e.target.value);\n }, [onChange, name]);\n\n return (\n \n {displayLabel} \n \n \n )\n}\nexport default AdditionalFields;","import * as React from \"react\";\nimport { useCallback, useState, useRef, useContext, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, TextField, IconButton, FormControl, InputLabel, Select, MenuItem, Button } from \"@material-ui/core\";\n\nimport BarcodeScan from \"mdi-material-ui/BarcodeScan\";\nimport { API_BASE_URL } from \"../../../../api/api\";\nimport { useAuthenticatedFetch } from \"../../../../hooks/useAuthenticatedFetch\";\nimport { LabelTypes } from \"../../state/types\";\nimport { RouteComponentProps } from \"react-router\";\nimport { ModuleContext, ModuleContextData } from \"../../../../context/ModuleContext\";\nimport AdditionalFields, { FieldValues } from \"./AdditionalFields\";\nimport { LabelItemResponse } from \"../../api/label\";\nimport auth from \"../../../../service/auth\";\n\nexport interface Props extends RouteComponentProps\n{\n\n}\n\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nfunction useChangeCallback(setValue: (s: string) => void)\n{\n return useCallback((e: React.ChangeEvent) => setValue(e.target.value), [setValue]);\n}\n\nfunction useFormState(initialValue: string) : [string, (e: React.ChangeEvent) => void, (v: string) => void]\n{\n const [value, setValue] = useState(initialValue);\n return [value, useChangeCallback(setValue), setValue];\n}\n\nconst fetch = auth.getAuthenticatedFetch();\n\ninterface Values\n{\n quantity: string;\n labelSku: string;\n printer: string;\n additionalFields: FieldValues;\n barcode: string | null;\n}\n\nfunction useErrorToast(toast: ModuleContextData[\"toast\"], errorObject: { errorMessage?: string } | undefined)\n{\n useEffect(() => \n {\n if(errorObject?.errorMessage)\n {\n toast({ message: errorObject.errorMessage, severity: \"error\" });\n }\n }, [errorObject, toast]);\n}\n\nfunction LabelView()\n{\n const context = useContext(ModuleContext);\n const inputRef = useRef();\n const [confirmedBarCode, setConfirmedBarcode] = useState(null);\n const [barcode, onBarcodeChanged, setBarcode] = useFormState(\"\");\n const [quantity, onQtyChanged, setQuantity] = useFormState(\"\");\n const [label, onLabelTypeChanged, setLabel] = useFormState(\"\");\n const [printer, onPrinterChanged, setPrinter] = useFormState(\"\");\n const [additionaValues, setAdditionalValues] = useState({});\n\n const values = useRef();\n values.current = {\n quantity, labelSku: label, printer, additionalFields: additionaValues, barcode: confirmedBarCode\n }\n\n const qtyIsValid = /^\\s*[0-9]*\\s*$/.test(quantity);\n\n const onSerialNumberKeypress = useCallback((e: React.KeyboardEvent) => {\n if(e.key === \"Enter\" && inputRef.current)\n {\n setConfirmedBarcode(inputRef.current.value);\n }\n }, []);\n\n const [labelTypes, isLoadingLabelTypes, labelTypesError] = useAuthenticatedFetch(\n (confirmedBarCode !== null) \n ? `${API_BASE_URL}/lookup/barcode/${confirmedBarCode}/labels/en-US`\n : null);\n\n const [configuration, isLoadingConfiguration, configurationError] = useAuthenticatedFetch(\n (label !== \"\") \n ? `${API_BASE_URL}/stock-management/label/${label}/config/en-US`\n : null);\n\n useEffect(() => {\n if(labelTypes?.defaultValue)\n {\n setLabel(labelTypes.defaultValue);\n }\n }, [labelTypes, setLabel]);\n \n useEffect(() => {\n if(configuration !== undefined)\n {\n if(configuration.defaultQty)\n {\n setQuantity(configuration.defaultQty.toString());\n }\n if(configuration.printers?.defaultValue)\n {\n setPrinter(configuration.printers.defaultValue);\n }\n if(configuration?.additionalFields?.length)\n {\n let defaultValues: FieldValues = {};\n for(let field of configuration.additionalFields)\n {\n if(typeof field.value === \"string\")\n {\n defaultValues[field.name] = field.value;\n }\n }\n setAdditionalValues(defaultValues);\n }\n }\n }, [configuration, setQuantity, setPrinter]);\n\n useErrorToast(context.toast, configurationError);\n useErrorToast(context.toast, labelTypesError);\n\n const onCommit = React.useCallback(() => \n {\n fetch(`${API_BASE_URL}/stock-management/label/print`, { \n method: \"POST\", \n body: JSON.stringify({ ...values.current, quantity: parseInt(values.current!.quantity) }),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(res => {\n if(res.ok)\n {\n setConfirmedBarcode(null);\n setLabel(\"\");\n setBarcode(\"\");\n setQuantity(\"\");\n setPrinter(\"\");\n setAdditionalValues({});\n context.toast({\n message: i18n`Label printing request successful.`,\n severity: \"success\"\n }, 3000);\n }\n else\n {\n return res.json().then(Promise.reject);\n }\n }).catch(e => {\n context.toast({\n message: e.errorMessage || i18n`Label printing failed.`,\n severity: \"error\"\n });\n })\n ;\n }, [values, context, setBarcode, setLabel, setPrinter, setQuantity]);\n \n // handle loading indicator display\n const loadingIndicator = isLoadingLabelTypes || isLoadingConfiguration;\n React.useEffect(() => { context.isBusy(loadingIndicator) }, [loadingIndicator, context]);\n \n // handle default qty from configuration\n React.useEffect(() => { \n if(configuration !== undefined)\n {\n const { defaultQty = \"\" } = configuration;\n setQuantity(defaultQty + \"\");\n }\n }, [configuration, setQuantity]);\n\n\n return (\n <>\n {/* */}\n \n \n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n \n {i18n`Label Type`}\n \n {\n (labelTypes !== undefined) ? (\n labelTypes.values.map(label => (\n {label.label}\n ))\n ) : null\n }\n \n \n \n \n {\n (configuration !== undefined) ? (\n \n {i18n`Printer`}\n \n {\n (configuration !== undefined) ? (\n configuration.printers.values.map(printer => (\n {printer.label}\n ))\n ) : null\n }\n \n \n ) : null\n }\n \n {\n (configuration?.additionalFields !== undefined) ? (\n \n ) : null\n }\n {\n (configuration !== undefined) ? (\n \n \n \n \n ) : null\n }\n \n\n \n \n {/* {\n (labelRequestActive) ? (\n \n ) : null\n } */}\n \n\n
\n \n );\n}\n\nexport default LabelView;","import React, { useEffect, useState, useCallback, FormEvent } from \"react\";\nimport { Paper, withStyles, TextField, Typography, Button, Table, TableHead, TableRow, TableCell, TableBody, InputAdornment, IconButton, Snackbar, LinearProgress, Grid, Card, CardContent } from \"@material-ui/core\";\nimport Clear from \"@material-ui/icons/Clear\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Scanner } from \"../../../../util/scanner\";\nimport Api from \"../../../../api/api\";\nimport { RouteComponentProps } from \"react-router\";\n\nexport interface Props extends RouteComponentProps<{ warehouse: string }>\n{\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactChildren;\n}\n\nconst styles = (theme: any) => ({\n root: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n errorBar: {\n backgroundColor: theme.palette.error.dark\n }\n})\n\ninterface InquiryItem\n{\n location: string;\n locationName: string;\n itemName: string;\n sku: string;\n qty: number;\n lastUpdate?: string;\n prioDate: string;\n statusBalanceId: string;\n name: string;\n}\n\ninterface InquiryResult\n{\n id: string;\n name: string;\n type: string;\n items: InquiryItem[];\n}\n\nconst getId = (type: string, item: InquiryItem) => (type === \"item\") ? item.location : item.sku;\n\nconst performInquiry = async (warehouse: string, barcode: string) => \n{\n const res = await Api.request(`stock-management/inquiry/${warehouse}/${barcode}`);\n if(!res.ok)\n {\n if(res.status === 404)\n {\n throw new Error(i18n`Item ${barcode} not found`);\n }\n else\n {\n throw new Error(await res.text());\n }\n }\n const data: InquiryResult = await res.json();\n return data;\n}\n\nfunction InquiryItemRow(props: {item: InquiryItem, type: string, onClick?: (item: InquiryItem) => void})\n{\n const {item, type, onClick } = props;\n const [active, setActive] = useState(false);\n return (\n onClick?.(item)} \n onMouseDown={() => setActive(true)} \n onMouseUp={() => setActive(false)}\n onTouchStart={() => setActive(true)} \n onTouchEnd={() => setActive(false)}\n selected={active}\n >\n {getId(type, item)}\n {i18n`${new Date(item.prioDate)}:t(d)`}\n {item.qty}\n \n )\n}\n\nfunction InquiryView(props: Props & { classes: any })\n{\n const { classes, match: { params: { warehouse } } } = props;\n const [barcode, setBarcode] = useState(\"\");\n const [result, setResult] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [showDetails, setShowDetails] = useState(undefined);\n\n useEffect(() => {\n const scanner = new Scanner(async (barcode, type) => {\n setShowDetails(undefined);\n setBusy(true);\n setBarcode(barcode);\n performInquiry(warehouse, barcode)\n .then(data => setResult(data))\n .catch((err: Error) => setErrorMessage(err.message))\n .finally(() => setBusy(false))\n ;\n }, true);\n return () => {\n scanner.destroy();\n }\n }, [warehouse]);\n\n useEffect(() => {\n setResult(undefined);\n }, [barcode])\n\n const onSubmit = useCallback(async (e: FormEvent) => {\n e.preventDefault();\n try {\n setBusy(true);\n const data = await performInquiry(warehouse, barcode);\n setResult(data);\n }\n catch(e)\n {\n setErrorMessage(e.message);\n }\n finally{\n setBusy(false);\n }\n }, [barcode, warehouse]);\n\n const onItemClick = (item: InquiryItem) => setShowDetails(item);\n\n if(showDetails !== undefined)\n {\n const item = showDetails;\n const type = result!.type;\n return (\n
\n \n {/* */}\n \n \n \n {i18n`SKU`}\n {item.sku}\n \n \n {i18n`Item`}\n {item.itemName}\n \n \n {i18n`Location Id.`}\n {item.location}\n \n \n {i18n`Location`}\n {item.locationName}\n \n \n {i18n`Prio. Date`}\n {i18n`${new Date(item.prioDate)}:t(d)`}\n \n \n {i18n`Counted`}\n \n { \n (item.lastUpdate) \n ? i18n`${new Date(item.lastUpdate)}:t(d)`\n : i18n`unknown`\n }\n \n \n \n {i18n`Quantity`}\n {item.qty}\n \n \n {i18n`BalSts`}\n {item.statusBalanceId}\n \n \n \n \n
\n \n
\n
\n\n );\n }\n\n return (\n
\n { busy ? : null}\n \n
\n 0) ? (\n \n setBarcode(\"\")}>\n \n \n \n ) : undefined\n }}\n value={barcode} \n onChange={e => setBarcode(e.target.value)} \n onKeyDown={e => e.stopPropagation()}\n onKeyUp={e => e.stopPropagation()}\n onKeyPress={e => e.stopPropagation()}\n />\n \n \n
\n\n { (result) ? (\n <>\n \n \n \n {result.type === \"item\" ? i18n`Item` : i18n`Location`}\n {result.id}\n \n \n {i18n`Name`}\n {result.name}\n \n \n \n\n \n \n \n \n {result.type === \"item\" ? i18n`Location` : i18n`Item`}\n {i18n`Prio. Date`}\n {i18n`Qty`}\n \n \n \n {\n result.items.map(line => (\n \n ))\n // alert(\"ok\")}>\n // {getId(result, line)}\n // {i18n`${new Date(line.prioDate)}:t(d)`}\n // {line.qty}\n // \n // ))\n }\n \n
\n
\n \n ) : null\n }\n setErrorMessage(undefined)} />\n
\n );\n}\n\nexport default withStyles(styles)(InquiryView);","import * as React from \"react\";\nimport { useCallback, useState, useRef, useContext, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { Grid, withStyles, TextField, FormControl, InputLabel, Button, CardContent, Typography, Snackbar, FormLabel, RadioGroup, FormControlLabel, Radio } from \"@material-ui/core\";\nimport { API_BASE_URL } from \"../../../../api/api\";\nimport { ModuleContext, ModuleContextData } from \"../../../../context/ModuleContext\";\nimport Api from \"../../../../api/api\";\nimport { RouteComponentProps } from \"react-router\";\nimport auth from \"../../../../service/auth\";\n\ntype InputElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nenum searchTypeEnum { Manufacturing, Purchase, Item }\n\nconst fetch = auth.getAuthenticatedFetch();\n\nexport interface Props extends RouteComponentProps<{ warehouse: string }> {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactChildren;\n}\n\nconst styles = (theme: any) => ({\n root: {\n ...theme.mixins.gutters(),\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n errorBar: {\n backgroundColor: theme.palette.error.dark\n }\n})\n\nfunction useChangeCallback(setValue: (s: string) => void) {\n return useCallback((e: React.ChangeEvent) => setValue(e.target.value), [setValue]);\n}\n\nfunction useFormState(initialValue: string): [string, (e: React.ChangeEvent) => void, (v: string) => void] {\n const [value, setValue] = useState(initialValue);\n return [value, useChangeCallback(setValue), setValue];\n}\n\ninterface Values {\n qtySmall: string;\n qtyLarge: string;\n qtyBoxSmall: string;\n qtyBoxLarge: string;\n itemNumber: string;\n searchType: string;\n}\n\ninterface itemResult {\n ean: string;\n sku: string;\n unit: string;\n name: string;\n tracking: string\n lotNumber: string\n defaultLoc: string\n edition: string\n quantity: number\n}\n\nconst ProductLabel = (props: Props & { classes: any }) => {\n\n const { classes, match: { params: { warehouse } } } = props;\n const context = useContext(ModuleContext);\n const inputRef = useRef();\n const [qtySmall, onSmallQtyChanged, setQtySmall] = useFormState(\"0\");\n const [qtyLarge, onLargeQtyChanged, setQtyLarge] = useFormState(\"0\");\n const [qtyBoxSmall, onBoxSmallQtyChanged, setQtyBoxSmall] = useFormState(\"0\");\n const [qtyBoxLarge, onBoxLargeQtyChanged, setQtyBoxLarge] = useFormState(\"0\");\n const [item, setItem] = useState(undefined);\n const [itemNumber, onItemNumberChanged, setItemNumber] = useFormState(\"\");\n const [errorMessage, setErrorMessage] = useState(undefined);\n const [searchType, setTypeOfSearch] = useState(searchTypeEnum[searchTypeEnum.Item]);\n\n const handleSearchTypeChange = (event: React.ChangeEvent) => {\n setTypeOfSearch(event.currentTarget.value);\n setItemNumber(\"\");\n setQtyBoxLarge(\"0\");\n setQtyBoxSmall(\"0\");\n setQtyLarge(\"0\");\n setQtySmall(\"0\");\n setItem(undefined);\n setErrorMessage(undefined);\n }\n\n const qtyIsValid = (quantity: string) => { return /^\\s*[0-4]?[0-9]?[0-9]\\s*$/.test(quantity); }\n\n const values = useRef();\n values.current = {\n itemNumber,\n qtySmall,\n qtyLarge,\n qtyBoxSmall,\n qtyBoxLarge,\n searchType\n }\n\n const onItemBlur = React.useCallback(() => {\n performInquiry(\"001\", itemNumber)\n .catch((err: Error) => setErrorMessage(err.message));\n }, [itemNumber]);\n\n const performInquiry = async (warehouse: string, barcode: string) => {\n const res = await Api.request(`lookup/itemnumber/${itemNumber}/${searchType}`);\n if (!res.ok) {\n if (res.status === 404) {\n throw new Error(i18n`Search criteria ${itemNumber} not found`);\n }\n else {\n throw new Error(await res.text());\n }\n }\n\n const data: itemResult = await res.json();\n setQtySmall(data.quantity.toString());\n\n const resEdition = await Api.request(`lookup/edition/${data.sku}`);\n if (!resEdition.ok) {\n if (resEdition.status === 404) {\n throw new Error(i18n`Editon not found for ${itemNumber}`);\n }\n else {\n throw new Error(await resEdition.text());\n }\n }\n else {\n data.edition = await resEdition.json();\n }\n\n setItem(data);\n return data;\n }\n\n const onCommit = React.useCallback(() => {\n console.log(values.current);\n fetch(`${API_BASE_URL}/stock-management/label/printproductlabel`, {\n method: \"POST\",\n body: JSON.stringify({ ...values.current }),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(res => {\n if (res.ok) {\n setItemNumber(\"\");\n setQtyBoxLarge(\"0\");\n setQtyBoxSmall(\"0\");\n setQtyLarge(\"0\");\n setQtySmall(\"0\");\n setItem(undefined);\n setErrorMessage(undefined);\n context.toast({\n message: i18n`Label printing request successful.`,\n severity: \"success\"\n }, 3000);\n }\n else {\n return res.json().then(Promise.reject);\n }\n }).catch(e => {\n context.toast({\n message: e.errorMessage || i18n`Label printing failed.`,\n severity: \"error\"\n });\n })\n ;\n }, [item?.sku]);\n\n return (\n <>\n \n \n
\n handleSearchTypeChange(e)} row>\n } label=\"Item\" />\n } label=\"Manufacturing\" />\n } label=\"Purchase\" />\n \n
\n
\n \n
\n \n
\n
\n \n \n \n \n \n \n\n \n
\n \n \n
\n
\n\n \n \n \n \n \n {i18n`Print`}\n \n\n \n \n \n Item\n \n \n {item?.sku} {item?.name}\n \n \n Std. Location\n \n \n {item?.defaultLoc}\n \n \n Edition\n \n \n {item?.edition}\n \n \n \n
\n setErrorMessage(undefined)} />\n \n );\n}\n\nexport default withStyles(styles)(ProductLabel);\n","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport { Switch, Route } from \"react-router\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Grid from \"@material-ui/core/Grid\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport SnackbarContent from \"@material-ui/core/SnackbarContent\";\nimport styled from \"styled-components\";\nimport InventoryMain from \"./inventory/Main\";\nimport { getInventoryCurrentWarehouse, getInventoryNotifications } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { stockSetWarehouse, stockInit, stockDismissError } from \"../state/action\";\nimport { Notification } from \"../state/types\";\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport green from '@material-ui/core/colors/green';\nimport amber from '@material-ui/core/colors/amber';\nimport red from '@material-ui/core/colors/red';\nimport Relocation from \"./relocation/Relocation\";\nimport Label from \"./label/LabelView\";\nimport Inquiry from \"./inquiry/InquiryView\";\nimport ProductLabel from \"./productlabel/ProductLabel\";\nimport { ModuleProps } from \"../../config\";\nimport { getIsBusy, getModuleNotifications, StockState } from \"../state/reducer\";\n\nexport interface Props extends ModuleProps\n{\n}\n\nconst ViewBase = styled.div`\n box-sizing: border-box;\n position: relative;\n margin: 16px;\n`;\n\nconst mapStateToProps = (state: StockState) => ({\n warehouse: getInventoryCurrentWarehouse(state),\n notifications: getInventoryNotifications(state),\n mnotifications: getModuleNotifications(state),\n busy: getIsBusy(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n setCurrentWarehouse: (warehouse: string) => dispatch(stockSetWarehouse(warehouse)),\n dismissError: (id: string) => dispatch(stockDismissError(id)),\n init: () => dispatch(stockInit())\n});\n\ntype StateProps = ReturnType & ReturnType;\n\ninterface CustomSnackBarContentProps\n{\n message: string;\n icon: React.ComponentType;\n style: React.CSSProperties;\n}\n\nconst snackbarStyles = \n{\n success: {\n style: { backgroundColor: green[600] },\n icon: CheckCircleIcon\n }, \n warning: {\n style: { backgroundColor: amber[700] },\n icon: WarningIcon\n },\n error: {\n style: { backgroundColor: red[600] },\n icon: ErrorIcon\n }\n}\n\nconst CustomSnackBarContent = ({message, icon: Icon, style}: CustomSnackBarContentProps) => (\n \n {message}\n \n } />\n);\n\nclass StockManagement extends React.Component\n{\n private navigateToView = (relativePath: string) => \n this.props.history.push(`${this.props.match.path}/${relativePath}`);\n\n private onChange = (e: React.ChangeEvent) => \n this.props.setCurrentWarehouse(e.target.value);\n\n componentWillMount()\n {\n this.props.init();\n }\n\n componentWillReceiveProps(nextProps: Props & StateProps)\n {\n this.props.isBusy(nextProps.busy);\n }\n\n private renderView() \n {\n const { warehouse = \"\" } = this.props;\n return (\n <>\n \n \n \n \n Hasselager (001)\n USA (002)\n \n \n \n {/* \n \n \n \n */}\n {this.renderNavigationButtons(false)}\n \n );\n }\n\n private renderNavigationButtons(disabled: boolean)\n {\n const { warehouse = \"\" } = this.props;\n const buttons = [\n { route: \"inventory\", title: i18n`Inventory`, role: \"mobility.stock.inventory\" },\n { route: \"relocation\", title: i18n`Relocation`, role: \"mobility.stock.relocate\" },\n { route: \"label\", title: i18n`Label Print`, role: \"mobility.stock.label\" },\n { route: \"inquiry\", title: i18n`Inquiry`, role: null },\n { route: \"productlabel\", title: i18n`Product Label`, role:null}\n ].filter(item => item.role === null || this.props.hasRole(item.role));\n\n\n return (\n \n {\n buttons.map(button => (\n \n \n \n ))\n }\n \n );\n }\n\n private renderSnackbar = (error: Notification, index: number) =>\n {\n const { message, severity, id } = error;\n return (\n this.props.dismissError(id)}>\n \n \n );\n }\n\n render()\n {\n const { match, warehouse, notifications, mnotifications } = this.props;\n if(warehouse === undefined)\n {\n return (\n \n {this.renderView()}\n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n {this.renderView()}\n \n \n {\n [...notifications, ...mnotifications].map(this.renderSnackbar)\n }\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StockManagement);","import { createModuleStore, createModule } from \"../helper\";\nimport reducer from \"./state\";\n\nimport App from \"./views/Main\";\n\nconst store = createModuleStore(reducer, \"stock\", 1);\nconst Stock = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default Stock;\n\n","import i18n from \"es2015-i18n-tag\";\nimport Domain from \"@material-ui/icons/Domain\";\nimport StockManagement from \".\";\nimport { Module } from \"../config\";\n\nconst module_: Module = { \n title: i18n`Stock Management`, \n icon: Domain, \n component: StockManagement, \n url: \"/stock\",\n roles: [\"mobility.stock.*\"]\n};\n\nexport default module_;\n","import * as React from \"react\";\nimport { LookupItem } from \"../../types\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Typography from \"@material-ui/core/Typography\";\n\nexport function ItemList(props: { items: LookupItem[] })\n{\n const { items } = props;\n return (\n \n {\n items.map(item => )\n }\n \n );\n}\n\nfunction ItemListItem(props: {item: LookupItem})\n{\n const { item } = props;\n return (\n \n \n \n {item.itemNumber}\n \n {\" - \" + item.itemDescription}\n }\n />\n \n );\n}","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { Feature } from \"../../types\";\n\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\n\nexport type CheckedFeature = Feature & { checked: boolean };\n\ninterface FeatureListProps\n{\n className?: string;\n features: CheckedFeature[];\n onFeatureCheck: (feature: Feature, checked: boolean) => void;\n} \n\nexport function FeatureList(props: FeatureListProps)\n{\n const { features, className, onFeatureCheck } = props;\n\n const onCheckboxChange = useMemo(() => features\n .map(f => (e: React.ChangeEvent) => onFeatureCheck(f, e.target.checked))\n , [features, onFeatureCheck]);\n\n return (\n \n {features.map((feature, i) => (\n \n {/* \n
\n */}\n \n \n \n \n \n ))}\n \n );\n}","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport { formatGroupedBinary } from \"../../../../util/number\";\nimport TextField from \"@material-ui/core/TextField\";\n\ninterface ManualInputProps\n{\n className?: string;\n base36value: string;\n onValueChange: (base36value: string) => void;\n}\n\nconst getBase2String = (base36: string) => formatGroupedBinary(parseInt(base36.replace(/ +/, \"\"), 36) || 0);\nconst restrictLength = (s: string, n: number) => s.length > n ? s.substr(0, n) : s;\n\nexport function ManualInput(props: ManualInputProps)\n{\n const { className, onValueChange, base36value } = props;\n\n const [binaryValue, setBinaryValue] = useState(() => getBase2String(base36value));\n \n const onTextFieldChange = (e: React.ChangeEvent) => \n onValueChange(restrictLength(e.target.value.replace(/[^a-zA-Z0-9]+/, \"\"), 5));\n \n const onBinaryTextBlur = (e: React.ChangeEvent) => \n onValueChange(parseInt(binaryValue.replace(/ /g, \"\"), 2).toString(36));\n\n const onBinaryTextChange = (e: React.ChangeEvent) => \n setBinaryValue(e.target.value.replace(/[^01 ]/g, \"\"));\n\n useEffect(() => setBinaryValue(getBase2String(base36value)), [base36value]);\n\n return (\n
\n \n \n
\n );\n}","export function formatGroupedBinary(n: number, grouping: number | undefined = 5, padding = true)\n{\n let s = n.toString(2);\n if(grouping !== undefined)\n {\n if(padding && (((s.length % grouping) !== 0) || s.length === 0))\n {\n const maxSize = s.length + (grouping - (s.length % grouping));\n s = s.padStart(maxSize, \"0\");\n }\n\n if(s.length > grouping)\n {\n let firstGroupLen = s.length % grouping;\n let groups = [s.substr(0, firstGroupLen)];\n for(let i = firstGroupLen; i < s.length; i += grouping)\n {\n groups.push(s.substr(i, grouping));\n }\n s = groups.join(\" \");\n }\n }\n\n return s;\n}\n","import { atom } from \"recoil\";\n\ninterface SearchStatus\n{\n additionalItemsCount: number;\n itemsCount: number;\n}\n\nexport const searchStatusAtom = atom({\n key: \"tools.base36\",\n default: {\n additionalItemsCount: 0,\n itemsCount: 0\n }\n});\n\n\n","import * as React from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { ModuleProps } from \"../../../config\";\n\nimport { withStyles } from \"@material-ui/core/styles\";\n\nimport { Feature, LookupResult } from \"../../types\";\nimport { Route } from \"react-router\";\nimport { ItemList } from \"./ItemList\";\nimport { FeatureList } from \"./FeatureList\";\nimport { ManualInput } from \"./ManuelInput\";\nimport { useQuery } from \"react-query\";\nimport Api from \"../../../../api/api\";\nimport { useSetRecoilState } from \"recoil\";\nimport { searchStatusAtom } from \"../../atoms/base36\";\nimport { DeliveryContextObject, DeliveryContext } from \"../Main\";\n\nconst styles = (theme: any) => ({\n root: {\n padding: \"16px\"\n },\n list: {\n width: \"100%\",\n maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n code: {\n marginBottom: 16\n }\n});\n\ntype StylesClasses any> = {\n [P in keyof ReturnType]: string;\n};\n\ninterface StylesProps any>\n{\n classes: StylesClasses;\n}\n\nexport interface Props extends ModuleProps\n{\n}\n\nexport type CheckedFeature = Feature & { checked: boolean };\n\nconst setBit = (n: number, bit: number, on: boolean) => on ? (n | (1 << bit)) : (n & ~(1 << bit));\n\nconst fetchFeatures = () => \n Api.request(\"tools/features/labels/en-US\").then(x => x.json());\n\nconst fetchItems = (code: string) => \n Api.request(`tools/features/lookup/base36/${code}`).then(x => x.json());\n\nfunction Main(props: Props & StylesProps)\n{\n const setSearchStatus = useSetRecoilState(searchStatusAtom);\n const [base36value, setbase36value] = useState(\"\");\n const { classes } = props;\n const { setBusyIndicatorVisible } = React.useContext(DeliveryContext);\n const value = parseInt(base36value, 36);\n\n const { data: featuresConfiguration, isLoading: featureIsLoading } = useQuery(\"tools.feature.features\", fetchFeatures);\n const { data: lookupResult, isLoading: itemsIsLoading } = useQuery([\"tools.features\", \"lookup\", base36value || \"0\"], () => fetchItems(base36value || \"0\" ))\n\n // sync loading indicator\n useEffect(() => { \n setBusyIndicatorVisible(featureIsLoading || itemsIsLoading) \n }, [featureIsLoading, itemsIsLoading, setBusyIndicatorVisible])\n\n const onFeatureCheck = useCallback((f: Feature, c: boolean) => {\n setbase36value(setBit(value, f.bit, c).toString(36).toUpperCase());\n }, [value]);\n\n useEffect(() => \n {\n setSearchStatus({ \n itemsCount: lookupResult?.items.length ?? 0, \n additionalItemsCount: lookupResult?.additionalItems.length ?? 0\n });\n\n }, [lookupResult, setSearchStatus])\n\n const featureList = featuresConfiguration?.map(fc => ({\n ...fc, \n checked: (value & (1 << fc.bit)) > 0 \n }));\n\n const baseUrl = props.match.url.replace(/\\/+$/, \"\");\n\n return (\n
\n (\n <>\n \n \n \n )} />\n } />\n } />\n
\n );\n}\n\nexport default (withStyles(styles)(Main));","import * as React from \"react\";\nimport { useState, useCallback, useEffect, useContext } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport IconPrint from \"@material-ui/icons/Print\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport Button from \"@material-ui/core/Button\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport TextField from \"@material-ui/core/TextField\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport { TypographyProps } from \"@material-ui/core/Typography\";\n\nimport { Delivery } from \"../../state\";\nimport Api from \"../../../../api/api\";\nimport { DeliveryContext } from \"../Main\";\n\ninterface GLSReceive\n{\n consignmentId: string;\n parcels: ReceiveParcel[];\n}\n\ninterface ReceiveParcel\n{\n ndiNumber: string;\n parcelNumber: string;\n uniqueNumber: string;\n}\n\nexport interface Props\n{\n className?: string;\n style?: React.CSSProperties;\n delivery: Delivery;\n deliveryNumber: string;\n}\n\nconst t_headline: TypographyProps[\"variant\"] = \"caption\";\nconst t_data: TypographyProps[\"variant\"] = \"body2\";\n\nconst update = (arr: T[], index: number, value: T): T[] => \n{\n const result = arr.slice();\n result[index] = value;\n return result;\n}\n\nexport default function DeliveryCard(props: Props)\n{\n const { className, style, delivery, deliveryNumber } = props;\n const [weights, setWeights] = useState([]);\n const [tracking, setTracking] = useState([]);\n const context = useContext(DeliveryContext);\n\n const addParcel = useCallback(() => setWeights(ws => [...ws, \"\"]), []);\n const onWeightChange = useCallback(\n (value: string, index: number) => setWeights(es => update(es, index, value)),\n []\n );\n\n // reset weights and tracking data when delivery number changes\n useEffect(() => {\n setWeights([]);\n setTracking([]);\n }, [delivery]);\n\n const onPrintLabelsClick = async () => {\n const res = await Api.request(`delivery/${deliveryNumber}/print`, \"POST\", weights.map(w => parseFloat(w)));\n if(res.ok)\n {\n const data: GLSReceive = await res.json();\n setTracking(data.parcels.map(p => p.parcelNumber));\n }\n else\n {\n const data = await res.json();\n context.toast({\n message: data.errorMessage || i18n`Something went wrong`,\n severity: \"error\"\n });\n }\n };\n\n return (\n \n \n \n \n \n {i18n`Name`}\n \n \n {delivery.name1}
\n {delivery.name2}
\n {delivery.name3}
\n {delivery.street1}\n
\n
\n
\n \n {i18n`Zipcode`}\n {delivery.zipCode}\n \n \n {i18n`City`}\n {delivery.city}\n \n \n {i18n`Country`}\n {delivery.countryNum}\n \n
\n
\n
\n \n {\n (tracking.length === 0) ? (\n \n {\n weights.map((weight, i) => \n \n )\n }\n \n ) : (\n \n {i18n`Labels have been printed for parcels:`}\n {\n tracking.map(number => (\n {number}\n ))\n }\n \n )\n }\n \n {/* */}\n \n {\n (tracking.length === 0) ? (\n <>\n \n {\n (weights.length > 0 && weights[0].length > 0) ? (\n \n \n \n ) : null\n }\n \n ) : null\n }\n \n
\n );\n}\n\ninterface ParcelWeightProps\n{\n value: string;\n index: number;\n onChange: (value: string, index: number) => void;\n}\n\nfunction ParcelWeight(props: ParcelWeightProps)\n{\n const { onChange, value, index } = props;\n\n const onTextFieldChange = useCallback(\n (e: React.ChangeEvent) => onChange(e.target.value, index),\n [index, onChange]\n );\n\n return (\n \n kg\n }}\n fullWidth />\n \n )\n}","import * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { RouteComponentProps } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\n\nimport Paper from \"@material-ui/core/Paper\";\nimport TextField from \"@material-ui/core/TextField\";\nimport DeliveryCard from \"./DeliveryCard\";\nimport Api from \"../../../../api/api\";\nimport { Delivery } from \"../../state\";\n\ninterface Props extends RouteComponentProps\n{\n\n}\n\nexport default function Index(props: Props)\n{\n const [delivery, setDelivery] = useState(null);\n const [query, setQuery] = useState(null);\n\n const onKeyup = (e: React.KeyboardEvent) => \n {\n if(e.keyCode === 13)\n {\n setQuery(e.currentTarget.value);\n }\n else\n {\n setDelivery(null);\n }\n }\n\n useEffect(() => {\n if(query !== null)\n {\n Api.request(`delivery/${query}/address`)\n .then(res => res.ok ? res.json() : Promise.reject(res))\n .then(setDelivery)\n .catch(() => setDelivery(null));\n }\n }, [query]);\n\n\n return (\n
\n \n \n \n {\n (delivery !== null && query !== null) ? (\n
\n \n
\n ) : null\n }\n
\n );\n}","import * as React from \"react\";\nimport { useMemo } from \"react\";\nimport { ModuleProps } from \"../../config\";\n\nimport { Route, Switch } from \"react-router\";\nimport Features from \"./base36/Index\";\nimport { Button } from \"@material-ui/core\";\nimport Delivery from \"./delivery/Index\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\n\nexport interface DeliveryContextObject\n{\n toast: ModuleProps[\"toast\"];\n setBusyIndicatorVisible: (visible: boolean) => void;\n};\n\nexport const DeliveryContext = React.createContext({\n toast: () => {},\n setBusyIndicatorVisible: () => {}\n});\n\nexport interface Props extends ModuleProps\n{\n}\n\nconst queryClient = new QueryClient();\n\nfunction Main(props: Props)\n{\n const { match: { path }, history, toast, isBusy } = props;\n\n const onFeaturesClick = () => history.push(`${path}/features`);\n const onDeliveryClick = () => history.push(`${path}/delivery`);\n\n // useEffect(() => { isBusy(busy) }, [isBusy, busy]);\n\n const context = useMemo(() => ({\n toast, \n setBusyIndicatorVisible: isBusy\n }), [toast, isBusy]);\n\n\n return (\n \n \n \n \n \n (\n
\n \n \n
\n )} />\n
\n
\n
\n );\n}\n\nexport default Main;","import { createModuleStore, createModule } from \"../helper\";\n\nimport App from \"./views/Main\";\nimport reducer from \"./state\";\n\nexport const store = createModuleStore(reducer, \"tools\", 3, { blacklist: [\"ui\", \"features\", \"lookupResult\"] });\nconst ToolsModule = createModule(store, App as any); // TODO Fix App module connect types\n\nexport default ToolsModule;\n","export interface Delivery\n{\n city: string;\n contact: string;\n countryNum: string;\n name1: string;\n name2: string;\n name3: string;\n phone: string;\n street1: string;\n zipCode: string;\n}\n\nconst reducer = (state = {}, action: any) => state;\n\nexport default reducer;","import { History } from \"history\";\nimport { useState, useEffect } from \"react\";\n\nexport function useLocation(history: History)\n{\n const [location, setLocation] = useState(history.location);\n useEffect(\n () => history.listen(location => setLocation(location)),\n [history]\n );\n return location;\n}","import React from \"react\";\nimport { RouteComponentProps, matchPath } from \"react-router\";\nimport i18n from \"es2015-i18n-tag\";\nimport { useRecoilValue } from \"recoil\";\n\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\n\nimport { History } from \"history\";\nimport { useLocation } from \"../../../../hooks/useLocation\";\nimport { searchStatusAtom } from \"../../atoms/base36\";\n\ntype Props = RouteComponentProps;\n\nconst tabRoutes = [\n \"lookup\",\n \"items\",\n \"items/any\"\n];\n\nconst getUrl = (urls: string[], pathname: string) => \n Math.max(0, urls.findIndex(url => isMatch(pathname, url)));\n\nconst isMatch = (url: string, matchUrl: string, exact = true) => \n matchPath(url, { path: matchUrl, exact }) !== null;\n\nfunction useLocationTabs(history: History, urls: string[])\n{\n const location = useLocation(history);\n return getUrl(urls, location.pathname);\n}\n\nconst joinUrl = (baseUrl: string, url: string) => \n (baseUrl + \"/\" + url).replace(/\\/{2,}/, \"/\");\n\nconst Base36Tabs = function (props: Props)\n{\n const { itemsCount, additionalItemsCount } = useRecoilValue(searchStatusAtom);\n const { match: { path: baseUrl }, history } = props;\n \n const activeTab = useLocationTabs(history, tabRoutes.map(url => joinUrl(baseUrl, url)));\n const setActiveTab = (index: number) => history.replace(`${joinUrl(baseUrl, tabRoutes[index])}`);\n\n return (\n setActiveTab(v)}>\n \n \n \n \n )\n}\n\nexport default Base36Tabs;","import * as React from \"react\";\nimport { Provider } from \"react-redux\";\nimport { withRouter, RouteComponentProps, Switch, Route } from \"react-router\";\nimport Base36Tabs from \"../views/base36/Tabs\";\n\nimport { store } from \"..\";\nimport { useLocation } from \"../../../hooks/useLocation\";\n\ntype Props = RouteComponentProps;\n\nfunction AppBarTabs(props: Props)\n{\n const { match: { path }, history } = props;\n const location = useLocation(history);\n\n return (\n \n \n {/* \n )\n}\n\n// hookup the redux provider here as the tabs are rendered further up the UI tree\n// and immediately connect the AppBarTabs to our module store\nexport default () => (\n \n {\n React.createElement(withRouter(AppBarTabs))\n }\n \n);","import { createElement } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Icon from \"@material-ui/icons/Build\";\nimport MainComponent from \".\";\nimport { Module } from \"../config\";\nimport AppBarTabs from \"./components/AppBarTabs\";\n\nconst config: Module =\n{\n title: i18n`Tools`, \n icon: Icon, \n component: MainComponent, \n url: \"/tools\",\n roles: [\"mobility.tools.*\"],\n tabs: createElement(AppBarTabs)\n}\n\nexport default config;\n","import { RouteComponentProps } from \"react-router\";\nimport timeRecording from \"./time-recording/config\";\nimport stockManagement from \"./stock-management/config\";\nimport { ReactElement } from \"react\";\nimport tools from \"./tools/config\";\n\nexport interface Module \n{\n title: string;\n icon: React.ComponentType;\n component: React.ComponentType;\n url: string;\n submenu?: MenuItem[];\n roles: string[];\n tabs?: ReactElement;\n}\n\nexport interface MenuItem\n{\n title: string;\n icon?: React.ComponentType;\n url: string;\n}\n\nexport interface ModuleProps extends RouteComponentProps\n{\n isBusy: (busy: boolean) => void;\n toast: (message: NotificationMessage, timeout?: number) => void;\n username: string | undefined;\n hasRole: (role: string) => boolean;\n}\n\nexport interface NotificationMessage \n{\n message: string;\n severity: Severity;\n}\n\nexport type Severity = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst config: Module[] = [\n timeRecording,\n stockManagement,\n tools\n];\n\nexport default config;\n","import * as React from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport { RootState } from \"../state\";\nimport { getDrawerOpenState } from \"../state\";\nimport { connect } from \"react-redux\";\nimport { drawerOpen } from \"../state/ui/actions\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Typography from \"@material-ui/core/Typography\";\nimport modules from \"../modules/config\";\nimport { Switch, Route } from \"react-router\";\n\nexport interface Props\n{\n title?: string;\n}\n\ntype ConnectedProps = ReturnType & ReturnType;\n\nconst mapStateToProps = (state: RootState) => ({\n isDrawerOpen: getDrawerOpenState(state)\n});\n\nconst mapDispatchToProps = (dispatch: any) => ({\n drawerOpen: (open: boolean) => dispatch(drawerOpen(open))\n});\n\nclass TitleBar extends React.Component\n{\n toggleDrawer = () => this.props.drawerOpen(!this.props.isDrawerOpen);\n\n render()\n {\n return (\n \n \n \n \n \n \n {this.props.title || i18n`Guldmann Mobility`}\n \n \n \n {\n modules.map(module => (\n (module.tabs) ? (\n {module.tabs}\n ) : null\n ))\n }\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TitleBar);","import styled from \"styled-components\";\n\nexport interface Props\n{\n fullHeight?: boolean;\n}\n\n\nconst Center = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: ${(props: Props) => props.fullHeight ? \"100%\" : \"inherit\"}\n`;\n\nexport default Center;","import * as React from \"react\"\nimport i18n from \"es2015-i18n-tag\";\nimport styled from \"styled-components\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { connect } from \"react-redux\";\nimport { Redirect } from \"react-router\";\n\nimport Center from \"../components/Center\";\n\nimport { login } from \"../state/user/action\";\nimport { RootState, isLoggedIn, getLoginPending, getLoginFailed } from \"../state\";\n\nexport interface Props\n{\n}\n\ninterface State\n{\n username: string;\n password: string;\n}\n\nconst mapStateToProps = (state: RootState) => ({\n isLoggedIn: isLoggedIn(state),\n loginPending: getLoginPending(state),\n loginFailed: getLoginFailed(state)\n})\n\nconst mapDispatchToProps = (dispatch: any) => ({\n login: (username: string, password: string) => dispatch(login(username, password) as any)\n});\n\nconst LoginForm = styled.div`\n width: 65%;\n`;\n\ntype ConnectedProps = ReturnType & ReturnType;\n\nclass Login extends React.Component\n{\n private passwordInput?: HTMLInputElement;\n\n state: State = {\n username: \"\",\n password: \"\"\n };\n\n componentWillReceiveProps(nextProps: Props & ConnectedProps)\n {\n if(nextProps.loginFailed && !this.props.loginFailed)\n {\n this.setState({ password: \"\" });\n if(this.passwordInput !== undefined)\n {\n this.passwordInput.focus();\n }\n }\n }\n\n onLoginClick = () => \n {\n let { username, password } = this.state;\n if(username.indexOf(\"\\\\\") < 0)\n {\n username = \"GULDMANN\\\\\" + username\n }\n this.props.login(username, password);\n };\n\n onUsernameChange = (e: React.ChangeEvent) =>\n {\n\n this.setState({username: e.currentTarget.value});\n };\n\n onPasswordChange = (e: React.ChangeEvent) =>\n {\n this.setState({password: e.currentTarget.value});\n };\n\n render()\n {\n const { loginFailed, isLoggedIn } = this.props;\n const { username, password } = this.state;\n const loginDisabled = (this.props.loginPending) || (username === \"\") || (password === \"\");\n\n if(isLoggedIn)\n {\n return ;\n }\n\n return (\n <>\n {\n loginFailed ? (\n
\n {i18n`Login failed. Username or password is invalid.`}\n
\n ) : null\n }\n
\n \n \n this.passwordInput = input} label={i18n`Password`} value={password} onChange={this.onPasswordChange} margin=\"normal\" type=\"password\" fullWidth /> \n \n \n
\n \n );\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);","\nclass UpdateNotificationService\n{\n private callbacks: { [type: string]: Function[] } = {};\n\n addEventListener(type: \"updateavailable\", callback: Function)\n {\n this.callbacks[type] = this.callbacks[type] || [];\n this.callbacks[type].push(callback);\n }\n\n removeEventListener(type: string, callback: Function)\n {\n if(type in this.callbacks)\n {\n this.callbacks[type] = this.callbacks[type].filter(c => c !== callback);\n }\n }\n\n emit(type: \"updateavailable\")\n {\n if(type in this.callbacks)\n {\n this.callbacks[type].forEach(fn => fn());\n }\n }\n}\n\n\n\nexport default new UpdateNotificationService();","import { default as React, useEffect, useState } from \"react\";\nimport i18n from \"es2015-i18n-tag\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport Button, { ButtonProps } from \"@material-ui/core/Button\";\nimport yellow from \"@material-ui/core/colors/yellow\";\nimport withStyles from \"@material-ui/core/styles/withStyles\";\nimport UpdateNotificationService from \"../service/UpdateNotificationService\";\n\nconst styles = {\n yellowButton: {\n color: yellow[500]\n }\n};\n\nconst YellowButton = withStyles(styles)(({ classes, ...other }: ButtonProps & { classes: any }) => \n