{"version":3,"sources":["constants/routes.tsx","utils/helpers.ts","appInsights.ts","../node_modules/pdfjs-dist/build sync","utils/Axios/Interceptors/signingInterceptors.tsx","utils/Axios/Interceptors/authInterceptors.tsx","services/httpClient.ts","styling lazy /^/.*/.css$/ groupOptions: {} namespace object","utils/auth-util.ts","services/auth.service.ts","components/Header.tsx","constants/signingMethods.ts","components/pageBlocks/Spinners.tsx","utils/validations/phoneValidator.ts","utils/validations/estonia/esonian-ssn.ts","utils/validations/ssnValidator.ts","utils/validations/lithuania/lithuania-ssn.ts","utils/validations/latvia/latvia-ssn.ts","components/pageBlocks/MobileIdContentBlock.tsx","components/pageBlocks/IdCardContentBlock.tsx","components/pageBlocks/SmartIdAdvContentBlock.tsx","components/pageBlocks/SmartIdBasicContentBlock.tsx","components/pageBlocks/AuthButtons.tsx","constants/gtmEvents.ts","components/Snippets.tsx","components/TagManager.tsx","components/pageBlocks/PayseraContentBlock.tsx","constants/appConstants.ts","components/pageBlocks/EParakstsContentBlock.tsx","components/pages/LoginPage.tsx","components/pages/LogoutPage.tsx","components/pages/ErrorPage.tsx","components/pages/FailedSign.tsx","components/pages/CallbackPage.tsx","components/pages/SignRootPage.tsx","constants/signingStages.ts","constants/signingStatuses.ts","components/PdfViewer.tsx","constants/documentTypes.ts","constants/payseraStatuses.ts","contexts/SigningContext.tsx","components/pageBlocks/DefaultSigningBlock.tsx","components/pageBlocks/SigningButtons.tsx","utils/hwcrypto.js","components/pageBlocks/IdCardSignBlock.tsx","components/pageBlocks/MobileIdSignBlock.tsx","components/pageBlocks/SmartIdAdvSignBlock.tsx","components/pageBlocks/PayseraSignBlock.tsx","components/pageBlocks/EParakstsSignBlock.tsx","components/pageBlocks/SigningBlock.tsx","components/pageBlocks/SigningCompleteBlock.tsx","components/pages/SignPage.tsx","components/pageBlocks/Footer.tsx","App.tsx","components/pageBlocks/PayseraAuthCallback.tsx","components/pageBlocks/EParakstsAuthCallback.tsx","components/pageBlocks/EParakstsSignCallback.tsx","serviceWorker.ts","i18n.ts","index.tsx","app.config.tsx"],"names":["appRoutes","diagnostic","login","loginWithRequestId","sign","paysera","signRoot","callback","error","logout","eParakstsCallback","eParakstsSignCallback","apiRoutes","adminPing","appConfig","apiBaseUrl","request","id","requestAuthInfo","requestSignedMethod","idCardInitiate","idCardComplete","signingStatus","originalPdf","signedPdf","payseraInitiate","payment","mode","payseraComplete","payseraCallback","payseraStatus","mobileIdSignInitiate","mobileIdSignComplete","smartIdSignInitiate","smartIdSignInitComplete","idCardAuth","authorityBaseUrl","mobileIdAuthInitiate","mobileIdAuthComplete","smartIdAuthInitiate","smartIdAuthComplete","eParakstsGetAuthLink","returnUrl","locale","callbackUrl","eParakstsAuthResult","eParakstsSignInitiate","eParakstsSignComplete","redirectTo","certificateFunctionCode","googleTagManager","key","isPdf","pdf","Error","getErrorWithFullMessage","console","warn","axios","isAxiosError","response","data","status","i18next","t","message","checkErrorStatus401","e","window","location","replace","pathname","getReturnUrl","props","queryString","parse","search","ReturnUrl","getQueryParams","url","URL","decodeURIComponent","params","isMobile","test","navigator","userAgent","substr","downloadPdf","name","a","pdfDocProxy","Blob","getData","downloadBlob","blob","msSaveOrOpenBlob","createObjectURL","link","document","createElement","style","display","href","download","body","appendChild","click","checkIfSignRelatedPage","pathName","toLowerCase","indexOf","possiblyReturnSigningClass","waitForLanguage","language","Promise","resolve","setTimeout","getPhoneForCountry","country","browserHistory","createBrowserHistory","basename","reactPlugin","ReactPlugin","appInsights","ApplicationInsights","config","instrumentationKey","enableUnhandledPromiseRejectionTracking","enableCorsCorrelation","enableRequestHeaderTracking","enableResponseHeaderTracking","distributedTracingMode","DistributedTracingModes","W3C","disableFetchTracking","extensions","extensionConfig","identifier","history","loadAppInsights","trackPageView","addTelemetryInitializer","envelope","logEvent","properties","trackEvent","logError","trackException","exception","severityLevel","SeverityLevel","webpackEmptyContext","req","code","keys","module","exports","onRequest","consoleLog","JSON","stringify","onRequestError","toJSON","reject","onResponse","onResponseError","logInConsole","environment","log","headers","instance","transportWithCredentials","Axios","create","withCredentials","timeout","interceptors","use","trackSigningTelemetryFor","signingInterceptors","httpClient","phoneNumber","signingRequestId","personalNumber","post","userData","getHeadersWithJwtToken","payload","getLastSigningRequestId","get","Array","isArray","requests","getSigningRequestById","idCardSignInitiate","certificateContent","idCardSignComplete","signatureValue","containerId","bank","checkSigningRequestStatus","eParakstsAuthInit","authRequest","selectedLanguage","eParakstsResultGet","queryParams","smartIdAuthInit","smartIdSignComplete","getSignedDocument","responseType","getAuthInfo","getSignedMethod","secretValue","form","action","method","secret","value","redirectUrl","createSigningContainer","submit","redirectToUrl","getGoogleTagManager","getCertificateFunctionCode","webpackEmptyAsyncContext","then","tokenInfo","userManager","getUser","access_token","expires_at","profile","Authorization","getClientSettings","response_mode","undefined","authority","client_id","redirect_uri","origin","response_type","loadUserInfo","post_logout_redirect_uri","scope","UserManager","events","addUserLoaded","user","setAuthenticatedUserContext","sub","Header","AuthMethodType","useTranslation","i18n","changeLanguage","lng","clearStaleState","signoutRedirect","LanguagePicker","Dropdown","as","ButtonGroup","className","onSelect","Toggle","split","variant","src","alt","languages","Menu","Object","map","Item","eventKey","onClick","preventDefault","Navbar","Button","signingMethods","title","type","SmartIdAdv","showInMobile","SmartIdBasic","MobileId","Paysera","Veriff","CardId","eParaksts","authMethods","DefaultSpinner","Spinner","animation","role","validatePhoneNumber","countryCode","phone","isValid","parsePhoneNumberFromString","isPossible","getBirthday","year","parseInt","substring","month","day","Number","firstNumber","charAt","Date","getControlNumber","mod","multiplier1","multiplier2","total","i","validateSsn","length","birthDate","getFullYear","getMonth","getDate","validateEstoniaSsn","object","idNumber","trim","century","gender","checksum","dateOfBirth","b","c","d","digit","String","validateLithuaniaSsn","Boolean","concat","centuryDigit","isNaN","birthDateString","weights","toString","validateLatvianSsn","MobileIdAuthBlock","onError","React","useState","mobileNumber","setMobileNumber","mobileNumberIsValid","setMobileNumberIsValid","setPersonalNumber","personalNumberIsValid","setPersonalNumberIsValid","isWaiting","setIsWaiting","mobileIdAuthData","setMobileIdAuthData","urlParams","useMemo","SigningRequestId","validatePersonalNumber","validateMobileNumber","validateAll","isValidSSN","isValidMobileNumber","Container","Col","xs","Card","Body","Row","challengeId","FormControl","placeholder","onChange","currentTarget","onBlur","isInvalid","defaultValue","Form","Control","Feedback","IdCardHelpText","lang","setLang","line1","line2","line3","useEffect","target","rel","IdCardContentBlock","encodeURIComponent","protocol","host","initialUrl","certificateRequesterBaseUrl","SmartIdAdvLoginBlock","smartIdData","setSmartIdData","nationalIdentityNumber","setNationalIdentityNumber","nationalIdentityNumberIsValid","setNationalIdentityNumberIsValid","getCancelUrl","reload","validateNationalIdentityNumber","Footer","CancelButton","referrer","SmartIdBasicContent","AuthButtons","GtmEvents","methods","active","authButtons","filter","methodId","Snippets","tags","dataLayer","iframe","script","dataLayerVar","this","TagManager","dataScript","innerHTML","gtm","args","snippets","noScript","noscript","initialize","gtmId","head","insertBefore","childNodes","push","buttons","dataBank","imgSrc","altText","PayseraContentBlock","initiatePaysera","row","data-bank","appConstants","EParakstsContentBlock","sessionStorage","setItem","sortAuthMethods","sort","LoginPage","match","setError","success","setSuccess","cancelUrl","setCancelUrl","failUrl","setFailUrl","applicationId","setAppId","authMethod","setAuthMethod","authMethodList","setAuthMethodList","checkCardError","URLSearchParams","cardError","signId","authInfo","trigger","useCallback","tagManagerArgs","applicationID","authenticationMethod","localStorage","getItem","event","AuthenticationFailed","errorMessage","setFullError","getAuthMethods","m","onSuccess","str","requestId","getRedirectUrl","BackToMerchant","Alert","dismissible","onClose","MobileIdContentBlock","SmartIdAdvContentBlock","SmartIdBasicContentBlock","getContentBlock","LogoutPage","ListGroup","ErrorPage","errorObject","FailedSign","CallbackPage","signin","removeItem","signinCallback","SignRootPage","SigningStage","setSigningRequestId","sm","SigningStatus","GlobalWorkerOptions","workerSrc","version","setPdfPage","pageNumber","scale","pdfProxy","getPage","page","viewport","getViewport","canvas","getElementById","height","width","canvasContext","getContext","renderContext","render","PdfViewer","documentTypes","setPdf","setScale","currentPage","setCurrentPage","isMounted","useRef","getPdfFile","headerObject","getDocument","httpHeaders","promise","pdfObject","goBack","newCurrentPage","goNext","numPages","zoomin","newScale","zoomout","PdfControls","unsigned","pdfFile","current","SigningContext","createContext","signingRequest","signingStage","default","fetchSigningRequest","setSigned","setSigningStage","setSigningStatus","redirectToLogin","signinRedirect","extraQueryParams","checkAuth","SigningContextProvider","children","setSigningRequest","setUser","setStyle","autoclose","getStyle","parsedRedirectUrl","parseUrl","query","returnurl","queryRedirect","queryParam","catch","appId","signMethod","signingMethod","SigningFailed","documentType","consent","ConsentFailed","setSignedFunction","justSigned","complete","payseraStatuses","signing","signed","axiosError","Provider","signingForbidden","timeLt","vilnus","findTimeZone","getZonedTime","hours","getLithuaniaHours","startsWith","DefaultSigningBlock","useContext","disableSigning","fileName","auth","AuthenticationSuccess","md","dangerouslySetInnerHTML","__html","interpolation","escapeValue","disabled","from","to","SigningButtons","hwcrypto","hasPluginFor","mime","mimeTypes","hasExtensionFor","cls","_hex2array","len","Math","floor","ret","Uint8Array","_array2hex","addEventListener","attachEvent","digidoc_mime","DigiDocPlugin","_name","p","element","_mimeid","objectTag","div","setAttribute","loadPluginFor","certificate_ids","code2err","err","code2str","check","getVersion","getCertificate","options","pluginLanguage","ver","v","errorCode","cert","hex","ex","hash","cid","info","DigiDocExtension","NoBackend","_backend","fields","_testAndUse","Backend","isLoaded","_autodetect","force","tryDigiDocPlugin","result","backend","debug","hwversion","certificate","encoded","arguments","signature","NO_IMPLEMENTATION","USER_CANCEL","NOT_ALLOWED","NO_CERTIFICATES","TECHNICAL_ERROR","INVALID_ARGUMENT","IdCardSignBLock","waiting","setWaiting","signInitiate","digest","completeSigning","containerID","MobileIdSignBlock","setVerificationCode","verification","verificationCode","SmartIdAdvSignBlock","userCountry","checkSigningStatus","signedCallback","consentError","PayseraSignBlock","payseraData","setPayseraData","checkPayseraStatus","isSigned","successUrl","EParakstsSignBlock","SigningBlock","promissoryNote","includes","setSigningMethod","IdCardSignBlock","getSigningView","SigningCompleteBlock","isConsent","isConsentSignLt","SigningSuccess","ConsentSuccess","downloadSignedDocument","extension","SignPage","getRenderBlock","statusResponse","authenticated","redirect_to","failed","PayseraAuthCallback","Title","EParakstsAuthCallback","errorMsg","authResult","EParakstsSignCallback","require","DiagnosticPage","lazy","process","App","fallback","path","Suspense","exact","component","hostname","LanguageDetector","initReactI18next","init","keySeparator","whitelist","fallbackLng","detection","order","ReactDOM","serviceWorker","ready","registration","unregister","lt","en"],"mappings":"uIAAA,+EAEaA,EAAY,CACrBC,WAAY,cACZC,MAAO,SACPC,mBAAoB,qBACpBC,KAAM,qBACNC,QAAS,eACTC,SAAU,QACVC,SAAU,YACVC,MAAO,aACPC,OAAQ,UACRC,kBAAmB,sBACnBC,sBAAuB,2BAGdC,EAAY,CACrBC,UAAU,GAAD,OAAKC,IAAUC,WAAf,mBACTC,QAAS,SAACC,GAAD,gBAAmBH,IAAUC,WAA7B,yBAAwDE,IACjEC,gBAAiB,SAACD,GAAD,gBACVH,IAAUC,WADA,yBAC2BE,EAD3B,cAEjBE,oBAAqB,SAACF,GAAD,gBACdH,IAAUC,WADI,gCAC8BE,IACnDG,eAAgB,SAACH,GAAD,gBACTH,IAAUC,WADD,uBAC0BE,EAD1B,cAEhBI,eAAgB,SAACJ,GAAD,gBACTH,IAAUC,WADD,uBAC0BE,EAD1B,cAEhBK,cAAe,SAACL,GAAD,gBACRH,IAAUC,WADF,4BACgCE,IAC/CM,YAAa,SAACN,GAAD,gBAAmBH,IAAUC,WAA7B,0BAAyDE,IACtEO,UAAW,SAACP,GAAD,gBAAmBH,IAAUC,WAA7B,4BAA2DE,IACtEQ,gBAAiB,SAACR,EAAYS,GAAb,IAA8BC,EAA9B,uDAAqC,IAArC,gBACVb,IAAUC,WADA,wBAC0BE,EAD1B,qBACyCS,EADzC,iBACyDC,IAC1EC,gBAAiB,SAACX,GAAD,gBACVH,IAAUC,WADA,wBAC0BE,EAD1B,cAEjBY,gBAAiB,SAACZ,GAAD,gBACVH,IAAUC,WADA,wBAC0BE,EAD1B,cAEjBa,cAAe,SAACb,GAAD,gBACRH,IAAUC,WADF,wBAC4BE,EAD5B,YAEfc,qBAAqB,GAAD,OAAKjB,IAAUC,WAAf,+BACpBiB,qBAAqB,GAAD,OAAKlB,IAAUC,WAAf,+BACpBkB,oBAAoB,GAAD,OAAKnB,IAAUC,WAAf,8BACnBmB,wBAAwB,GAAD,OAAKpB,IAAUC,WAAf,8BACvBoB,WAAY,SAAClB,GAAD,gBACLH,IAAUsB,iBADL,2BACwCnB,GAAM,KAC1DoB,qBAAqB,GAAD,OAAKvB,IAAUsB,iBAAf,8BACpBE,qBAAqB,GAAD,OAAKxB,IAAUsB,iBAAf,8BACpBG,oBAAoB,GAAD,OAAKzB,IAAUsB,iBAAf,6BACnBI,oBAAoB,GAAD,OAAK1B,IAAUsB,iBAAf,6BACnBK,qBAAsB,SAACxB,EAAYyB,EAAkBC,EAAeC,GAA9C,gBACf9B,IAAUsB,iBADK,oDACuDnB,EADvD,mBACoE0B,EADpE,wBAC0FC,EAD1F,sBACmHF,IACzIG,oBAAoB,GAAD,OAAK/B,IAAUsB,iBAAf,6BACnBU,sBAAsB,GAAD,OAAKhC,IAAUC,WAAf,gCACrBgC,sBAAsB,GAAD,OAAKjC,IAAUC,WAAf,gCACrBiC,WAAW,GAAD,OAAKlC,IAAUsB,iBAAf,uBACVa,wBAAwB,GAAD,OAAKnC,IAAUsB,iBAAf,iCACvBc,iBAAkB,SAACC,GAAD,gBACXrC,IAAUsB,iBADC,oBAC2Be,M,ugBCnD1C,SAASC,EAAMC,GAClB,OAAOA,KAASA,aAAeC,OAG5B,SAASC,EAAwB/C,GAGpC,OAFAgD,QAAQC,KAAKjD,GAEQ,kBAAVA,EACAA,EAGPkD,IAAMC,aAAanD,IAAUA,EAAMoD,UAAYpD,EAAMoD,SAASC,KACvD,IAAIP,MACP9C,EAAMoD,SAASE,OAAS,IAClBtD,EAAMoD,SAASC,KACfE,IAAQC,EAAE,kBAIjB,IAAIV,MAAM9C,EAAMyD,SAGpB,SAASC,EAAoBC,GAChC,UAAI,iBAAkBA,KAAKA,EAAEP,UAAkC,MAAtBO,EAAEP,SAASE,UAChDM,OAAOC,SAASC,QACZF,OAAOC,SAASE,SAASD,QAAQ,OAAQ,WAEtC,GAMR,SAASE,IACZ,IAAMC,EAAQC,IAAYC,MAAMP,OAAOC,SAASO,QAIhD,OAAOH,EAAQA,EAAMI,UAAY,GAY9B,SAASC,IAKZ,IAAQD,EAAcH,IAAYC,MAAMP,OAAOC,SAASO,QAAhDC,UAIR,GAAIA,EAAW,CACX,IAAME,EAAM,IAAIC,IAAIC,mBAAmBJ,IACjCK,EAAcR,IAAYC,MAAMI,EAAIH,QAE1C,OAAO,2BAAKM,GAAZ,IAAoBL,cAGxB,MAAO,CAAEA,aAWN,SAASM,IAEZ,MACI,qUAAqUC,KACjUC,UAAUC,YAGd,0kDAA0kDF,KACtkDC,UAAUC,UAAUC,OAAO,EAAG,IAKnC,SAAeC,EAAtB,oC,4CAAO,WACHnC,EACAoC,GAFG,eAAAC,EAAA,yDAIEtC,EAAMC,GAJR,wDAMCsC,EAActC,EANf,KAQcuC,KARd,SAQ0BD,EAAYE,UARtC,+BAUHC,EAVG,eAUgBL,GAVhB,6C,sBAaA,SAASK,EAAaC,EAAYN,GACrC,GAAIrB,OAAOiB,UAAUW,iBACjB5B,OAAOiB,UAAUW,iBAAiBD,EAAMN,OAD5C,CAKA,IAAM5B,EAAOO,OAAOY,IAAIiB,gBAAgBF,GAClCG,EAAOC,SAASC,cAAc,KACpCF,EAAKG,MAAMC,QAAU,OACrBJ,EAAKK,KAAO1C,EACZqC,EAAKM,SAAWf,EAChBU,SAASM,KAAKC,YAAYR,GAC1BA,EAAKS,SAYF,SAASC,IACZ,IAAMC,EAAWzC,OAAOC,SAASE,SAASuC,cAE1C,OAAOD,EAASE,QAAQ,SAAW,GAAKF,EAASE,QAAQ,aAAe,EAGrE,SAASC,IACZ,OAAOJ,IAA2B,WAAa,GAG5C,SAAeK,IAAtB,+B,4CAAO,sBAAAvB,EAAA,0DACC3B,IAAQmD,SADT,yCAC0BC,QAAQC,QAAQrD,IAAQmD,WADlD,uBAGG,IAAIC,SAAQ,SAACC,GAAD,OAAaC,WAAWD,EAAS,QAHhD,gCAIIH,KAJJ,4C,sBAOA,SAASK,EAAmBC,GAC/B,MAAgB,OAAZA,EAAyB,OACb,OAAZA,EAAyB,OAEtB,K,qMCjJLC,EAAiBC,YAAqB,CAAEC,SAAU,KAClDC,EAAmB,IAAIC,IACvBC,EAAc,IAAIC,IAAoB,CAC1CC,OAAQ,CACNC,mBAAoBlH,IAAUkH,mBAC9BC,yCAAyC,EACzCC,uBAAuB,EACvBC,6BAA6B,EAC7BC,8BAA8B,EAC9BC,uBAAwBC,IAAwBC,IAChDC,sBAAsB,EACtBC,WAAY,CAACd,GACbe,gBAAgB,eACbf,EAAYgB,WAAa,CAAEC,QAASpB,OAK3CK,EAAYgB,kBACZhB,EAAYiB,gBACZjB,EAAYkB,yBAAwB,SAACC,GAC/BA,EAASnF,OACXmF,EAASnF,KAAK0D,QAAUzG,IAAUyG,YAItC,IAAM0B,EAAW,SAACxD,EAAcyD,GAC9BrB,EAAYsB,WAAW,CACrB1D,KAAMA,EACNyD,WAAY,CAAEA,iBAGZE,EAAW,SAAC5I,GAChBqH,EAAYwB,eAAe,CACzB7I,MAAOA,EACP8I,UAAW9I,EACX+I,cAAeC,IAAclG,U,kBC7CjC,SAASmG,EAAoBC,GAC5B,IAAIvF,EAAI,IAAIb,MAAM,uBAAyBoG,EAAM,KAEjD,MADAvF,EAAEwF,KAAO,mBACHxF,EAEPsF,EAAoBG,KAAO,WAAa,MAAO,IAC/CH,EAAoBrC,QAAUqC,EAC9BI,EAAOC,QAAUL,EACjBA,EAAoBxI,GAAK,K,4HCCnB8I,EAAS,uCAAG,WAChBhC,GADgB,SAAArC,EAAA,6DAGhBsE,EAAW,cAAD,OAAeC,KAAKC,UAAUnC,GAA9B,MACVkB,YAAS,qBAAsB,CAAElB,OAAO,GAAD,OAAKkC,KAAKC,UAAUnC,MAJ3C,kBAKTA,GALS,2CAAH,sDAQToC,EAAiB,SAAC3J,GAGtB,OAFAgD,QAAQhD,MAAR,2BAAkCA,EAAM4J,OAAxC,MACAhB,YAAS5I,GACF2G,QAAQkD,OAAO7J,IAGlB8J,EAAa,SAAC1G,GAOlB,OANAoG,EAAW,eAAD,OAAgBC,KAAKC,UAAUtG,GAA/B,MACVqF,YAAS,sBAAuB,CAC9BlE,IAAKnB,EAASmE,OAAOhD,IACrBjB,OAAQF,EAASE,OACjBD,KAAMD,EAASC,OAEVD,GAGH2G,EAAkB,SAAC/J,GAIvB,OAHAwJ,EAAW,qBAAD,OAAsBC,KAAKC,UAAU1J,GAArC,MACV4I,YAAS5I,GAEF2G,QAAQkD,OAAO7J,IAGlBgK,EAAyC,eAA1B1J,IAAU2J,YACzBT,EAAa,SAAC/F,GACduG,GAAchH,QAAQkH,IAAIzG,IChChC,IAAM8F,EAAS,uCAAG,WAChBhC,GADgB,SAAArC,EAAA,sEAG0BuB,cAH1B,cAGhBc,EAAO4C,QAAQ,mBAHC,OAIhBX,EAAWjC,EAAO4C,SAClBX,EAAW,cAAD,OAAeC,KAAKC,UAAUnC,GAA9B,MACVkB,YAAS,kBAAmB,CAAElB,OAAO,GAAD,OAAKkC,KAAKC,UAAUnC,MANxC,kBAOTA,GAPS,2CAAH,sDAUToC,EAAiB,SAAC3J,GAGtB,OAFAwJ,EAAW,oBAAD,OAAqBxJ,EAAM4J,OAA3B,MACVhB,YAAS5I,GACF2G,QAAQkD,OAAO7J,IAGlB8J,EAAa,SAAC1G,GAOlB,OANAoG,EAAW,eAAD,OAAgBC,KAAKC,UAAUtG,GAA/B,MACVqF,YAAS,mBAAoB,CAC3BlE,IAAKnB,EAASmE,OAAOhD,IACrBjB,OAAQF,EAASE,OACjBD,KAAMD,EAASC,OAEVD,GAGH2G,EAAkB,SAAC/J,GAIvB,OAHAwJ,EAAW,qBAAD,OAAsBC,KAAKC,UAAU1J,GAArC,MACV4I,YAAS5I,GAEF2G,QAAQkD,OAAO7J,IAGlBgK,EAAyC,eAA1B1J,IAAU2J,YACzBT,EAAa,SAAC/F,GACduG,GAAchH,QAAQkH,IAAIzG,ICzBhC,ID4BkC2G,EC5B5BC,ID4B4BD,EC3BhCE,IAAMC,OAAO,CACXC,iBAAiB,EACjBC,QAAS,OD0BFC,aAAalK,QAAQmK,IAAIpB,EAAWI,GAC7CS,EAASM,aAAatH,SAASuH,IAAIb,EAAYC,GACxCK,GCxBHQ,EFkBC,SAA2BR,GAGhC,OAFAA,EAASM,aAAalK,QAAQmK,IAAIpB,EAAWI,GAC7CS,EAASM,aAAatH,SAASuH,IAAIb,EAAYC,GACxCK,EErBwBS,CAAoBP,IAAMC,OAAO,KAE5DO,EAAa,CACXjJ,qBADW,SAEfkJ,EACAC,EACAC,EACA/I,EACA6E,GACC,OAAD,4HACuBsD,EAAyBa,KAC9C9K,IAAUyB,qBACV,CACEkJ,cACAC,mBACA9I,YACA+I,iBACAlE,YARJ,uBACQ1D,EADR,EACQA,KADR,kBAYOA,GAZP,8CAeIvB,qBAtBW,SAsBUqJ,GAAkC,OAAD,wHACnCd,EADmC,KAKxDjK,IAAU0B,qBAL8C,KAMxDqJ,EANwD,SAOlDC,cAPkD,wCACVF,KADU,6CAClD7H,EADkD,EAClDA,KADkD,uBAWlD,IAAIP,MAAM,gDAXwC,iCAcnDO,GAdmD,+CAiBtD9B,qBAvCW,SAuCU8J,GAGvB,OAAD,wHACsBT,EADtB,KAECxK,IAAUmB,qBAFX,KAGC8J,EAHD,SAIOD,cAJP,wCAC+CF,KAD/C,iDACO7H,EADP,EACOA,KADP,kBAOMA,GAPN,+CAUG7B,qBApDW,SAoDU6J,GAKvB,OAAD,wHACsBT,EADtB,KAECxK,IAAUoB,qBAFX,KAGC6J,EAHD,SAIOD,cAJP,wCAC+CF,KAD/C,iDACO7H,EADP,EACOA,KADP,kBAOMA,GAPN,+CAUGiI,wBAnEW,WAmEgB,OAAD,4HACPV,EAAyBW,IAAInL,IAAUC,WADhC,uBACtBgD,EADsB,EACtBA,KADsB,kBAGvBmI,MAAMC,QAAQpI,EAAKqI,UAAarI,EAAKqI,SAAS,GAAgB,IAHvC,8CAM1BC,sBAzEW,SAyEWlL,GAAa,OAAD,wHACfmK,EADe,KAEpCxK,IAAUI,QAAQC,GAFkB,SAG9B2K,cAH8B,wCACUG,IADV,4CAC9BlI,EAD8B,EAC9BA,KAD8B,kBAM/BA,GAN+B,+CAkBlCuI,mBA3FW,SA2FQnL,EAAYoL,GAA6B,OAAD,iIAEtCjB,EAFsC,KAG3DxK,IAAUQ,eAAeH,GAHkC,KAI3D,CAAEoL,sBAJyD,SAKrDT,cALqD,wCAEbF,KAFa,iDAErD7H,EAFqD,EAErDA,KAMRL,QAAQC,KAAKwG,KAAKC,UAAUrG,IARiC,kBAUtDA,GAVsD,qCAY7DgE,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACjCpF,YAAoB,EAAD,IAbqC,yFAmB3DoI,mBA9GW,SA+Gfd,EACAe,EACAC,GACoD,OAAD,iIAE1BpB,EAF0B,KAG/CxK,IAAUS,eAAemK,GAHsB,KAI/C,CAAEe,iBAAgBC,cAAahB,oBAJgB,SAKzCI,cALyC,wCAEDF,KAFC,iDAEzC7H,EAFyC,EAEzCA,KAMRL,QAAQC,KAAKwG,KAAKC,UAAUrG,GAAO,sBARc,kBAU1CA,GAV0C,qCAYjDgE,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACjCpF,YAAoB,EAAD,IAbyB,yFAmB/CtC,gBArIW,SAqIKX,GAAa,OAAD,iIAEPmK,EAFO,KAG5BxK,IAAUgB,gBAAgBX,GAHE,SAItB2K,cAJsB,wCAEkBG,IAFlB,4CAEtBlI,EAFsB,EAEtBA,KAFsB,kBAOvBA,GAPuB,qCAS9BgE,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACjCpF,YAAoB,EAAD,IAVM,yFAgB5BzC,gBArJW,SAqJKR,EAAYwL,EAAc9K,GAAgB,OAAD,iIAEpCyJ,EAFoC,KAGzDxK,IAAUa,gBAAgBR,EAAIwL,EAAM9K,GAHqB,SAInDiK,cAJmD,wCAEXG,IAFW,4CAEnDlI,EAFmD,EAEnDA,KAFmD,kBAOpDA,GAPoD,qCAS3DgE,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACjCpF,YAAoB,EAAD,IAVmC,yFAgBzDpC,cArKW,SAqKGb,GAAa,OAAD,qIAELmK,EAAyBW,IAC9CnL,IAAUkB,cAAcb,IAHE,uBAEpB4C,EAFoB,EAEpBA,KAFoB,kBAMrBA,GANqB,gCAQ5BgE,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KARV,4DAY1BoD,0BAjLW,SAiLezL,GAAa,OAAD,wHACnBmK,EADmB,KAExCxK,IAAUU,cAAcL,GAFgB,SAGlC2K,cAHkC,wCACMG,IADN,4CAClClI,EADkC,EAClCA,KADkC,kBAMnCA,GANmC,+CAStC8I,kBA1LW,SA0LOC,GAKpB,OAAD,4HAEO/B,EAAyBkB,IAC7BnL,IAAU6B,qBAAqBmK,EAAYpB,iBAAkBoB,EAAYlK,UAAWkK,EAAYC,iBAAkBD,EAAYhK,cAHjI,uBACOiB,EADP,EACOA,KADP,kBAMMA,GANN,8CASGiJ,mBAxMW,SAwMQC,EAAqBnK,GAAsB,OAAD,0HAE5DiI,EAAyBkB,IAC9BnL,IAAUiC,oBAAV,UACGkK,EADH,wBAC8BnK,IAJmC,UAO/C,OANdiB,EAD6D,QAO1DC,OAP0D,yCAQ3DD,EAAKA,MARsD,aAU7D,IAAIP,MAAM,uBAVmD,8CAa7D0J,gBArNW,SAqNKJ,GAKlB,OAAD,4HAEO/B,EAAyBa,KAC7B9K,IAAU2B,oBACVqK,GAJH,uBACO/I,EADP,EACOA,KADP,kBAOMA,GAPN,8CAUGrB,oBApOW,SAoOSoK,GAAsC,OAAD,4HACtC/B,EAAyBa,KAG7C9K,IAAU4B,oBAAqBoK,GAJ2B,uBACrD/I,EADqD,EACrDA,KADqD,kBAMtDA,GANsD,8CASzD5B,oBA7OW,SA6OS4J,GAGtB,OAAD,wHACsBT,EADtB,KAECxK,IAAUqB,oBAFX,KAGC4J,EAHD,SAIOD,cAJP,wCAC+CF,KAD/C,iDACO7H,EADP,EACOA,KADP,kBAOMA,GAPN,+CAUGoJ,oBA1PW,SA0PSpB,GAKtB,OAAD,wHACsBT,EADtB,KAECxK,IAAUsB,wBAFX,KAGC2J,EAHD,SAIOD,cAJP,wCAC+CF,KAD/C,iDACO7H,EADP,EACOA,KADP,kBAOMA,GAPN,+CAUGf,sBAzQW,SAyQW+I,GAIxB,OAAD,wHACsBT,EADtB,KAECxK,IAAUkC,sBAFX,KAGC+I,EAHD,SAIOD,cAJP,wCAC+CF,KAD/C,iDACO7H,EADP,EACOA,KADP,kBAOMA,GAPN,+CAUGd,sBAvRW,SAuRWgK,EAAqBnK,EAAqB4I,GAA2B,OAAD,wHACvEJ,EADuE,KAE5FxK,IAAUmC,sBAAV,UACGgK,EADH,wBAC8BnK,EAD9B,eACgD4I,GAH4C,SAItFI,cAJsF,wCAC9CG,IAD8C,4CACtFlI,EADsF,EACtFA,KADsF,kBAOvFA,GAPuF,+CAU1FqJ,kBAjSW,SAiSO1B,GAA2B,OAAD,qHAC1CzG,EAAMnE,IAAUY,UAAUgK,GADgB,KAGzBJ,EAHyB,KAGSrG,EAHT,mCAIpC6G,cAJoC,iEAK9CuB,aAAc,QALgC,6CAGApB,IAHA,6CAGxClI,EAHwC,EAGxCA,KAHwC,kBAQzCA,GARyC,+CAW5CuJ,YA5SW,SA4SC5B,GAA2B,OAAD,qHACpCzG,EAAMnE,IAAUM,gBAAgBsK,GADI,KAGnBV,IAHmB,KAIxC/F,EAJwC,SAKlC6G,cALkC,wCAGbG,IAHa,4CAGlClI,EAHkC,EAGlCA,KAHkC,kBAQnCA,GARmC,+CAWtCwJ,gBAvTW,SAuTK7B,GAA2B,OAAD,qHACxCzG,EAAMnE,IAAUO,oBAAoBqK,GADI,KAGvBV,IAHuB,KAI5C/F,EAJ4C,SAKtC6G,cALsC,wCAGjBG,IAHiB,4CAGtClI,EAHsC,EAGtCA,KAHsC,kBAQvCA,GARuC,+CAWhDb,WAlUiB,SAkUN+B,EAAauI,GACtB,IAAMC,EAAOpH,SAASC,cAAc,QACpCmH,EAAKlH,MAAMC,QAAU,OACrBiH,EAAKC,OAAS5M,IAAUoC,WACxBuK,EAAKE,OAAS,OAEd,IAAIC,EAASvH,SAASC,cAAc,SACpCsH,EAAOjI,KAAO,SACdiI,EAAOC,MAAQL,EAEf,IAAIM,EAAczH,SAASC,cAAc,SACzCwH,EAAYnI,KAAO,cACnBmI,EAAYD,MAAQ5I,EAEpB,IAAI8I,EAAyB1H,SAASC,cAAc,SACpDyH,EAAuBpI,KAAO,yBAC9BoI,EAAuBF,MAAQ,QAE/BJ,EAAK7G,YAAYgH,GACjBH,EAAK7G,YAAYkH,GACjBL,EAAK7G,YAAYmH,GAEjB1H,SAASM,KAAKC,YAAY6G,GAC1BA,EAAKO,UAGPC,cA5ViB,SA4VHhJ,GACZ,IAAMwI,EAAOpH,SAASC,cAAc,QACpCmH,EAAKlH,MAAMC,QAAU,OACrBiH,EAAKC,OAASzI,EACdwI,EAAKE,OAAS,MASdtH,SAASM,KAAKC,YAAY6G,GAC1BA,EAAKO,UAGDE,oBA7WW,SA6WS7K,GAA0B,OAAD,8HAEzC4B,EAAMnE,IAAUsC,iBAAiBC,GAFQ,SAIxB2H,IAAMiB,IAAYhH,GAJM,uBAIvClB,EAJuC,EAIvCA,KAJuC,kBAKxCA,GALwC,uGAW7CoK,2BAxXW,WAwXmB,OAAD,8HAEzBlJ,EAAMnE,IAAUqC,wBAFS,SAIR6H,IAAMiB,IAAYhH,GAJV,uBAIvBlB,EAJuB,EAIvBA,KAJuB,kBAKxBA,GALwB,wGAYtByH,O,kBCjaf,SAAS4C,EAAyBxE,GAGjC,OAAOvC,QAAQC,UAAU+G,MAAK,WAC7B,IAAIhK,EAAI,IAAIb,MAAM,uBAAyBoG,EAAM,KAEjD,MADAvF,EAAEwF,KAAO,mBACHxF,KAGR+J,EAAyBtE,KAAO,WAAa,MAAO,IACpDsE,EAAyB9G,QAAU8G,EACnCrE,EAAOC,QAAUoE,EACjBA,EAAyBjN,GAAK,K,2JCP1BmN,EAA2B,GAExB,SAAexC,IAAtB,+B,4CAAO,kCAAAlG,EAAA,sEAKQ2I,IAAYC,UALpB,gDAKkC,CAAEC,aAAc,IALlD,qBAECA,EAFD,EAECA,aACAC,EAHD,EAGCA,WACAC,EAJD,EAICA,QAGAF,GAAgBH,EAAUG,eAAiBA,IAC3CH,EAAY,CAAEI,aAAYC,UAASF,gBAEnC1G,IAAYsB,WAAW,CACnB1D,KAAM,mBACNyD,WAAY,CAAEsF,aAAYC,cAZ/B,KAkBoBF,GAAY,iBAAcA,GAlB9C,UAmB8BtH,cAnB9B,iCAkBKyH,cAlBL,KAmBK,kBAnBL,yBAiBC/D,QAjBD,oD,wDCPP,gGAIO,SAASgE,IAAuF,IAArEC,EAAoE,4DAAhCC,EAElE,MAAO,CACHC,UAAWhO,IAAUsB,iBACrB2M,UAAW,sBACXC,aAAa,GAAD,OAAK5K,OAAOC,SAAS4K,OAArB,aACZC,cAAe,OACfC,cAAc,EACdC,yBAAyB,GAAD,OAAKhL,OAAOC,SAAS4K,OAArB,WACxBI,MAAO,6BACPT,iBASD,IAAMP,EAHF,IAAIiB,cAAYX,KAK3BN,EAAYkB,OAAOC,eAAc,SAACC,GAC9B5H,IAAY6H,4BAA4BD,EAAKhB,QAAQkB,SAAKd,GAAW,O,mZCsD1De,IC9EVC,ED8EUD,EAzEf,WAGI,MAAoBE,cAAZ9L,EAAR,EAAQA,EAAG+L,EAAX,EAAWA,KAMX,SAASC,EAAeC,GACpBF,EAAKC,eAAeC,GAVV,4CAad,sBAAAvK,EAAA,sEAEU2I,IAAY6B,kBAFtB,OAGI7B,IAAY8B,kBAHhB,4CAbc,sBAmBd,SAASC,IACL,OACI,6BACI,kBAACC,EAAA,EAAD,CAAUC,GAAIC,IAAaC,UAAU,kBAAkBC,SAAUT,GAC7D,kBAACK,EAAA,EAASK,OAAV,CAAiBC,OAAK,EAACC,QAAQ,gBAAgB3P,GAAG,wBAE9C,0BAAMuP,UAAU,qBACZ,yBAAKK,IAAK,mBAAqBd,EAAK7I,SAAW,OAAQ4J,IAAKhQ,IAAUiQ,UAAUhB,EAAK7I,UAA4B,YAGzH,kBAACmJ,EAAA,EAASW,KAAV,CAAeR,UAAU,uBACpBS,OAAOrH,KAAK9I,IAAUiQ,WAAWG,KAAI,SAAC/N,GAAD,OAClC,kBAACkN,EAAA,EAASc,KAAV,CAAeC,SAAUjO,EAAKA,IAAKA,GAC/B,6BAAK,6BAAMrC,IAAUiQ,UAAU5N,KAC/B,6BAAK,yBAAK0N,IAAK,mBAAqB1N,EAAM,OAAQ2N,IAAKhQ,IAAUiQ,UAAU5N,GAAuB,kBAW9H,OACI,yBAAKqN,UAAU,yCAAyCvP,GAAG,aAEvD,yBAAKuP,UAAU,aACX,yBAAKA,UAAU,iBACX,uBAAGA,UAAU,eAAejK,KAAK,IAAI8K,QA5CrD,SAA0BlN,GACtBA,EAAEmN,mBA4Cc,yBAAKd,UAAW5J,cAA2B,mBAAqB,WAGxE,kBAAC2K,EAAA,EAAD,CAAQf,UAAU,gBAEd,kBAACJ,EAAD,MAECxJ,cACK,yBAAK4J,UAAU,UACb,kBAACgB,EAAA,EAAD,CACIhB,UAAU,mBACVa,QA7Dd,4CA8Dc,0BAAMb,UAAU,gCAHpB,IAGsDxM,EAAE,YAG1D,S,8DCtErB6L,O,qBAAAA,I,mBAAAA,I,uBAAAA,I,mBAAAA,I,2BAAAA,I,+BAAAA,I,2BAAAA,M,KAUUA,QAEF4B,EAAmC,CAC5C,CACIC,MAAO,WACPC,KAAM9B,EAAe+B,WACrBC,cAAc,EACdrB,UAAW,aAEf,CACIkB,MAAO,iBACPC,KAAM9B,EAAeiC,aACrBD,cAAc,EACdrB,UAAW,aAEf,CACIkB,MAAO,YACPC,KAAM9B,EAAekC,SACrBF,cAAc,EACdrB,UAAW,cAEf,CACIkB,MAAO,UACPC,KAAM9B,EAAemC,QACrBH,cAAc,EACdrB,UAAW,aAEf,CACIkB,MAAO,SACPC,KAAM9B,EAAeoC,OACrBJ,cAAc,EACdrB,UAAW,UAEf,CACIkB,MAAO,UACPC,KAAM9B,EAAeqC,OACrBL,cAAe1M,cACfqL,UAAW,YAEf,CACIkB,MAAO,GACPC,KAAM9B,EAAesC,UACrBN,cAAc,EACdrB,UAAW,cAIN4B,EAAgC,CACzC,CACIV,MAAO,WACPC,KAAM9B,EAAe+B,WACrBC,cAAc,EACdrB,UAAW,aAEf,CACIkB,MAAO,YACPC,KAAM9B,EAAekC,SACrBF,cAAc,EACdrB,UAAW,cAEf,CACIkB,MAAO,UACPC,KAAM9B,EAAemC,QACrBH,cAAc,EACdrB,UAAW,aAEf,CACIkB,MAAO,UACPC,KAAM9B,EAAeqC,OACrBL,cAAe1M,cACfqL,UAAW,YAEf,CACIkB,MAAO,GACPC,KAAM9B,EAAesC,UACrBN,cAAc,EACdrB,UAAW,c,oCCpFZ,SAAS6B,IACd,IAAQrO,EAAM8L,cAAN9L,EACR,OACE,yBAAKwM,UAAU,iCACb,kBAAC8B,EAAA,EAAD,CAASC,UAAU,SAASC,KAAK,WACjC,0BAAMhC,UAAU,WAAWxM,EAAE,a,qBCPtByO,EAAsB,SAAC9E,EAAe+E,GAA8B,IAAD,IAExEC,EAGa,EAFbC,GAAU,EAEd,GAAIF,IAGAE,KADAD,EAAQE,YAA2BlF,EAAO+E,MAEpCC,EAAMG,eAAgB,UAAAH,EAAMpL,eAAN,eAAeT,iBAAkB4L,IAGhD,OAAOE,EAQxB,OAJAA,KADAD,EAAK,UAAGA,SAAH,QAAYE,YAA2BlF,MAEtCgF,EAAMG,eAAgB,UAAAH,EAAMpL,eAAN,eAAeT,iBAAkB4L,ICd3DK,EAAc,SAAUpJ,GAC1B,IAAIqJ,EAAOC,SAAStJ,EAAKuJ,UAAU,EAAG,IAClCC,EAAQF,SAAStJ,EAAKuJ,UAAU,EAAG,GAAG5O,QAAQ,KAAM,KAAO,EAC3D8O,EAAMC,OAAO1J,EAAKuJ,UAAU,EAAG,GAAG5O,QAAQ,KAAM,KAChDgP,EAAc3J,EAAK4J,OAAO,GAY9B,OATIP,GADgB,MAAhBM,GAAuC,MAAhBA,EACf,KACe,MAAhBA,GAAuC,MAAhBA,EACtB,KACe,MAAhBA,GAAuC,MAAhBA,EACtB,IAEA,KAGL,IAAIE,KAAKR,EAAMG,EAAOC,IAQ3BK,EAAmB,SAAU9J,GAM/B,IALA,IAEI+J,EAFAC,EAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1CC,EAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAE1CC,EAAQ,EAEHC,EAAI,EAAGA,EAAI,GAAIA,IACpBD,GAASR,OAAO1J,EAAK4J,OAAOO,IAAMH,EAAYG,GAKlD,GAHAJ,EAAMG,EAAQ,GAEdA,EAAQ,EACJ,KAAOH,EAAK,CACZ,IAAKI,EAAI,EAAGA,EAAI,GAAIA,IAChBD,GAASR,OAAO1J,EAAK4J,OAAOO,IAAMF,EAAYE,GAG9C,MADJJ,EAAMG,EAAQ,MAEVH,EAAM,GAGd,OAAOA,GC5CJ,SAASK,EAAYpG,GAExB,IAAIiF,GAAU,EACd,OAAQ9R,IAAUyG,SACd,IAAK,KAGD,OADAqL,ED8CL,SAA6BjJ,GAChC,GAAoB,KAAhBA,EAAKqK,OACL,OAAO,EAGX,GADcP,EAAiB9J,KACfsJ,SAAStJ,EAAK4J,OAAO,KACjC,OAAO,EAGX,IAAIP,EAAOK,OAAO1J,EAAKpE,OAAO,EAAG,IAC7B4N,EAAQE,OAAO1J,EAAKpE,OAAO,EAAG,IAC9B6N,EAAMC,OAAO1J,EAAKpE,OAAO,EAAG,IAC5B0O,EAAYlB,EAAYpJ,GAC5B,OAAOqJ,IAASiB,EAAUC,cAAgB,KAAOD,EAAUE,WAAa,IAAMhB,GAASC,IAAQa,EAAUG,UC3DvFC,CAAmB1G,GAGjC,IAAK,KAED,IAAM2G,ECfX,SAA8BC,GAEjC,IAAKA,EACD,OAAO,EAIX,GAAwB,MADxBA,EAAWA,EAASC,QACPR,OACT,OAAO,EAGX,IAAIS,EACAC,EAASH,EAAS,GAEtB,OAAQG,GACJ,IAAK,IACDA,EAAS,OACTD,EAAU,GACV,MACJ,IAAK,IACDC,EAAS,SACTD,EAAU,GACV,MACJ,IAAK,IACDC,EAAS,OACTD,EAAU,GACV,MACJ,IAAK,IACDC,EAAS,SACTD,EAAU,GACV,MACJ,IAAK,IACDC,EAAS,OACTD,EAAU,GACV,MACJ,IAAK,IACDC,EAAS,SACTD,EAAU,GACV,MACJ,QACI,OAAO,EAUf,IAPA,IAkBIE,EAlBEC,EAAc,IAAIpB,KAAKH,OAAOoB,EAAUF,EAAShP,OAAO,EAAG,IAAK8N,OAAOkB,EAAShP,OAAO,EAAG,IAAM,EAAG8N,OAAOkB,EAAShP,OAAO,EAAG,KAE/HsP,EAAI,EACJC,EAAI,EACJC,EAAI,EACJ5Q,EAAI,EAEC2P,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,IAAIkB,EAAQ/B,SAASsB,EAAST,IAC9BiB,GAAKC,EAAQH,EACb1Q,GAAK6Q,EAAQF,EACE,OAAfD,IAAmBA,EAAI,GACR,OAAfC,IAAmBA,EAAI,GAI3B3Q,GAAQ,GAKJwQ,GANJI,GAAQ,IAIA,GAEOA,EAEJ5Q,EAAI,GAEAA,EAIA,EAGf,IAAMyO,EAAU2B,EAAS,MAAQU,OAAON,GAExC,QAAK/B,GAIE,CACH8B,SACAE,cACAhC,WDrEmBsC,CAAqBvH,GAIpC,OAHAiF,EAA4B,kBAAX0B,EACXA,EAAO1B,QACPuC,QAAQb,GAGlB,IAAK,KAGD,OADA1B,EEzBL,SAA4B2B,GAC/B,IAAKA,EACD,OAAO,EAGX,GAAIA,EAASP,OAAS,EAClB,OAAO,EAOX,GAJoB,MAAhBO,EAAS,KACTA,EAAWA,EAAShP,OAAO,EAAG,GAAG6P,OAAOb,EAAShP,OAAO,KAGpC,KAApBgP,EAASP,OACT,OAAO,EAGX,IAAMqB,EAAepC,SAASsB,EAAShP,OAAO,EAAG,IAEjD,GAAI+P,MAAMD,GAAe,OAAO,EAEhC,IAAIE,EAAkB,GACtB,OAAQF,GACJ,KAAK,EACDE,GAAmB,KACnB,MACJ,KAAK,EACDA,GAAmB,KACnB,MACJ,KAAK,EACDA,GAAmB,KAI3BA,GAAmBhB,EAAShP,OAAO,EAAG,GAEtCgQ,GAAmB,IAEnBA,GAAmBhB,EAAShP,OAAO,EAAG,GAEtCgQ,GAAmB,IAEnBA,GAAmBhB,EAAShP,OAAO,EAAG,GAEtC,IAAMqP,EAAcpB,KAAK7O,MAAM4Q,GAE/B,GAAID,MAAMV,GAAc,OAAO,EAK/B,IAHA,IAEII,EAFAQ,EAAU,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GACxCb,EAAW,KAENb,EAAI,EAAGA,EAAI0B,EAAQxB,OAAQF,IAAK,CAIrC,GAFAkB,EAAQ/B,SAASsB,EAAST,GAAG2B,YAEzBH,MAAMN,GAAQ,OAAO,EACzBL,GAAYK,EAAMQ,EAAQ1B,GAI9B,OAFAkB,EAAQ/B,SAASsB,EAAS,IAAIkB,aAE1BH,MAAMN,IAEMA,IAAUL,EAAS,GFrCjBe,CAAmB/H,GAGjC,QACI,OAAOiF,G,YG8KJ+C,MAhLf,YAAiE,IAApC1U,EAAmC,EAAnCA,GAAI2U,EAA+B,EAA/BA,QACrB5R,EAAM8L,cAAN9L,EACR,EAAwC6R,IAAMC,SAC1CxO,YAAmBxG,IAAUyG,UADjC,mBAAOwO,EAAP,KAAqBC,EAArB,KAGA,EAAsDH,IAAMC,UAAS,GAArE,mBAAOG,EAAP,KAA4BC,EAA5B,KACA,EAA4CL,IAAMC,SAAS,IAA3D,mBAAOrK,EAAP,KAAuB0K,EAAvB,KACA,EACIN,IAAMC,UAAS,GADnB,mBAAOM,EAAP,KAA8BC,EAA9B,KAEA,EAAkCR,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EACIV,IAAMC,WADV,mBAAOU,EAAP,KAAyBC,EAAzB,KAEMC,EAAYb,IAAMc,SAAQ,WAC5B,MAAsC7R,cACtC,MAAO,CAAED,UADT,EAAMA,UACc+R,iBADpB,EAAiBA,oBAElB,IAUH,SAASC,IACL,IAAMjE,EAAUmB,EAAYtI,GAE5B,OADA4K,EAAyBzD,GAClBA,EAGX,SAASkE,IACL,IAAMlE,EAAUH,EACZsD,EACAjV,IAAUyG,SAId,OAFA2O,EAAuBtD,GAEhBA,EAGX,SAASmE,IACL,IAAMC,EAAaH,IACbI,EAAsBH,IAC5B,OAAOE,GAAcC,EA5CmC,4CA+C5D,sCAAAvR,EAAA,yDACIkQ,OAAQ/G,GADZ,SAIgBhK,EAAgC6R,EAAhC7R,UAAW+R,EAAqBF,EAArBE,iBACHA,EACVE,IACAC,IAPd,wDAaQR,GAAa,GAbrB,SAe2BjL,IAAWjJ,qBAC1B0T,EACA9U,GAAM2V,GAAoB,GAC1BnL,EACA5G,EACA/D,IAAUyG,SApBtB,cAec1D,EAfd,OAsBQ4S,EAAoB5S,GACpB0S,GAAa,GAvBrB,UA0BkBjL,IAAWhJ,qBAAqBuB,GAAQA,EAAK8H,UA1B/D,iBAyBgBiC,EAzBhB,EAyBgBA,YAAaF,EAzB7B,EAyB6BA,OAErBpC,IAAWtI,WACP4K,GAAexJ,OAAOC,SAAS4K,OAASjP,IAAUM,SAClDoN,GA7BZ,kDAgCQ7F,IAAYwB,eAAe,CAAEC,UAAS,OACtCsM,EAAQ,EAAD,IAjCf,QAoCIW,GAAa,GApCjB,2DA/C4D,sBAsF5D,OAAID,EAEI,kBAACY,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,QAMZmE,GAAoBA,EAAiB7K,SAEjC,kBAACuL,EAAA,EAAD,KACI,kBAACG,EAAA,EAAD,KACI,kBAACA,EAAA,EAAKC,KAAN,CAAW9G,UAAU,0BACjB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,WACX,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,8BACKpT,EACG,oFAIR,4BAAKwS,EAAiBgB,eAG9B,kBAACnF,EAAD,SAQhB,kBAAC6E,EAAA,EAAD,CAAW1G,UAAU,YACjB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,WACX,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,8BACKpT,EACG,iEACD,KAEP,8BAAOA,EAAE,sCAAT,KACA,8BAAOA,EAAE,+CAGX0S,EAAUE,kBACR,kBAACO,EAAA,EAAD,CAAKC,GAAI,IACL,kBAACK,EAAA,EAAD,CACIC,YAAa1T,EAAE,mBACfwM,UAAU,OACV/K,KAAK,iBACLxE,GAAG,iBACH0W,SAtHxB,SAAgCxT,GAC5BgS,EAAkBhS,EAAEyT,cAAcjK,QAsHdkK,OAAQhB,EACRiB,WAAY1B,EACZ2B,aAActM,IAElB,kBAACuM,EAAA,EAAKC,QAAQC,SAAd,CAAuBvG,KAAK,WACvB3N,EAAE,8CAKf,kBAACmT,EAAA,EAAD,CAAKC,GAAI,IACL,kBAACK,EAAA,EAAD,CACIC,YAAa1T,EAAE,gBACfwM,UAAU,OACV/K,KAAK,eACLxE,GAAG,eACH0W,SA3IpB,SAA8BxT,GAC1B6R,EAAgB7R,EAAEyT,cAAcjK,QA2IhBkK,OAAQf,EACRgB,WAAY7B,EACZ8B,aAAchC,IAElB,kBAACiC,EAAA,EAAKC,QAAQC,SAAd,CAAuBvG,KAAK,WACvB3N,EAAE,2CAIX,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QACnB,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAvKkB,4CAwKvCrN,EAAE,gBCzGpB,SAASmU,IACZ,MAAoBrI,cAAZ9L,EAAR,EAAQA,EAAG+L,EAAX,EAAWA,KACX,EAAwB8F,IAAMC,WAA9B,mBAAOsC,EAAP,KAAaC,EAAb,KACMC,EAAQtU,EACV,mGAEEuU,EAAQvU,EAAE,0DACVwU,EAAQxU,EAAE,wBAMhB,OAJA6R,IAAM4C,WAAU,WA1FF,IAACvR,EA2FXmR,EA1Fa,QADFnR,EA2FO6I,EAAK7I,UAzFhB,KAEM,OAAbA,EACO,KAEM,OAAbA,GAAkC,OAAbA,EACd,UADX,KAqFG,CAAC6I,EAAK7I,WAGL,kBAACiQ,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,kBACnB,2BAAI8H,GACJ,2BACKC,EAAO,IACR,uBACIG,OAAO,SACPC,IAAI,sBACJpS,KAAI,iCAA4B6R,EAA5B,cAEHI,KAONI,MA7Ff,YAAgE,IAAlC3X,EAAiC,EAAjCA,GAAI2U,EAA6B,EAA7BA,QACtB5R,EAAM8L,cAAN9L,EACR,EAAkC6R,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KAF2D,4CAQ3D,wCAAA7Q,EAAA,6DACIkQ,OAAQ/G,GACR0H,GAAa,GAFjB,WAK8CzR,cAAhCD,EALd,EAKcA,UAAW+R,EALzB,EAKyBA,iBAEXpJ,EAASqL,mBAAmB,GAAD,OAC1B/X,IAAUsB,iBADgB,2BAEzBwU,GAAoB,KAItBlU,EAAYmW,mBACdhU,GAAS,UACFT,OAAOC,SAASyU,SADd,aAED1U,OAAOC,SAAS0U,KAFf,iBAGI9X,GAAU,KAErB+X,EAAaH,mBAAmBzU,OAAOC,SAASkC,MAnB9D,SAqB2B+E,IAAW2C,6BArBtC,OAqBctE,EArBd,OAsBQvF,OAAOC,SAASC,QAAhB,UACOxD,IAAUmY,4BADjB,yCAC6EtP,EAD7E,sBAC+FjH,EAD/F,mBACmH8K,EADnH,uBACwIwL,IAvBhJ,kDA0BQnR,IAAYwB,eAAe,CAAEC,UAAS,OACtCsM,EAAQ,EAAD,IA3Bf,QA6BIW,GAAa,GA7BjB,2DAR2D,sBAwC3D,OArCkBV,IAAMc,SAAQ,WAC5B,MAAsC7R,cACtC,MAAO,CAAED,UADT,EAAMA,UACc+R,iBADpB,EAAiBA,oBAElB,IAkCCN,EAEI,kBAACY,EAAA,EAAD,CAAW1G,UAAU,UACjB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,QAOZ,kBAAC6E,EAAA,EAAD,CAAW1G,UAAU,UACjB,kBAAC2H,EAAD,MAEA,kBAAChB,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC5F,EAAA,EAAD,CAAQH,QAvDuC,2CAuDfT,QAAQ,WACnC5M,EAAE,eC4FRkV,MApJf,YAAwE,IAAxCjY,EAAuC,EAAvCA,GAAI2U,EAAmC,EAAnCA,QAChC,EAAkCC,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EACIV,IAAMC,WADV,mBAAOqD,EAAP,KAAoBC,EAApB,KAEA,EACIvD,IAAMC,SAAS,IADnB,mBAAOuD,EAAP,KAA+BC,EAA/B,KAEA,EACIzD,IAAMC,UAAS,GADnB,mBAAOyD,EAAP,KAAsCC,EAAtC,KAEQxV,EAAM8L,cAAN9L,EACFyV,EAAe,kBAAMrV,OAAOC,SAASqV,QATwB,4CAWnE,0CAAAhU,EAAA,yDACIkQ,OAAQ/G,GAEQ8K,IAHpB,wDASIpD,GAAa,GATjB,WAYqCzR,cAArB8R,EAZhB,EAYgBA,iBACFpL,EAAmBvK,GAAM2V,GAAoB,GAC7ClE,EAAc5R,IAAUyG,QAdtC,UAe2B+D,IAAW0B,gBAAgB,CAC1CxB,mBACAkH,cACA2G,yBACA3W,UAAW8B,gBAnBvB,eAecX,EAfd,OAsBQuV,EAAevV,GACf0S,GAAa,GAvBrB,UA0BkBjL,IAAW9I,oBAAoBqB,GA1BjD,iBAyBgB+J,EAzBhB,EAyBgBA,YAAaF,EAzB7B,EAyB6BA,OAGrBpC,IAAWtI,WACP4K,GAAexJ,OAAOC,SAAS4K,OAASjP,IAAUM,SAClDoN,GA9BZ,kDAiCQ7F,IAAYwB,eAAe,CAAEC,UAAS,OACtCsM,EAAQ,EAAD,IACPW,GAAa,GAnCrB,2DAXmE,sBAsDnE,SAASoD,IACL,IAAM/G,EAAUmB,EAAYsF,GAE5B,OADAG,EAAiC5G,GAC1BA,EAGX,GAAI0D,EACA,OACI,kBAACY,EAAA,EAAD,CAAW1G,UAAU,cACjB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,QAMhB,GAAI8G,EACA,OACI,kBAACjC,EAAA,EAAD,CAAW1G,UAAU,cACjB,kBAAC6G,EAAA,EAAD,KACI,kBAACA,EAAA,EAAKC,KAAN,CAAW9G,UAAU,0BACjB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,WACX,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,4BAAKpT,EAAE,sBACP,4BAAKmV,EAAYxP,OAGrB,kBAAC0I,EAAD,QAGR,kBAACgF,EAAA,EAAKuC,OAAN,KACI,kBAACrC,EAAA,EAAD,CAAK/G,UAAU,gBACX,yBAAKA,UAAU,kDACf,yBAAKA,UAAU,oBACVxM,EACG,kGAMpB,kBAAC6V,EAAD,OAKZ,SAASA,IACL,OAAI1T,SAAS2T,SAEL,kBAAC3C,EAAA,EAAD,CAAK3G,UAAU,6CACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,QAAQS,QAASoI,GAC5BzV,EAAE,YAMZ,KAGX,OACI,kBAACkT,EAAA,EAAD,CAAW1G,UAAU,cACjB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,0BACnB,2BAAIxM,EAAE,6CAGV,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,WACnB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,kBAACK,EAAA,EAAD,CACI9F,KAAK,OACL1Q,GAAG,yBACHwE,KAAK,yBACL+K,UAAU,mBACVkH,YAAa1T,EAAE,0BACf2T,SA9EpB,SAAwCxT,GACpCmV,EAA0BnV,EAAEyT,cAAcjK,OAAS,KA8EnCkK,OAAQ8B,EACR7B,WAAYyB,EACZ5L,MAAO0L,IAEX,kBAACrB,EAAA,EAAKC,QAAQC,SAAd,CAAuBvG,KAAK,WACvB3N,EAAE,+CAKf,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,gBACnB,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QA5I6B,4CA6IlDrN,EAAE,eCrJR+V,MAhBf,WAEI,IAAQ/V,EAAM8L,cAAN9L,EAEFsU,EAAQtU,EAAE,kBACVuU,EAAQvU,EAAE,UAEhB,OACI,yBAAKwM,UAAU,UACX,2BAAI8H,GACJ,2BAAIC,EAAJ,OC8BGyB,IC3CHC,ED2CGD,EA/Bf,YAAsE,IAA/CE,EAA8C,EAA9CA,QAAS7I,EAAqC,EAArCA,QAAS8I,EAA4B,EAA5BA,OAC7BnW,EAAM8L,cAAN9L,EAEFoW,EAAeF,EAEf9H,EAAYiI,QAAO,SAAC5M,GAAD,OAAYyM,EAAQnT,QAAQ0G,EAAOkE,OAAS,KAD/D,GAON,OACI,oCACKyI,EAAYlJ,KACT,SAAC2D,GAAD,OACIA,EAAEhD,cACE,yBACI1O,IAAK0R,EAAElD,KACPnB,UACI,cAAgBqE,EAAErE,WAZ5B8J,EAYiDzF,EAAElD,KAX1DsD,OAAOkF,KAAYlF,OAAOqF,GAAY,UAAY,IAarCjJ,QAAS,kBAAMA,EAAQwD,EAAElD,QAExB3N,EAAE6Q,EAAEnD,QAhB7B,IAAkB4I,OEqBPC,EAjCE,CACfC,KAAM,YAAyC,IAA7BvZ,EAA4B,EAA5BA,GAAIwZ,EAAwB,EAAxBA,UAmBpB,OAjBKxZ,GAAIuC,QAAQC,KAAK,uBAiBf,CACLiX,OAfU,6EACmDzZ,EADnD,uGAgBV0Z,OAXU,+VAK2B1Z,EAL3B,OAYV2Z,aALmBC,KAAKJ,UAAUA,KAQtCA,UAAW,SAAUA,GACnB,MAAM,uFAAN,OAE4BxQ,KAAKC,UAAUuQ,GAF3C,OCiBWK,EAhDI,CACfC,WAAY,SAAUN,GAClB,IAAME,EAASxU,SAASC,cAAc,UAEtC,OADAuU,EAAOK,UAAYP,EACZE,GAEXM,IAAK,SAAUC,GACX,IAAMC,EAAWZ,EAASC,KAAKU,GAgB/B,MAAO,CACHE,SAfa,WACb,IAAMC,EAAWlV,SAASC,cAAc,YAExC,OADAiV,EAASL,UAAYG,EAAST,OACvBW,GAaPV,OAVW,WACX,IAAMA,EAASxU,SAASC,cAAc,UAEtC,OADAuU,EAAOK,UAAYG,EAASR,OACrBA,GAQPI,WALeF,KAAKE,WAAWI,EAASP,gBAShDU,WAAY,YAAkD,IAAtCC,EAAqC,EAArCA,MAAOd,EAA8B,EAA9BA,UACrBQ,EAAMJ,KAAKI,IAAI,CACjBha,GAAIsa,EACJd,UAAWA,QAAa5L,IAExB4L,GAAWtU,SAASqV,KAAK9U,YAAYuU,EAAIF,YAC7C5U,SAASqV,KAAKC,aAAaR,EAAIN,SAAUxU,SAASqV,KAAKE,WAAW,IAClEvV,SAASM,KAAKgV,aAAaR,EAAIG,WAAYjV,SAASM,KAAKiV,WAAW,KAGxEjB,UAAW,YAA2C,IAA/BA,EAA8B,EAA9BA,UACnB,GAAKrW,OAAD,UAAiD,OAAQA,OAAD,UAAgDuX,KAAKlB,GACjH,IAAMU,EAAWZ,EAASE,UAAUA,GAC9BM,EAAaF,KAAKE,WAAWI,GACnChV,SAASqV,KAAKC,aAAaV,EAAY5U,SAASqV,KAAKE,WAAW,O,SF/C5DzB,K,+CAAAA,E,6CAAAA,E,iCAAAA,E,+BAAAA,E,iCAAAA,E,gCAAAA,M,KGMZ,IAEM2B,EAAU,CACZ,CACI,CACIC,SAAU,QACVC,OAAQ,sBACRC,QAAS,eAEb,CACIF,SAAU,WACVC,OAAQ,yBACRC,QAAS,WAEb,CACIF,SAAU,KACVC,OAAQ,yBACRC,QAAS,kDAGjB,CACI,CACIF,SAAU,OACVC,OAAQ,sBACRC,QAAS,iBAEb,CACIF,SAAU,MACVC,OAAQ,eACRC,QAAS,OAEb,CACIF,SAAU,KACVC,OAAQ,2BACRC,QAAS,0CAGjB,CACI,CACIF,SAAU,QACVC,OAAQ,oBACRC,QAAS,YAEb,CACIF,SAAU,QACVC,OAAQ,oBACRC,QAAS,YAEb,CACIF,SAAU,MACVC,OAAQ,eACRC,QAAS,SAWRC,EAAoD,SAAC,GAAW,EAAT/a,GAAU,IAClE+C,EAAM8L,cAAN9L,EACF0S,EAAYb,IAAMc,SAAQ,WAC5B,MAAsC7R,cACtC,MAAO,CAAED,UADT,EAAMA,UACc+R,iBADpB,EAAiBA,oBAElB,IAEGqF,EACF,SAACxP,GAAD,8CAAkB,WAAOtI,GAAP,iBAAAuB,EAAA,6DACdvB,EAAEmN,iBACsCoF,EAAhC7R,UAAW+R,EAAqBF,EAArBE,iBAFL,SAGKtL,IAAW7J,gBAAX,OACfmV,QADe,IACfA,IAAoB,GACpBnK,EACA,QANU,OAGR5I,EAHQ,OASdO,OAAOC,SAASC,QAAQT,EAAKkB,KATf,2CAAlB,uDAYJ,OACI,kBAACmS,EAAA,EAAD,CAAW1G,UAAU,eACjB,kBAAC+G,EAAA,EAAD,KACI,wBAAI/G,UAAU,eACTxM,EACG,yEAFR,MAOJ,kBAACuT,EAAA,EAAD,KACI,kBAACJ,EAAA,EAAD,KACKyE,EAAQ1K,KAAI,SAACgL,EAAKpI,GAAN,OACT,kBAACyD,EAAA,EAAD,CAAKpU,IAAK2Q,EAAGtD,UAAU,uBAClB0L,EAAIhL,KAAI,SAACzE,GAAD,OACL,yBACI+D,UAAU,oCACVrN,IAAKsJ,EAAKoP,UAEV,uBACItV,KAAK,IACL8K,QAAS4K,EAAgBxP,EAAKoP,WAE9B,yBACIrL,UAAU,eACVK,IAAKpE,EAAKqP,OACVhL,IAAKrE,EAAKsP,QACVI,YAAW1P,EAAKoP,wBCnH/CO,GAEoB,IAFpBA,GAIS,qBC8EPC,OA9Df,YAA2E,IAA1Cpb,EAAyC,EAAzCA,GAAI2U,EAAqC,EAArCA,QACjC,EAAkCC,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EAAoBzG,cAAZ9L,EAAR,EAAQA,EAAG+L,EAAX,EAAWA,KAF2D,4CAItE,sCAAArK,EAAA,6DACIkQ,OAAQ/G,GAER0H,GAAa,GAHjB,WAMgDzR,cAAhC8R,EANhB,EAMgBA,iBAAkB/R,EANlC,EAMkCA,UACpB2G,EAAmBvK,GAAM2V,GAAoB,GAC7C/J,EAAmBkD,EAAK7I,SAC9BoV,eAAeC,QAAQH,GAA+B5Q,GAT9D,SAW2BF,IAAWqB,kBAAkB,CAC5CnB,mBACAqB,mBACAnK,UAAWmW,mBAAmBhU,GAC9BjC,YAAawB,OAAOC,SAAS4K,OAASjP,IAAUU,oBAf5D,OAWcmD,EAXd,OAkBQO,OAAOC,SAASkC,KAAO1C,EAlB/B,kDAqBQgE,IAAYwB,eAAe,CAAEC,UAAS,OACtCsM,EAAQ,EAAD,IACPW,GAAa,GAvBrB,2DAJsE,sBA+BtE,OAAID,EAEI,kBAACY,EAAA,EAAD,CAAW1G,UAAU,aACjB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,QAOZ,kBAAC6E,EAAA,EAAD,CAAW1G,UAAU,aACjB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,0BACnB,2BAAIxM,EAAE,qDAGV,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,WACnB,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,MAKb,kBAACD,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,gBACnB,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAtDgC,4CAuDrDrN,EAAE,eCtCvB,SAASwY,GAAgBtC,GAErBA,EAAQuC,MAAK,SAAC/W,EAAEmP,GACZ,OAAGnP,IAAMmK,EAAe+B,YACZ,EACTiD,IAAMhF,EAAe+B,WACb,EAERlM,IAAMmK,EAAeiC,cACZ,EACT+C,IAAMhF,EAAeiC,aACb,EAERpM,IAAMmK,EAAekC,UACZ,EACT8C,IAAMhF,EAAekC,SACb,EAERrM,IAAMmK,EAAemC,SACZ,EACT6C,IAAMhF,EAAemC,QACb,EAEJ,KAyPA0K,OAtPf,YAA2E,IAAtDC,EAAqD,EAArDA,MAAO/T,EAA8C,EAA9CA,QACxB,EAA0BiN,IAAMC,WAAhC,mBAAOtV,EAAP,KAAcoc,EAAd,KACA,EAA8B/G,IAAMC,WAApC,mBAAO+G,EAAP,KAAgBC,EAAhB,KACA,EAAkCjH,IAAMC,WAAxC,mBAAOiH,EAAP,KAAkBC,EAAlB,KACA,EAA8BnH,IAAMC,WAApC,mBAAOmH,EAAP,KAAgBC,EAAhB,KACA,EAAkCrH,IAAMC,WAAxC,mBAAOqH,EAAP,KAAsBC,EAAtB,KACA,EAAoCvH,IAAMC,WAA1C,mBAAOuH,EAAP,KAAmBC,EAAnB,KAGA,EAA4CzH,IAAMC,SAEhD,IAFF,mBAAOyH,GAAP,KAAuBC,GAAvB,KAGQxZ,GAAM8L,cAAN9L,EAEFyZ,GAAc,uCAAG,kCAAA/X,EAAA,yDACbgR,EAAY,IAAIgH,gBAAgBtZ,OAAOC,SAASO,QAChD+Y,EAAYjH,EAAU3K,IAAI,eAC1B6R,EAASlH,EAAU3K,IAAI,qBAHV,gCAIaT,IAAW8B,YAAYwQ,GAJpC,+CAI8C,KAJ9C,WAIbC,EAJa,KAKnBT,EAAQ,OAACS,QAAD,IAACA,OAAD,EAACA,EAAUV,eACD,OAAdQ,EANe,0CAOR,IAAIra,MAAMqa,IAPF,4CAAH,qDAWdG,GAAUjI,IAAMkI,YAAN,sBAAkB,4BAAArY,EAAA,2DAChBmJ,IAAVrO,IACMwd,EAAiB,CACnBvD,UAAW,CACPwD,cAAed,EACfe,qBAAsBC,aAAaC,QAAQ,cAC3CC,MAAOpE,EAAUqE,qBACjBC,aAAc/d,EAAMyD,UAI5B6W,EAAWL,UAAUuD,IAXK,2CAa/B,CAACb,EAAe3c,IAMnB,SAASge,GAAara,GAClByY,EAASrZ,YAAwBY,IALrC0R,IAAM4C,WAAU,WACZqF,OACD,CAACA,KAMJ,IAAMW,GAAiB5I,IAAMkI,YAAN,sBAAkB,8CAAArY,EAAA,+EAEb+X,KAFa,UAE3Bjd,EAF2B,OAGjCoc,EAASpc,GAHwB,EAKJsE,gBAArB8R,EALyB,EAKzBA,kBALyB,iCAQrBtL,IAAW8B,YAAYwJ,GARF,gDAS3B,KAT2B,QAO3BiH,EAP2B,KAUjCT,EAAQ,OAACS,QAAD,IAACA,OAAD,EAACA,EAAUV,eAzFJjD,EA0FwC,iBACnD2D,QADmD,IACnDA,OADmD,EACnDA,EAAUzL,mBADyC,QAE5B,OAAtBtR,IAAUyG,QACL,CAACsI,EAAe+B,WACd/B,EAAesC,WACjB,CACItC,EAAeqC,OACfrC,EAAekC,SACflC,EAAe+B,YAI7B4K,GAZMpK,EAzFTjN,cAEE+U,EAAQG,QAAO,SAACqE,GAAD,OAAOA,IAAM7O,EAAeqC,UAF1BgI,GAuGV6C,EAzB2B,iBAyBfc,QAzBe,IAyBfA,OAzBe,EAyBfA,EAAUd,iBAzBK,QAyBQ,GACnCE,EA1B2B,iBA0BjBY,QA1BiB,IA0BjBA,OA1BiB,EA0BjBA,EAAUZ,eA1BO,QA0BI,GAErCD,EAAaD,GACbG,EAAWD,GACXO,GAAkBpL,GAClBkL,EAAclL,EAAY,IA/BO,kDAiCjCvK,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACtCkV,GAAa,EAAD,IAlCqB,kCA/E7C,IAA2BtE,IA+EkB,qBAoCtC,IAyEH,SAASyE,GAAUC,GACXjC,EAAMzX,OAAO2Z,UACbjW,EAAQ+S,KAAR,UAAgB3b,IAAUM,SAA1B,YAAsCqc,EAAMzX,OAAO2Z,YAEnD/B,EAAW8B,GA3EnB/I,IAAM4C,WAAU,WACZgG,OACD,CAACA,KA6EJ,IAAMhF,GAAe,kBAAMrV,OAAOC,SAASC,QAAQyY,IAC7C+B,GAAiB,kBAAM1a,OAAOC,SAASC,QAAQ2Y,IAErD,SAASpD,KACL,OAAI1T,SAAS2T,UAAYiD,EAEjB,kBAAC5F,EAAA,EAAD,CAAK3G,UAAU,6CACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,QAAQS,QAASoI,IAC5BzV,GAAE,YAMZ,KAGX,SAAS+a,KACL,OAAI5Y,SAAS2T,UAAYmD,GAAWzc,EAE5B,kBAAC2W,EAAA,EAAD,CAAK3G,UAAU,6CACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,QAAQS,QAASyN,IAC5B9a,GAAE,oBADP,OAOL,KAKX,IAAMoW,GACF,kBAAC,EAAD,CACIF,QAASqD,GACTlM,QAASiM,EACTnD,OAAQkD,IAIhB,OACI,kBAACnG,EAAA,EAAD,CAAWjW,GAAG,aACV,kBAACiW,EAAA,EAAD,CAAW1G,UAAU,oCACjB,4BAAKxM,GAAE,8CAEX,kBAACkT,EAAA,EAAD,CAAW1G,UAAU,gCAChBhQ,GACG,kBAACwe,EAAA,EAAD,CACIpO,QAAQ,SACRqO,aAAW,EACXC,QAAS,kBAAMtC,OAAS/N,KAEvB7K,GAAExD,EAAMyD,UAIhB4Y,GACG,kBAACmC,EAAA,EAAD,CACIpO,QAAQ,UACRqO,aAAW,EACXC,QAAS,kBAAMpC,OAAWjO,KAEzBgO,GAIT,kBAACtF,EAAA,EAAD,CAAK/G,UAAU,eACV4J,GAED,yBAAK5J,UAAU,yBAGnB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,gBApJ3B,WACI,OAAQ6M,GACJ,KAAKxN,EAAekC,SAEhB,OADAoM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAE9C,kBAAC8B,EAAD,CACIle,GAAI0b,EAAMzX,OAAO2Z,UACjBF,UAAWA,GACX/I,QAAS4I,KAIrB,KAAK3O,EAAe+B,WAEhB,OADAuM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAE9C,kBAAC+B,EAAD,CACIne,GAAI0b,EAAMzX,OAAO2Z,UACjBF,UAAWA,GACX/I,QAAS4I,KAIrB,KAAK3O,EAAeiC,aAEhB,OADAqM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAC3C,kBAACgC,EAAD,MAEX,KAAKxP,EAAeqC,OAEhB,OADAiM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAE9C,kBAAC,EAAD,CACIpc,GAAI0b,EAAMzX,OAAO2Z,UACjBF,UAAWA,GACX/I,QAAS4I,KAIrB,KAAK3O,EAAemC,QAEhB,OADAmM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAE9C,kBAAC,EAAD,CACIpc,GAAI0b,EAAMzX,OAAO2Z,UACjBF,UAAWA,GACX/I,QAAS4I,KAIrB,KAAK3O,EAAesC,UAEhB,OADAgM,aAAa5B,QAAQ,aAAc1M,EAAewN,IAE9C,kBAAC,GAAD,CACIpc,GAAI0b,EAAMzX,OAAO2Z,UACjBF,UAAWA,GACX/I,QAAS4I,KAIrB,QACI,OACI,kBAACtH,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,SAwFmBiN,KAEnC,kBAACP,GAAD,MACA,kBAAClF,GAAD,Q,UCxRG0F,OAlBf,YAA4D,IAAtC3W,EAAqC,EAArCA,QAEV5E,EAAM8L,cAAN9L,EAER,OACI,kBAACkT,EAAA,EAAD,CAAW1G,UAAU,cACjB,kBAACgP,GAAA,EAAD,KACI,kBAACA,GAAA,EAAUrO,KAAX,KACI,wBAAIX,UAAU,QAAQxM,EAAE,wBAE5B,kBAACwb,GAAA,EAAUrO,KAAX,CAAgBX,UAAU,QACtB,kBAACgB,EAAA,EAAD,CAAQH,QAAS,kBAAMzI,EAAQ+S,KAAK3b,IAAUE,SAAQ,0BAAMsQ,UAAU,gCAAtE,IAAwGxM,EAAE,yB,oBC4B/Gyb,OAnCf,WAEI,IAAQzb,EAAM8L,cAAN9L,EACF0b,EAAchb,KAAYC,MAAMP,OAAOC,SAASO,QAEhDkZ,EAAUjI,IAAMkI,YAAN,sBAAkB,4BAAArY,EAAA,sDACxBsY,EAAiB,CACnBvD,UAAW,CACPyD,qBAAsBC,aAAaC,QAAQ,cAC3CC,MAAOpE,EAAUqE,qBACjBC,aAAcmB,EAAYnB,eAIlCzD,EAAWL,UAAUuD,GATS,2CAU/B,CAAC0B,EAAYnB,eAShB,OAPA1I,IAAM4C,WACF,WACIqF,MAEJ,CAACA,IAID,kBAAC5G,EAAA,EAAD,CAAW1G,UAAU,aACjB,kBAACwO,EAAA,EAAD,CAAOpO,QAAQ,UACV5M,EAAE,wBACH,6BACCA,EAAE0b,EAAYnB,iBCtBhBoB,OAbf,WAEI,IAAQ3b,EAAM8L,cAAN9L,EAER,OACI,kBAACkT,EAAA,EAAD,CAAW1G,UAAU,aACjB,kBAACwO,EAAA,EAAD,CAAOpO,QAAQ,UACV5M,EAAE,uC,UCiDJ4b,OAlDf,YAA8D,IAAtChX,EAAqC,EAArCA,QACpB,EAA0BiN,IAAMC,WAAhC,mBAAOtV,EAAP,KAAcoc,EAAd,KAEMiD,EAAShK,IAAMkI,YAAN,sBAAkB,8BAAArY,EAAA,6DACvB8F,EAAmB2S,aAAaC,QAClChC,MAIA+B,aAAa2B,WAAW1D,IAGtB/N,EAAc,IAAIiB,eAAYX,YAAkB,UATzB,kBAYnBN,EAAY0R,iBAZO,OAczBnX,EAAQ+S,KAAR,UAAgB3b,IAAUM,SAA1B,YAAsCkL,EAAmBA,EAAmB,iBAAmB,KAdtE,gDAgBzB3D,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,EAAD,IAjBiB,yDAmB9B,CAAChU,IAMJ,OAJAiN,IAAM4C,WAAU,WACZoH,MACD,CAACA,IAGA,kBAAC3I,EAAA,EAAD,CAAW1G,UAAU,gBAChBhQ,EACG,kBAACwe,EAAA,EAAD,CACIpO,QAAQ,SACRqO,aAAW,EACXC,QAAS,WACLtC,OAAS/N,GACTzK,OAAOC,SAASC,QAAhB,UACOF,OAAOC,SAAS4K,OAASjP,IAAUS,WAI7CD,EAAMyD,SAGX,kBAACoO,EAAD,QCFD2N,ICpDVC,GDoDUD,GA9Cf,YAA8D,IAAtCpX,EAAqC,EAArCA,QAEZ5E,EAAM8L,cAAN9L,EACR,EAAgD8R,mBAAS,IAAzD,mBAAOtK,EAAP,KAAyB0U,EAAzB,KAYA,OACI,kBAAChJ,EAAA,EAAD,CAAW1G,UAAU,eACjB,kBAACgP,GAAA,EAAD,KACI,kBAACjI,EAAA,EAAD,CAAK/G,UAAU,6BACX,kBAAC2G,EAAA,EAAD,KACI,4BAAKnT,EAAE,wCAGf,kBAACwb,GAAA,EAAUrO,KAAX,KACI,kBAACoG,EAAA,EAAD,KACI,kBAACJ,EAAA,EAAD,CAAKC,GAAI,GAAI+I,GAAI,EAAG3P,UAAU,gBAC1B,kBAACiH,EAAA,EAAD,CACIjH,UAAU,YACV/K,KAAK,mBACLxE,GAAG,mBACHyW,YAAa1T,EAAE,sBACf2T,SA1B5B,SAAkCxT,GAE9B+b,EAAoB/b,EAAEyT,cAAcjK,OAAS,KAyBrBA,MAAOnC,MAGnB,kBAAC+L,EAAA,EAAD,KACI,kBAACJ,EAAA,EAAD,KACI,kBAAC3F,EAAA,EAAD,CAAQZ,QAAQ,UAAUe,KAAK,SAASN,QA3BhE,WAEIzI,EAAQ+S,KAAR,UAAgB3b,IAAUM,SAA1B,YAAsCkL,MAyBoDxH,EAAE,mB,SC3C/Fic,O,qBAAAA,I,qBAAAA,I,wBAAAA,Q,KAOUA,ICPVG,GDOUH,O,SCPVG,O,uBAAAA,I,mBAAAA,I,qBAAAA,I,uBAAAA,I,iCAAAA,I,oBAAAA,Q,KAcUA,U,mBCGfC,uBAAoBC,UAApB,kDAA2EC,WAA3E,kB,SAoJeC,G,iFAAf,WAA0Bnd,GAA1B,yCAAAqC,EAAA,yDAAqC+a,EAArC,+BAA0D,EAAGC,EAA7D,+BAAqE,IAC5Dtd,YAAMC,GADf,wDAGIG,QAAQC,KAAKid,GACPC,EAAWtd,EAJrB,SAKuBsd,EAASC,QAAQH,GALxC,OAKUI,EALV,OAOUC,EAAWD,EAAKE,YAAY,CAAEL,WAC9BM,EAAS7a,SAAS8a,eAAe,cAChCC,OAASJ,EAASI,OACzBF,EAAOG,MAAQL,EAASK,MAClBC,EAAgBJ,EAAOK,WAAW,MAElCC,EAAgB,CAAER,WAAUM,iBAElCP,EAAKU,OAAOD,GAfhB,6C,sBAkBeE,ICvLHC,GDuLGD,GAxJf,YAAkE,IAA7CvgB,EAA4C,EAA5CA,GAAI6C,EAAwC,EAAxCA,OAAQT,EAAgC,EAAhCA,IAAKqe,EAA2B,EAA3BA,OAC1B1d,EAAM8L,cAAN9L,EACR,EAA0B6R,IAAMC,SAJf,MAIjB,mBAAO4K,EAAP,KAAciB,EAAd,KACA,EAA0B9L,IAAMC,WAAhC,mBAAOtV,EAAP,KAAcoc,EAAd,KACA,EAAsC/G,IAAMC,SAAS,GAArD,mBAAO8L,EAAP,KAAoBC,EAApB,KACMC,EAAYjM,IAAMkM,QAAO,GAEzBC,EAAanM,IAAMkI,YAAN,sBAAkB,gCAAArY,EAAA,sEAEvBX,EAAMnE,IAAUW,YAAYN,GAFL,SAGF2K,eAHE,cAGvBqW,EAHuB,gBAILC,uBAAY,CAChCnd,MACAod,YAAaF,EAAatX,UAC3ByX,QAP0B,cAIvBC,EAJuB,yBAStBA,GATsB,kCAW7Bxa,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,IAAItZ,MAAJ,OAZoB,0DAclC,CAACrC,IAmBJ,SAASqhB,IACL,GAAKlf,YAAMC,GAAX,CAEA,IAAMkf,EAAiBX,EAAc,EAEjCW,EAAiB,IAErBV,EAAeU,GACf/B,GAAWnd,EAAKkf,EAAgB7B,KAGpC,SAAS8B,IACL,GAAKpf,YAAMC,GAAX,CAEA,IAAMkf,EAAiBX,EAAc,EAIjCW,EAFclf,EAEeof,WAEjCZ,EAAeU,GACf/B,GAAWnd,EAAKkf,EAAgB7B,KAGpC,SAASgC,IACL,GAAKtf,YAAMC,GAAX,CAEA,IAAMsf,EAAWjC,EAtEP,IAwEViB,EAASgB,GACTnC,GAAWnd,EAAKue,EAAae,IAGjC,SAASC,IACL,GAAKxf,YAAMC,MAAQqd,GA7ET,KA6EV,CAEA,IAAMiC,EAAWjC,EA/EP,IAiFViB,EAASgB,GACTnC,GAAWnd,EAAKue,EAAae,IAGjC,SAASE,IACL,OACI,yBAAKrS,UAAU,kBACX,4BAAQvP,GAAG,OAAOoQ,QAASiR,GACvB,uBAAG9R,UAAU,oCAGjB,6BACKpN,YAAMC,IAAQue,EADnB,IAEKxe,YAAMC,IAASA,EAAyBof,UAG7C,4BAAQxhB,GAAG,OAAOuP,UAAU,OAAOa,QAASmR,GACxC,uBAAGhS,UAAU,sCAGjB,4BACIvP,GAAG,SACHuP,UAAU,wBACVa,QAASqR,GAET,uBAAGlS,UAAU,iCAGjB,4BACIvP,GAAG,UACHuP,UAAU,mBACVa,QAASuR,GAET,uBAAGpS,UAAU,mCAM7B,OA9FAqF,IAAM4C,WAAU,WACZ,GAAK3U,GAAUA,IAAWsc,GAAc0C,SAWxC,OATAd,IAAa7T,MAAK,SAAC4U,GACXjB,EAAUkB,UACVtB,EAAOqB,GACPlB,EAAe,GACfF,EAhCK,MAiCLnB,GAAWuC,EAAS,EAjCf,UAqCN,WACHjB,EAAUkB,SAAU,KAEzB,CAAClf,EAAQke,EAAYN,IAgFpB,yBAAKzgB,GAAG,oBACH4hB,IAEAriB,EACG,kBAACwe,EAAA,EAAD,CAAOpO,QAAQ,UAAU5M,EAAE,wBAC3BX,EACA,4BAAQpC,GAAG,cAEX,kBAACoR,EAAD,MAGHhP,GAAOwf,O,SChKRpB,O,qBAAAA,I,iCAAAA,I,oCAAAA,Q,6BCAG,GAED,WCqCRwB,GAA0CC,wBAA8B,CAC1EC,oBAAgBtU,EAChBuU,aAAcnD,GAAaoD,QAC3B7iB,WAAOqO,EACPvN,cAAe,GACfmO,KAAM,KACN6T,oBAAqB,aACrB1G,SAAU,aACV2G,UAAW,aACXC,gBAAiB,aACjBC,iBAAkB,eAGhBC,GAAe,uCAAG,WAAOziB,EAAYoF,GAAnB,SAAAX,EAAA,6DACpByY,aAAa5B,QAAQH,GAA+Bnb,GADhC,SAEdoN,IAAY6B,kBAFE,OAIpB7B,IAAYsV,eAAe,CACvBC,iBAAkB,CACdhN,iBAAkB3V,EAClBoF,MAAOA,KAPK,2CAAH,wDAYfwd,GAAS,uCAAG,WAAO5iB,EAAYoF,GAAnB,eAAAX,EAAA,sEACK2I,IAAYC,UADjB,UACRmB,EADQ,OAGT0F,QAAQ1F,GAHC,gCAIJiU,GAAgBziB,EAAIoF,GAJhB,gCAKH,MALG,gCAQPoJ,GARO,2CAAH,wDAWR,SAASqU,GAAT,GAAuE,IAAD,MAApCC,EAAoC,EAApCA,SACrC,EAA4CjO,qBAA5C,mBAAOqN,EAAP,KAAuBa,EAAvB,KAGA,EAAwBlO,mBAAsB,MAA9C,mBAAOrG,EAAP,KAAawU,EAAb,KACA,EAA0BpO,IAAMC,WAAhC,mBAAOtV,EAAP,KAAcoc,EAAd,KACA,EAAwC/G,IAAMC,SAC1CmK,GAAaoD,SADjB,mBAAOD,EAAP,KAAqBI,EAArB,KAGA,EAA0C3N,IAAMC,SAAS,IAAzD,mBAAOxU,EAAP,KAAsBmiB,EAAtB,KACA,EAA0B3N,mBAAQ,UAACwG,eAAe8B,QAAQ,gBAAxB,QAAqC,IAAvE,mBAAO/X,EAAP,KAAc6d,EAAd,KACMC,EAAS,iBAAGhB,QAAH,IAAGA,OAAH,EAAGA,EAAgBgB,iBAAnB,SACTvW,EAAW,iBAAGuV,QAAH,IAAGA,OAAH,EAAGA,EAAgBvV,mBAAnB,QAAkC,GAE7CwW,EAAWvO,IAAMkI,YAAN,sBAAkB,kCAAArY,EAAA,sDACzB2e,EAAoB3f,KAAY4f,SAClClgB,OAAOC,SAASO,OAAOkC,eACzByd,MAAMC,UACFC,EAAgBJ,EAChB3f,KAAYC,MAAM0f,EAAkB5O,YACpC,GACAiP,EAAaD,EAAa,UAAGA,EAAcpe,aAAjB,aAAG,EAAqBoP,WAAa,GAErEyO,EAAQ,OAACQ,QAAD,IAACA,IAAcre,GACnBA,GACA,OAAO,YAAcA,EAArB,SAAkCse,OAAM,SAACxgB,GACrCC,OAAOZ,QAAQC,KAAKU,MAZG,2CAehC,CAACkC,IAEEyX,EAAUjI,IAAMkI,YAAN,sBAAkB,kCAAArY,EAAA,sDACxBkf,EADwB,OAChBzB,QADgB,IAChBA,OADgB,EAChBA,EAAgBhG,mBAEhBtO,IAAVrO,IACMqkB,EAAa1G,aAAaC,QAAQ,cAClCJ,EAAiB,CACnBvD,UAAW,CACPwD,cAAe2G,EACfE,cAAeD,EACf3G,0BAAsBrP,EACtBwP,MAAOpE,EAAU8K,cACjBxG,aAAc/d,EAAMyD,UAI5B6W,EAAWL,UAAUuD,IAGH,OAAdmF,QAAc,IAAdA,OAAA,EAAAA,EAAgB6B,gBAAiBvD,GAAcwD,SAC/CJ,IAAehV,EAAeA,EAAemC,WAEvCgM,EAAiB,CACnBvD,UAAW,CACPwD,cAAe2G,EACfE,cAAeD,EACf3G,0BAAsBrP,EACtBwP,MAAOpE,EAAUiL,cACjB3G,aAAc/d,EAAMyD,UAI5B6W,EAAWL,UAAUuD,KA/BC,2CAkC/B,CAACxd,EAAO2iB,IAEXtN,IAAM4C,WAAU,WACZ2L,IACAtG,MACD,CAACsG,EAAUtG,IAEd,IAAMqH,EAAoBpH,uBACtB,SAACoG,EAAoBvW,GAA4C,IAAvBwX,IAAsB,yDACxDA,GAAcjB,EACd/f,OAAOC,SAASC,QAAQsJ,GAI5B4V,EAAgBvD,GAAaoF,YAEjC,IAGE7G,EAAeT,uBAAY,SAAC5Z,GAC9ByY,EAASrZ,YAAwBY,MAClC,IAEGof,EAAYxF,uBACd,eAACqH,IAAD,gEACID,EAAkBhB,EAAWvW,EAAawX,KAC9C,CAACjB,EAAWvW,EAAauX,IAGvB7B,EAAsBvF,sBAAW,uCACnC,WAAO9c,EAAY6C,GAAnB,uBAAA4B,EAAA,sEACuBme,GAAU5iB,EAAIoF,GADrC,UACUoJ,EADV,+DAKIwU,EAAQxU,GALZ,kBAQqCnE,IAAWa,sBACpClL,GATZ,OAQckiB,EARd,OAWQa,EAAkBb,GAClBM,EAAiB3f,GAEbA,IAAWwhB,GACX9B,EAAgBvD,GAAasF,UAEV,OAAdpC,QAAc,IAAdA,OAAA,EAAAA,EAAgBrf,UAAWsc,GAAcoF,QAC9CL,EACIhC,EAAegB,UACfhB,EAAevV,YACJ,kBAAX9J,GArBhB,qDAyBQ+D,IAAYwB,eAAe,CAAEC,UAAU,EAAD,MAClC5F,KAAMC,aAAN,MA1BZ,oBA2BkB8hB,EA3BlB,OA4B+BA,EAAW7hB,UAAY,CAAEE,OAAQ,GAA5CA,EA5BpB,EA4BoBA,SACYA,GAAU,KAAOA,EAAS,KA7B1D,+CAgC4BuK,IAAY8B,gBAAgB,CACpCyT,iBAAkB,CACdhN,iBAAkB3V,MAlC1C,QAwCQud,EAAa,EAAD,IAxCpB,0DADmC,wDA4CnC,CAACnY,EAAO8e,EAAmB3G,IAG/B,OACI,kBAACyE,GAAeyC,SAAhB,CACI/X,MAAO,CACHwV,iBACAC,eACA5iB,QACAiP,OACAnO,gBACAgiB,sBACA1G,SAAU4B,EACV+E,YACAC,kBACAC,qBAGHM,GAKEd,U,UCpNf,SAAS0C,GAAiBpe,GAEtB,IAAMqe,EATV,WACI,IAAMC,EAASC,wBAAa,kBAG5B,OAFaC,wBAAa,IAAIvS,KAAQqS,GAE1BG,MAKGC,GAIf,OAHuB1e,EAAQ2e,WAAW,QACrCN,GAAU,IAAMA,EAAS,GA0HnBO,OArHf,WAAgC,IAAD,EACnB5e,EAAYzG,IAAZyG,QACAvD,EAAM8L,cAAN9L,EACR,EAAsB6R,IAAMC,WAA5B,mBAAOzS,EAAP,KAAYqe,EAAZ,KACA,EAGI0E,qBAAWnD,IAFXE,EADJ,EACIA,eACAK,EAFJ,EAEIA,gBAIEviB,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GAE3BolB,EAAiBV,GAAiBpe,GAElC+e,EAAQ,UAAMnD,GAAkBnf,EAAEyd,GAAc0B,EAAe6B,eAAvD,YACN/jB,GAGF6c,EAAUjI,IAAMkI,YAAN,sBAAkB,8BAAArY,EAAA,sDACxB6gB,EAAOpI,aAAaC,QAAQ,cAC5BJ,EAAiB,CACnBvD,UAAW,CACPwD,cAAa,OAAEkF,QAAF,IAAEA,OAAF,EAAEA,EAAgBhG,cAC/Be,qBAAsBqI,EACtBlI,MAAOpE,EAAUuM,wBAIzB1L,EAAWL,UAAUuD,GAVS,2CAW/B,CAACmF,IAMJ,OAJAtN,IAAM4C,WAAU,WACZqF,MACD,CAACqF,EAAgBrF,IAGhB,kBAACzG,EAAA,EAAD,CAAM7G,UAAU,iCACZ,kBAAC6G,EAAA,EAAKzH,OAAN,KACI,4BAAKuT,GAAkBnf,EAAEyd,GAAc0B,EAAe6B,iBAG1D,kBAAC3N,EAAA,EAAKC,KAAN,KACI,kBAACC,EAAA,EAAD,KAEI,kBAACJ,EAAA,EAAD,CAAKsP,GAAI,GACL,kBAAC,GAAD,CACIpjB,IAAKA,EACLqe,OAAQA,EACRzgB,GAAIA,EACJ6C,OAAM,OAAEqf,QAAF,IAAEA,OAAF,EAAEA,EAAgBrf,UAGhC,kBAACqT,EAAA,EAAD,CAAKsP,GAAI,GAEL,kBAAClP,EAAA,EAAD,CAAK/G,UAAU,sBACX,0BAAMkW,wBACF,CAAEC,OAAQ3iB,EAAE,8EAA+E,CAAE4iB,cAAe,CAAEC,aAAa,SAIlIzjB,YAAMC,IAAQ,kBAACmO,EAAA,EAAD,CACXZ,QAAQ,oBACRJ,UAAU,aACVa,QAAS,kBAAM7L,YAAYnC,EAAD,kBAAiBijB,EAAjB,WAC1B,0BAAM9V,UAAU,0CACfxM,EAAE,2BAIQ,OAAdmf,QAAc,IAAdA,OAAA,EAAAA,EAAgBrf,UAAWsc,GAAcoF,QACtC,kBAAChU,EAAA,EAAD,CACIZ,QAAQ,UACRJ,UAAU,QACVsW,SAAUT,EACVhV,QAAS,kBAAMmS,EAAgBvD,GAAasF,WAC3CvhB,EAAE,wBAGVqiB,GACG,uBAAG7V,UAAU,YAAYxM,EACrB,uEACA,CAAE+iB,KAAM,WAAYC,GAAI,aAGhC,yBAAK/lB,GAAG,gBAAgBuP,UAAU,eAC9B,uBAAGjK,KAAK,IAAIiK,UAAU,kCAAkCxM,EAAE,wBAIjEZ,YAAMC,IACH,kBAAC8T,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,qBAClB6V,GACG,uBAAG7V,UAAU,YAAYxM,EACrB,uEACA,CAAE+iB,KAAM,WAAYC,GAAI,cAGjB,OAAd7D,QAAc,IAAdA,OAAA,EAAAA,EAAgBrf,UAAWsc,GAAcoF,QACtC,kBAAChU,EAAA,EAAD,CACIZ,QAAQ,UACRJ,UAAU,mBACVsW,SAAUT,EACVhV,QAAS,kBAAMmS,EAAgBvD,GAAasF,WAC3CvhB,EAAE,6BC9FxBijB,OA9Bf,YAIyB,IAHrB/M,EAGoB,EAHpBA,QACA7I,EAEoB,EAFpBA,QACA8I,EACoB,EADpBA,OAGQnW,EAAM8L,cAAN9L,EAEAyL,EACJ2W,qBAAWnD,IADPxT,KAYR,OATwByK,EAElBzI,EACG4I,QAAO,SAAA5M,GAAM,OAAIyM,EAAQnT,QAAQ0G,EAAOkE,OAAS,KAFpD,IAQgBT,KAAI,SAAA2D,GAAC,MAJTyF,EAIS,OAAIzF,EAAEhD,eAAiBgD,EAAElD,OAAS9B,EAAesC,WAA+C,eAA9B,OAAJ1C,QAAI,IAAJA,GAAA,UAAAA,EAAMhB,eAAN,eAAeoB,kBACpG,yBACI1M,IAAK0R,EAAElD,KACPnB,UAAW,cAAgBqE,EAAErE,WAPnB8J,EAOwCzF,EAAElD,KANjDsD,OAAOkF,KAAYlF,OAAOqF,GAAY,UAAY,IAOrDjJ,QAAS,kBAAMA,EAAQwD,EAAElD,QACxB3N,EAAE6Q,EAAEnD,YCnCJwV,GAAY,WAQrB,SAASC,EAAaC,GAClB,OAAO/hB,UAAUgiB,WAAaD,KAAQ/hB,UAAUgiB,UAGpD,SAASC,EAAgBC,GACrB,MAA8B,oBAAhBnjB,OAAOmjB,GAGzB,SAASC,EAAW5I,GAChB,GAAiB,iBAAPA,EAAiB,CAGvB,IAFA,IAAI6I,EAAMC,KAAKC,MAAM/I,EAAI5K,OAAS,GAC9B4T,EAAM,IAAIC,WAAWJ,GAChB3T,EAAI,EAAGA,EAAI2T,EAAK3T,IACrB8T,EAAI9T,GAAKb,SAAS2L,EAAIrZ,OAAW,EAAJuO,EAAO,GAAI,IAE5C,OAAO8T,GAIf,SAASE,EAAW5M,GAEhB,IADA,IAAI0M,EAAM,GACF9T,EAAI,EAAGA,EAAIoH,EAAKlH,OAAQF,IAAK8T,IAAQ1M,EAAKpH,GAAK,GAAK,IAAM,IAAMoH,EAAKpH,GAAG2B,SAAS,IACzF,OAAOmS,EAAI9gB,cAxBf1C,OAAO2jB,iBAAmB3jB,OAAO2jB,kBAAoB3jB,OAAO4jB,YAgD5D,IAAIC,EAAe,wBA2BnB,SAASC,IACDrN,KAAKsN,MAAQ,sCACb,IAAIC,EA9CZ,SAAuBhB,GACf,IAAIiB,EALZ,SAAiBjB,GACb,MAAO,MAAQA,EAAK9iB,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAIhCgkB,CAAQlB,GACtB,GAAGjhB,SAAS8a,eAAeoH,GAEvB,OAAOliB,SAAS8a,eAAeoH,GAInC,IAAIE,EAAY,eAAiBF,EAAU,WAAajB,EAAO,uFAC3DoB,EAAMriB,SAASC,cAAc,OAKjC,OAJAoiB,EAAIC,aAAa,KAAM,iBAAmBJ,GAC1CliB,SAASM,KAAKC,YAAY8hB,GAE1BriB,SAAS8a,eAAe,iBAAmBoH,GAASrN,UAAYuN,EACzDpiB,SAAS8a,eAAeoH,GAgCvBK,CAAcT,GAElBU,EAAkB,GAsBtB,SAASC,EAASC,GACd,OAAO,IAAIvlB,MArBf,SAAkBulB,GAEd,OADqCT,EAAE7J,aAChCtL,SAAS4V,IACZ,KAAK,EACD,MAlCF,cAmCF,KAAK,EACD,MAnCE,kBAoCN,KAAK,GACD,MAnCD,eAoCH,KAAK,GAED,MAvCG,mBAwCP,KAAK,GACD,MArCF,cAsCF,QAEI,OAD6CT,EAAE7J,aAzC7C,mBA+COuK,CAASD,IAE9BhO,KAAKkO,MAAQ,WACT,OAAO,IAAI5hB,SAAQ,SAASC,EAASiD,GAEjChD,YAAW,WACPD,EAA6B,qBAAdghB,EAAE7H,WAClB,OAGX1F,KAAKmO,WAAa,WACd,OAAO,IAAI7hB,SAAQ,SAASC,EAASiD,GAEjCjD,EADQghB,EAAE7H,aAIlB1F,KAAKoO,eAAiB,SAASC,GAK3B,OAHGA,GAAWA,EAAQ9Q,OAClBgQ,EAAEe,eAAiBD,EAAQ9Q,MAExB,IAAIjR,SAAQ,SAASC,EAASiD,GACjC,IACI,IAAI+e,EAAMhB,EAAE7H,QAAQ5P,MAAM,KACtB0Y,EAAKD,EAAI,IAAM,GAAKA,EAAI,IAAM,GAAMhB,EAAEa,eAAeC,EAAQ7O,QAAU+N,EAAEa,iBAChD,IAA1BhW,SAASmV,EAAEkB,WACVjf,EAAOue,EAASR,EAAEkB,aAGlBX,EAAgBU,EAAEE,MAAQF,EAAEpoB,GAC5BmG,EAAQ,CACJoiB,IAAKH,EAAEE,QAGjB,MAAME,GAEJpf,EAAOue,EAASR,EAAEkB,iBAI9BzO,KAAKza,KAAO,SAASmpB,EAAMG,EAAMR,GAC7B,OAAO,IAAI/hB,SAAQ,SAASC,EAASiD,GAEjC,IAAIsf,EAAMhB,EAAgBY,EAAKC,KAC/B,GAAGG,EACC,IAEI,IAAIziB,EAAWgiB,EAAQ9Q,MAAQ,KAE3BwR,EAAOV,EAAQU,MAAQ,GACvBR,EAAMhB,EAAE7H,QAAQ5P,MAAM,KAE1BvJ,EAAQ,CACJoiB,IAFKJ,EAAI,IAAM,GAAKA,EAAI,IAAM,GAAMhB,EAAEhoB,KAAKupB,EAAKD,EAAKF,IAAKtiB,EAAU0iB,GAAQxB,EAAEhoB,KAAKupB,EAAKD,EAAKF,IAAKtiB,KAIxG,MAAMuiB,GACGxf,KAAKC,UAAUuf,GACtBpf,EAAOue,EAASR,EAAEkB,iBAItBjf,EAAO,IAAI/G,MA9GR,yBAoHvB,SAASumB,IACLhP,KAAKsN,MAAQ,oCACb,IAAIC,EAAI,KACRvN,KAAKkO,MAAQ,WACT,OAAO,IAAI5hB,SAAQ,SAASC,EAASiD,GACjC,IAAKid,EA7HI,gBA8HL,OAAOlgB,GAAQ,GAKfA,KAFJghB,EAAI,IAAIhkB,OAAM,mBAQtByW,KAAKmO,WAAa,WACd,OAAOZ,EAAEY,cAEbnO,KAAKoO,eAAiB,SAASC,GAC3B,OAAOd,EAAEa,eAAeC,IAE5BrO,KAAKza,KAAO,SAASmpB,EAAMG,EAAMR,GAC7B,OAAOd,EAAEhoB,KAAKmpB,EAAMG,EAAMR,IAKlC,SAASY,IACLjP,KAAKsN,MAAQ,oBACbtN,KAAKkO,MAAQ,WACT,OAAO,IAAI5hB,SAAQ,SAASC,EAASiD,GACjCjD,GAAQ,OAGhByT,KAAKmO,WAAa,WACd,OAAO7hB,QAAQkD,OAAO,IAAI/G,MAtJV,uBAwJpBuX,KAAKoO,eAAiB,WAClB,OAAO9hB,QAAQkD,OAAO,IAAI/G,MAzJV,uBA2JpBuX,KAAKza,KAAO,WACR,OAAO+G,QAAQkD,OAAO,IAAI/G,MA5JV,uBAcxBc,OAAO2jB,iBAAiB,QAAQ,SAAS1J,GAR9BiJ,EAbU,gBAgBVH,EAAac,MAuJxB,IAAI8B,EAAW,KAEXC,EAAS,GAEb,SAASC,EAAYC,GACjB,OAAO,IAAI/iB,SAAQ,SAASC,EAASiD,GACjC,IAAIwK,EAAI,IAAIqV,EACZrV,EAAEkU,QAAQ5a,MAAK,SAASgc,GAChBA,GAC2BtV,EAAEsT,MAC7B4B,EAAWlV,EACXzN,GAAQ,KAEDyN,EAAEsT,MACT/gB,GAAQ,UAMxB,SAASgjB,EAAYC,GACjB,OAAO,IAAIljB,SAAQ,SAASC,EAASiD,GAKjC,GAHqB,qBAAVggB,IACPA,GAAQ,GAEK,OAAbN,IAAsBM,EACtB,OAAOjjB,GAAQ,GAGnB,SAASkjB,IACLL,EAAY/B,GAAe/Z,MAAK,SAASoc,GAEjCnjB,IADAmjB,GAGQN,EAAYH,OAMhC,OAA6C,IAAzCzkB,UAAUC,UAAUyB,QAAQ,UAA8D,IAA5C1B,UAAUC,UAAUyB,QAAQ,WAEnEujB,IAI4ChD,EAtN1C,qBAuNT2C,EAAYJ,GAAkB1b,MAAK,SAASoc,GACpCA,EACAnjB,GAAQ,GAERkjB,OAORnD,EAAac,GACNqC,SAIXljB,EAAQ6iB,EAAYH,OAiG5B,OA7FAE,EAAO7e,IAAM,SAASqf,GAClB,OAAO,IAAIrjB,SAAQ,SAASC,EAASiD,GACV,qBAAZmgB,GAAuC,SAAZA,EAClCJ,IAAcjc,MAAK,SAASoc,GAAUnjB,EAAQmjB,MAG1CnjB,EADY,WAAZojB,EACQP,EAAYJ,GACD,UAAZW,GACCP,EAAY/B,QAQpC8B,EAAOS,MAAQ,WACX,OAAO,IAAItjB,SAAQ,SAASC,EAASiD,GACjC,IAAIqgB,EAAY,gCAChBN,IAAcjc,MAAK,SAASoc,GACxBR,EAASf,aAAa7a,MAAK,SAASoS,GAChCnZ,EAAQsjB,EAAY,SAAWX,EAAS5B,MAAQ,IAAM5H,MACvD,SAAS/f,GACR4G,EAAQsjB,EAAY,yBAA2BX,EAAS5B,iBAMxE6B,EAAOf,eAAiB,SAASC,GAC7B,MAAsB,kBAAZA,EAEC/hB,QAAQkD,OAAO,IAAI/G,MAvQX,sBA0QhB4lB,IAAYA,EAAQ9Q,OACnB8Q,EAAQ9Q,KAAO,MAEZgS,IAAcjc,MAAK,SAASoc,GAE/B,MAAiC,WAA7BnmB,OAAOC,SAASyU,UAAsD,UAA7B1U,OAAOC,SAASyU,SAClD3R,QAAQkD,OAAO,IAAI/G,MA5QpB,gBA8QHymB,EAASd,eAAeC,GAAS/a,MAAK,SAASwc,GAIlD,OAFIA,EAAYnB,MAAQmB,EAAYC,UAChCD,EAAYC,QAAUpD,EAAWmD,EAAYnB,MAC1CmB,UAKnBX,EAAO5pB,KAAO,SAASmpB,EAAMG,EAAMR,GAC/B,OAAI2B,UAAU7W,OAAS,EACZ7M,QAAQkD,OAAO,IAAI/G,MA7RX,sBA+RhB4lB,IAAYA,EAAQ9Q,OACnB8Q,EAAQ9Q,KAAO,MAGdsR,EAAK/X,OAAU+X,EAAK/b,OAAU+b,EAAKF,MAKpCE,EAAKF,MAAQE,EAAK/b,QAElB+b,EAAK/b,MAAQ6Z,EAAWkC,EAAKF,MAE7BE,EAAK/b,QAAU+b,EAAKF,MACpBE,EAAKF,IAAM1B,EAAW4B,EAAK/b,QAExByc,IAAcjc,MAAK,SAASoc,GAE/B,MAAgC,WAA7BnmB,OAAOC,SAASyU,UAAsD,UAA7B1U,OAAOC,SAASyU,SACjD3R,QAAQkD,OAAO,IAAI/G,MA9SpB,gBAgTHymB,EAAS3pB,KAAKmpB,EAAMG,EAAMR,GAAS/a,MAAK,SAAS2c,GAKpD,OAFIA,EAAUtB,MAAQsB,EAAUnd,QAC5Bmd,EAAUnd,MAAQ6Z,EAAWsD,EAAUtB,MACpCsB,SArBJ3jB,QAAQkD,OAAO,IAAI/G,MApSX,uBA8TvB0mB,EAAOe,kBA3TiB,oBA4TxBf,EAAOgB,YAjUW,cAkUlBhB,EAAOiB,YA5TW,cA6TlBjB,EAAOkB,gBAlUe,kBAmUtBlB,EAAOmB,gBAhUe,kBAiUtBnB,EAAOoB,iBAnUgB,mBAoUhBpB,EA/Xc,GC0FVqB,OAlFf,WAA4B,IAAD,EACvB,EAAoBvb,cAAZ9L,EAAR,EAAQA,EAAG+L,EAAX,EAAWA,KACX,EAA8B8F,IAAMC,UAAS,GAA7C,mBAAOwV,EAAP,KAAgBC,EAAhB,KACA,EAAgDnF,qBAAWnD,IAAnDE,EAAR,EAAQA,eAAgBvG,EAAxB,EAAwBA,SAAU2G,EAAlC,EAAkCA,UAE5BtiB,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GALV,4CAOvB,gCAAAyE,EAAA,6DACIkX,OAAS/N,GAET0c,GAAW,GAHf,kBAMkCrE,GAAS+B,eAAe,CAC9C7Q,KAAMrI,EAAK7I,WAPvB,cAMcyjB,EANd,OAUQnnB,QAAQC,KAAKknB,EAAa,eAVlC,SAYmCrf,IAAWc,mBAClCnL,EACA0pB,EAAYnB,KAdxB,cAYcgC,EAZd,iBAkBqCtE,GAAS9mB,KAClCuqB,EACA,CAAEhZ,KAAM,UAAW6X,IAAG,OAAEgC,QAAF,IAAEA,OAAF,EAAEA,EAAcC,QACtC,CAAErT,KAAMrI,EAAK7I,WArBzB,eAkBc4jB,EAlBd,OAuBQtnB,QAAQC,KAAKwG,KAAKC,UAAU4gB,GAAY,aAvBhD,UAyBcY,EACFZ,EAAUtB,KAAO,GACjBvoB,GACY,OAAZuqB,QAAY,IAAZA,OAAA,EAAAA,EAAcG,cAAe,IA5BzC,0DA+BQ9jB,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,EAAD,IACR2O,GAAW,GAjCnB,2DAPuB,+BA4CRG,EA5CQ,kFA4CvB,WACInf,EACAf,EACAgB,GAHJ,eAAA9G,EAAA,sEAKuB4F,IAAWgB,mBAC1Bd,EACAe,EACAC,GARR,OAKU3I,EALV,OAWI0nB,GAAW,GAEP1nB,GAAQA,EAAKkB,IACbX,OAAOC,SAASC,QAAQT,EAAKkB,KAE7Bwe,IAhBR,4CA5CuB,sBAgEvB,OACI,kBAAChM,EAAA,EAAD,KACI,kBAACL,EAAA,EAAD,CAAWjW,GAAG,mBACTqqB,EACG,kBAACjZ,EAAD,MAEA,oCACI,kBAAC8F,EAAD,MACA,kBAAC3G,EAAA,EAAD,CAAQH,QAxEL,2CAwE4BT,QAAQ,WAClC5M,EAAE,gBC0EhB4nB,OAzIf,WAA8B,IAAD,IACjB5nB,EAAM8L,cAAN9L,EACR,EAAwC6R,IAAMC,SAC1CxO,YAAmBxG,IAAUyG,UADjC,mBAAOwO,EAAP,KAAqBC,EAArB,KAGA,EAAsDH,IAAMC,UAAS,GAArE,mBAAOG,EAAP,KAA4BC,EAA5B,KACA,EAAkCL,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EAAoCV,IAAMC,SAAS,IAAnD,mBAAOnM,EAAP,KAAakiB,EAAb,KAEA,EACIzF,qBAAWnD,IADPE,EAAR,EAAQA,eAAgB1T,EAAxB,EAAwBA,KAAM8T,EAA9B,EAA8BA,UAAW3G,EAAzC,EAAyCA,SAGnC3b,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GAZR,4CAkBzB,gCAAAyE,EAAA,yDACIkX,OAAS/N,GAE6B,cAA9B,OAAJY,QAAI,IAAJA,GAAA,UAAAA,EAAMhB,eAAN,eAAeoB,gBAHvB,mBAIwBiH,IAJxB,iEASQP,GAAa,GATrB,SAU2BjL,IAAWvJ,qBAAqB,CAC/CyJ,iBAAkBvK,EAClBsK,YAAawK,GAAgB,KAZzC,cAUclS,EAVd,OAecioB,EAAejoB,EAAKkoB,iBAC1BF,EAAoBC,GACpBvV,GAAa,GAjBrB,UAmBcjL,IAAWtJ,qBAAqB,CAClC+pB,iBAAkBD,GAAgB,GAClCvf,eAAgB1I,EAAK0I,gBAAkB,GACvCf,iBAAkBvK,EAClBuL,YAAa3I,EAAK8nB,aAAe,KAvB7C,QA0BQpI,IA1BR,kDA4BQ1b,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,EAAD,IA7BhB,QAgCIrG,GAAa,GAhCjB,2DAlByB,sBAqDzB,GAAID,EACA,OACI,kBAACY,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACkW,EAAA,EAAD,CAAKC,GAAI,IACL,kBAAC/E,EAAD,QAMhB,SAASyE,IACL,IAAMlE,EAAUH,EACZsD,EACAjV,IAAUyG,SAId,OAFA2O,EAAuBtD,GAEhBA,EAGX,OAAIjJ,EAEI,kBAACuN,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACoW,EAAA,EAAD,KACI,kBAACA,EAAA,EAAKC,KAAN,CAAW9G,UAAU,0BACjB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,WACX,kBAAC2G,EAAA,EAAD,CAAKC,GAAI,IACL,2BACKpT,EACG,oFAGR,4BAAK2F,KAGb,kBAAC0I,EAAD,SAQhB,kBAAC6E,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACkW,EAAA,EAAD,CAAKC,GAAI,IAC8B,cAA9B,OAAJ3H,QAAI,IAAJA,GAAA,UAAAA,EAAMhB,eAAN,eAAeoB,gBACZ,oCACI,2BAAI7L,EAAE,gCAAN,KACA,2BAAIA,EAAE,8CAGV,oCACI,2BACKA,EACG,kEAGR,2BAAIA,EAAE,qCAAN,KACA,2BAAIA,EAAE,6CACN,kBAACyT,EAAA,EAAD,CACIC,YAAa1T,EAAE,gBACfwM,UAAU,OACV/K,KAAK,eACLxE,GAAG,eACH0W,SAvGxB,SAA8BxT,GAC1B6R,EAAgB7R,EAAEyT,cAAcjK,QAuGZkK,OAAQf,EACRgB,WAAY7B,EACZ8B,aAAchC,IAElB,kBAACiC,EAAA,EAAKC,QAAQC,SAAd,CAAuBvG,KAAK,WACvB3N,EAAE,4CAKnB,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QACnB,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAjIb,4CAkIRrN,EAAE,eC7CRgoB,OAhGf,WAAgC,IAAD,EAC3B,EAAkCnW,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EAAoCV,IAAMC,SAAS,IAAnD,mBAAOnM,EAAP,KAAakiB,EAAb,KACQ7nB,EAAM8L,cAAN9L,EACR,EAAgDoiB,qBAAWnD,IAAnDE,EAAR,EAAQA,eAAgBI,EAAxB,EAAwBA,UAAW3G,EAAnC,EAAmCA,SAE7B3b,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GANN,4CAQ3B,gCAAAyE,EAAA,6DACIkX,OAAS/N,GAET0H,GAAa,GAHjB,SAMc0V,EAAcnrB,IAAUyG,QANtC,SAOmC+D,IAAWrJ,oBAAoB,CACtDsF,QAAS0kB,GAAe,GACxBzgB,iBAAkBvK,IAT9B,cAOcuqB,EAPd,OAWcM,EAAeN,EAAaO,iBAClCF,EAAoBC,GACpBvV,GAAa,GAbrB,UAecjL,IAAW2B,oBAAoB,CACjC8e,iBAAkBD,GAAgB,GAClCvf,eAAgBif,EAAajf,gBAAkB,GAC/Cf,iBAAkBvK,EAClBuL,YAAagf,EAAaG,aAAe,KAnBrD,QAqBQpI,IArBR,kDAuBQ1b,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,EAAD,IAxBhB,QA2BIrG,GAAa,GA3BjB,2DAR2B,sBAsC3B,OAAID,EAEI,kBAACY,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,KACI,kBAAC9E,EAAD,QAMZ1I,EAEI,kBAACuN,EAAA,EAAD,KACI,kBAACG,EAAA,EAAD,KACI,kBAACA,EAAA,EAAKC,KAAN,CAAW9G,UAAU,0BACjB,kBAAC+G,EAAA,EAAD,CAAK/G,UAAU,WACX,4BAAKxM,EAAE,sBACP,4BAAK2F,IAET,kBAAC0I,EAAD,OAEJ,kBAACgF,EAAA,EAAKuC,OAAN,KACI,kBAACrC,EAAA,EAAD,CAAK/G,UAAU,gBACX,yBAAKA,UAAU,wCACf,yBAAKA,UAAU,UACVxM,EACG,mGAW5B,kBAACkT,EAAA,EAAD,KACI,kBAACK,EAAA,EAAD,KACI,kBAACL,EAAA,EAAD,KACI,6BACI,2BACKlT,EACG,4DAMpB,kBAACuT,EAAA,EAAD,CAAK/G,UAAU,QACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAxFX,4CAyFVrN,EAAE,eCvFjB4X,GAAU,CACZ,CACI,CACIC,SAAU,QACVC,OAAQ,sBACRC,QAAS,eAEb,CACIF,SAAU,WACVC,OAAQ,yBACRC,QAAS,WAEb,CACIF,SAAU,KACVC,OAAQ,yBACRC,QAAS,kDAGjB,CACI,CACIF,SAAU,OACVC,OAAQ,sBACRC,QAAS,iBAEb,CACIF,SAAU,MACVC,OAAQ,eACRC,QAAS,OAEb,CACIF,SAAU,KACVC,OAAQ,2BACRC,QAAS,0CAGjB,CACI,CACIF,SAAU,QACVC,OAAQ,oBACRC,QAAS,YAEb,CACIF,SAAU,QACVC,OAAQ,oBACRC,QAAS,YAEb,CACIF,SAAU,MACVC,OAAQ,eACRC,QAAS,S,SAmGNmQ,G,qFAAf,WACIjrB,EACAkrB,EACAvW,GAHJ,eAAAlQ,EAAA,sEAMQkQ,OAAQ/G,GANhB,SAQ8BvD,IAAWa,sBAAsBlL,GAR/D,mBAUqC4N,KAFvB0W,EARd,QAUoB6G,cACiB,KAAzB7G,EAAQ6G,cACiB,OAAzB7G,EAAQ6G,cAERxW,EAAQ,IAAItS,MAAMiiB,EAAQ6G,eAdtC,SAiB+B9gB,IAAWoB,0BAA0BzL,GAjBpE,cAmBqB6C,SAAWsc,GAAcoF,OAClC2G,IAEA9kB,WACI6kB,GACA9P,GACAnb,EACAkrB,EACAvW,GA3BhB,kDA+BQ/N,IAAYwB,eAAe,CAAEC,UAAU,EAAD,KACtCsM,EAAQ,EAAD,IAhCf,2D,sBAoCeyW,OAlIf,WAA6B,IAAD,EACxB,EAAsCxW,IAAMC,WAA5C,mBAAOwW,EAAP,KAAoBC,EAApB,KACQvoB,EAAM8L,cAAN9L,EACR,EACIoiB,qBAAWnD,IADPE,EAAR,EAAQA,eAAgB7hB,EAAxB,EAAwBA,cAAeiiB,EAAvC,EAAuCA,UAAW3G,EAAlD,EAAkDA,SAE5C3b,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GAE3BurB,EAAqB3W,IAAMkI,YAAN,sBAAkB,4BAAArY,EAAA,yDACrCpE,IAAkBgkB,GADmB,gCAElBha,IAAW1J,gBAAgBX,GAFT,OAE/B4C,EAF+B,OAIrC0oB,EAAe1oB,GAEXA,GAAQA,EAAK4oB,SACblJ,IAEA2I,GAAmBjrB,EAAIsiB,EAAW3G,GATD,2CAY1C,CAAC3b,EAAI2b,EAAU2G,EAAWjiB,IAE7BuU,IAAM4C,WAAU,WACZ+T,MACD,CAACA,IAEJ,IAAMvQ,EACF,SAACxP,GAAD,8CAAkB,WAAOtI,GAAP,eAAAuB,EAAA,6DACdvB,EAAEmN,iBADY,SAEKhG,IAAW7J,gBAAgBR,EAAIwL,GAFpC,OAER5I,EAFQ,OAGdO,OAAOC,SAASC,QAAQT,EAAKkB,KAHf,2CAAlB,uDAUJ,OAAIunB,EAEI,kBAAC/U,EAAA,EAAD,KACI,kBAACJ,EAAA,EAAD,CAAKC,GAAI,IACL,yBAAK5G,UAAU,eACVxM,EACG,iOAIZ,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QACnB,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAf1C,WACIib,GAAeloB,OAAOC,SAASC,QAAQgoB,EAAYI,cAelC1oB,EAAE,YAQnB,kBAACkT,EAAA,EAAD,CAAW1G,UAAU,eACjB,kBAAC+G,EAAA,EAAD,KACI,wBAAI/G,UAAU,eACTxM,EACG,yEAFR,MAOJ,kBAACuT,EAAA,EAAD,KACI,kBAACJ,EAAA,EAAD,KACKyE,GAAQ1K,KAAI,SAACgL,EAAKpI,GAAN,OACT,kBAACyD,EAAA,EAAD,CAAKpU,IAAK2Q,EAAGtD,UAAU,uBAClB0L,EAAIhL,KAAI,SAACzE,GAAD,OACL,yBACI+D,UAAU,oCACVrN,IAAKsJ,EAAKoP,UAEV,uBACItV,KAAK,IACL8K,QAAS4K,EAAgBxP,EAAKoP,WAE9B,yBACIhL,IAAKpE,EAAKqP,OACVhL,IAAKrE,EAAKsP,QACVI,YAAW1P,EAAKoP,wBCxE7C8Q,OAhEf,WAA+B,IAAD,EAC1B,EAAkC9W,IAAMC,UAAS,GAAjD,mBAAOQ,EAAP,KAAkBC,EAAlB,KACA,EAAoBzG,cAAZ9L,EAAR,EAAQA,EAAG+L,EAAX,EAAWA,KACX,EAAqCqW,qBAAWnD,IAAxCE,EAAR,EAAQA,eAAgBvG,EAAxB,EAAwBA,SAElB3b,EAAE,iBAAGkiB,QAAH,IAAGA,OAAH,EAAGA,EAAgBliB,UAAnB,QAAyB,GALP,4CAO1B,8BAAAyE,EAAA,6DACIkX,OAAS/N,GAET0H,GAAa,GAHjB,SAMc1J,EAAmBkD,EAAK7I,SAC9BoV,eAAeC,QAAQH,GAA+Bnb,GAP9D,SASkCqK,IAAWxI,sBAAsB,CACvDH,OAAQkK,GAAoB,GAC5BrB,iBAAkBvK,EAClB2B,YAAawB,OAAOC,SAAS4K,OAASjP,IAAUW,wBAZ5D,OASciN,EATd,OAeQxJ,OAAOC,SAASkC,KAAOqH,EAf/B,kDAkBQ/F,IAAYwB,eAAe,CAAEC,UAAS,OACtCsT,EAAS,EAAD,IAnBhB,QAsBIrG,GAAa,GAtBjB,2DAP0B,sBAgC1B,OAAID,EAEI,kBAACY,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,KACI,kBAAC9E,EAAD,QAOZ,kBAAC6E,EAAA,EAAD,KACI,kBAACK,EAAA,EAAD,KACI,kBAACL,EAAA,EAAD,KACI,6BACI,2BACKlT,EACG,4DAMpB,kBAACuT,EAAA,EAAD,CAAK/G,UAAU,QACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,UAAUS,QAxDZ,4CAyDTrN,EAAE,eC2BR4oB,OA/Ef,WAEI,IAAQ5oB,EAAM8L,cAAN9L,EACR,EAIIoiB,qBAAWnD,IAHXE,EADJ,EACIA,eACA7hB,EAFJ,EAEIA,cACAmO,EAHJ,EAGIA,KAGJ,EAA0CoG,IAAMC,UAAqC,WAEjF,OAAIxU,IAAkBgkB,GAAiCzV,EAAemC,SAGrD,OAAdmR,QAAc,IAAdA,OAAA,EAAAA,EAAgB6B,gBAAiBvD,GAAcoL,iBAA/C,OAAiE1J,QAAjE,IAAiEA,OAAjE,EAAiEA,EAAgB1R,eAAeqb,SAASjd,EAAe+B,aAChH/B,EAAe+B,WAGtBnC,GAAQA,EAAKhB,QAAQoB,kBAAkBA,IAAvC,OAAyDsT,QAAzD,IAAyDA,OAAzD,EAAyDA,EAAgB1R,eAAeqb,SAASjd,EAAeJ,EAAKhB,QAAQoB,kBAEtHA,EAAeJ,EAAKhB,QAAQoB,gBAGvC,OAAOsT,QAAP,IAAOA,OAAP,EAAOA,EAAgB1R,eAAe,MAd1C,mBAAOqT,EAAP,KAAsBiI,EAAtB,KA+CMnR,EAAU,kBAAC,GAAD,CACZ1B,QAASiJ,GAAkBA,EAAe1R,eAC1C0I,OAAQ2K,EACRzT,QAAS0b,IAEb,OACI,kBAAC1V,EAAA,EAAD,CAAM7G,UAAU,gBACZ,kBAAC6G,EAAA,EAAKzH,OAAN,KACI,kBAAC2H,EAAA,EAAD,CAAK/G,UAAU,eAEVoL,EAED,yBAAKpL,UAAU,0BAIvB,kBAAC6G,EAAA,EAAKC,KAAN,KA9CR,WAEI,OAAQwN,GACJ,KAAKjV,EAAeqC,OAEhB,OADAiM,aAAa5B,QAAQ,aAAc1M,EAAeiV,KAC1C3f,eAAc,kBAAC6nB,GAAD,MAE1B,KAAKnd,EAAekC,SAEhB,OADAoM,aAAa5B,QAAQ,aAAc1M,EAAeiV,IAC3C,kBAAC,GAAD,MAEX,KAAKjV,EAAemC,QAEhB,OADAmM,aAAa5B,QAAQ,aAAc1M,EAAeiV,IAC3C,kBAAC,GAAD,MAEX,KAAKjV,EAAe+B,WACpB,KAAK/B,EAAeiC,aAEhB,OADAqM,aAAa5B,QAAQ,aAAc1M,EAAeiV,IAC3C,kBAAC,GAAD,MAEX,KAAKjV,EAAesC,UAEZ,OADAgM,aAAa5B,QAAQ,aAAc1M,EAAeiV,IAC3C,kBAAC,GAAD,MAEf,QACI,OAAO,wBAAItU,UAAU,eAAexM,EAAE,8CAsBrCipB,MCwDFC,OAjIf,WAEI,IAAQlpB,EAAM8L,cAAN9L,EACR,EAGIoiB,qBAAWnD,IAFXE,EADJ,EACIA,eACAvG,EAFJ,EAEIA,SAGIrV,EAAYzG,IAAZyG,QAEF4lB,GAA0B,OAAdhK,QAAc,IAAdA,OAAA,EAAAA,EAAgB6B,gBAAiBvD,GAAcwD,QAC3DmI,GAAgC,OAAdjK,QAAc,IAAdA,OAAA,EAAAA,EAAgBrf,UAAWsc,GAAcoF,QAAU2H,GAAyB,OAAZ5lB,EAElFuW,EAAUjI,IAAMkI,YAAN,sBAAkB,gCAAArY,EAAA,sDACxBmf,EAAa1G,aAAaC,QAAQ,cAClCJ,EAAiB,CACnBvD,UAAW,CACPwD,cAAa,OAAEkF,QAAF,IAAEA,OAAF,EAAEA,EAAgBhG,cAC/B2H,cAAeD,EACf3G,0BAAsBrP,EACtBwP,MAAOpE,EAAUoT,iBAIzBvS,EAAWL,UAAUuD,IAEH,OAAdmF,QAAc,IAAdA,OAAA,EAAAA,EAAgB6B,gBAAiBvD,GAAcwD,SAC/CJ,IAAehV,EAAeA,EAAemC,WACvCgM,EAAiB,CACnBvD,UAAW,CACPwD,cAAa,OAAEkF,QAAF,IAAEA,OAAF,EAAEA,EAAgBhG,cAC/B2H,cAAeD,EACf3G,0BAAsBrP,EACtBwP,MAAOpE,EAAUqT,iBAIzBxS,EAAWL,UAAUuD,IAxBK,2CA0B/B,CAACmF,IAvCwB,SA6CboK,IA7Ca,2EA6C5B,kCAAA7nB,EAAA,yDAESyd,EAFT,uBAGQvG,EAAS,IAAItZ,MAAM,YAH3B,iCAOUuhB,EAAa1G,aAAaC,QAAQ,cAP5C,SASuB9S,IAAW4B,kBAAkBiW,EAAeliB,IATnE,OASU8E,EATV,OAWUynB,EAAY3I,IAAehV,EAAeA,EAAemC,SAAW,MACxD,OAAZzK,EACI,OACY,OAAZA,EACI,QACA,OAER+e,EAlBV,kBAkB4CtiB,EAAZmpB,EAAc,UAAe,kBAlB7D,YAmBYhK,EAAehG,cAnB3B,YAmB4CqQ,GAExC1nB,YAAaC,EAAMugB,GArBvB,6CA7C4B,sBAqE5B,OA5BAzQ,IAAM4C,WAAU,WACZqF,MACD,CAACA,IA2BA,kBAACvG,EAAA,EAAD,CAAK/G,UAAU,wBACX,kBAAC6G,EAAA,EAAD,KACK+V,GACG,kBAAC/V,EAAA,EAAKzH,OAAN,KACI,4BAAK5L,EAAE,qDAGC,IAAdmpB,GAAkC,OAAZ5lB,IACpB,kBAAE8P,EAAA,EAAKzH,OAAP,KACI,4BAAK5L,EAAE,6BAEf,kBAACqT,EAAA,EAAKC,KAAN,KACI,kBAACJ,EAAA,EAAD,MACmB,OAAdiM,QAAc,IAAdA,OAAA,EAAAA,EAAgBrf,UAAWsc,GAAcoF,QAAU2H,GAChD,kBAAChW,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QACnB,uBAAGA,UAAU,eAAexM,EAAE,2FAGtB,IAAdmpB,GAAkC,OAAZ5lB,IACpB,kBAAC4P,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QACnB,uBAAGA,UAAU,eAAexM,EAAE,wEAGtC,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,QAClB4c,GACG,kBAAC5b,EAAA,EAAD,CACIZ,QAAQ,oBACRJ,UAAU,OACVa,QAASkc,GACT,0BAAM/c,UAAU,0CACfxM,EAAE,sCAGK,IAAdmpB,GAAkC,OAAZ5lB,IACpB,kBAACiK,EAAA,EAAD,CACIZ,QAAQ,oBACRJ,UAAU,OACVa,QAASkc,GACT,0BAAM/c,UAAU,0CACfxM,EAAE,+BAGf,kBAACmT,EAAA,EAAD,CAAKC,GAAI,GAAI5G,UAAU,gBACH,IAAd2c,GAAkC,OAAZ5lB,IACpB,kBAACiK,EAAA,EAAD,CACIZ,QAAQ,UACRS,QAAS,WACLjN,OAAOC,SAASC,QAAQ6e,EAAiBA,EAAevV,YAAc,MAEzE5J,EAAE,2BCnDxBypB,OAvEf,YAAoE,IAAhD9Q,EAA+C,EAA/CA,MAEhB,EAMIyJ,qBAAWnD,IALXK,EADJ,EACIA,oBACAH,EAFJ,EAEIA,eACAC,EAHJ,EAGIA,aACA5iB,EAJJ,EAIIA,MACAoc,EALJ,EAKIA,SAEI5Y,EAAM8L,cAAN9L,EA0BR,SAAS+a,IAEL,OAAIve,EAEI,kBAAC2W,EAAA,EAAD,CAAK3G,UAAU,sBACX,kBAACgB,EAAA,EAAD,CAAQZ,QAAQ,QACZS,QAAS,WACLjN,OAAOC,SAASC,QAAQ6e,EAAiBA,EAAelG,QAAU,MAErEjZ,EAAE,oBAJP,OASL,KAGX,OA1CA6R,IAAM4C,WACF,WACI6K,EAAoB3G,EAAMzX,OAAOjE,GAAI0b,EAAMzX,OAAOpB,UAEtD,CAACwf,EAAqB3G,EAAOyG,IAuC7B,kBAAClM,EAAA,EAAD,CAAWjW,GAAG,YACRkiB,GAAmB3iB,EAEf,oCACGA,GACG,kBAACwe,EAAA,EAAD,CAAOpO,QAAQ,SAASqO,aAAW,EAACC,QAAS,kBAAMiE,GAAkBvG,OAAS/N,KACzErO,EAAMyD,SA1C/B,WAEI,IAAKkf,EAAgB,OAAO,KAE5B,OAAQC,GACJ,KAAKnD,GAAasF,QAEd,OAAO,kBAAC,GAAD,MAEX,KAAKtF,GAAaoF,SAEd,OAAO,kBAAC,GAAD,MAEX,QACI,OAAO,kBAAC,GAAD,OAgCFqI,GACD,kBAAC3O,EAAD,OATF,kBAAC1M,EAAD,QCnDHuH,ICSoD,MDTpDA,GAbf,WAEI,IAAQ5V,EAAM8L,cAAN9L,EAER,OAAO,yBAAK/C,GAAG,SAASuP,UAAU,mBAC9B,yBAAKA,UAAU,6BAA6BvP,GAAG,iBAC3C,uBAAGuP,UAAU,eAAb,QACYxM,EAAE,gBEFpBkoB,I,OAAkB,uCAAG,WAAOjrB,GAAP,eAAAyE,EAAA,sEAEU4F,IAAWxJ,cAAcb,GAFnC,WAEb0sB,EAFa,QAIA7pB,SAAWsc,GAAcoF,QACxCmI,EAAe7pB,SAAWsc,GAAcwN,cALzB,iCAOTvf,IAAY6B,kBAPH,uBAQT7B,IAAYsV,eAAe,CAC7BC,iBAAkB,CACdhN,iBAAkB3V,EAClB4sB,YAAY,GAAD,OAAKzpB,OAAOC,SAAS4K,OAArB,iBAAoChO,MAXxC,4CAgBf0sB,EAAe7pB,SAAWsc,GAAc0N,OAhBzB,uBAiBT,IAAIxqB,MAAM,kBAjBD,yBAmBb,IAAI6D,SAAQ,SAACC,GAAD,OAAaC,WAAWD,EAAS,QAnBhC,mEAAH,uDAuBX2mB,GAAgE,SAAC,GAEvE,IADHpR,EACE,EADFA,MAEA,EAA0B7G,qBAA1B,mBAAOtV,EAAP,KAAcoc,EAAd,KACMpR,EAAmBmR,EAAMzX,OAAOjE,GAStC,OAPAwX,qBAAU,WACNnN,IACK1J,gBAAgB4J,GAChB2C,MAAK,kBAAM+d,GAAmB1gB,MAC9BmZ,MAAM/H,KACZ,CAACpR,IAEAhL,EAEI,kBAAC0W,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACoW,EAAA,EAAD,KACI,kBAACA,EAAA,EAAK2W,MAAN,KACI,kBAAChP,EAAA,EAAD,CAAOpO,QAAQ,UAAUpQ,EAAMyD,YAQ/C,kBAACiT,EAAA,EAAD,CAAWjW,GAAG,YACV,yBAAKuP,UAAU,iCACX,kBAAC8B,EAAA,EAAD,CAASC,UAAU,cClDtB0b,GAAkE,SAAC,GAE1E,EADFtR,MACG,IACH,EAA0B7G,qBAA1B,mBAAOtV,EAAP,KAAcoc,EAAd,KACMhY,EAASR,OAAOC,SAASO,OACzBM,EAAS,IAAIwY,gBAAgB9Y,GAC7B4G,EAAmB8Q,eAAe8B,QAAQhC,IAIxCpY,EAAM8L,cAAN9L,EARN,4CAWF,gCAAA0B,EAAA,mEAGyD,IAA7CtB,OAAOC,SAASO,OAAOmC,QAAQ,SAH3C,gBAIkBmnB,EAAWhpB,EAAO6G,IAAI,SAC5B6Q,EAAS,IAAItZ,MAAM4qB,GAAsB,KALrD,4BAMmB9pB,OAAOC,SAASO,OAAOmC,QAAQ,SAAW,GAN7D,iCAQsBuE,IAAWwB,mBAAmBlI,EAAQR,OAAOC,SAAS4K,OAASjP,IAAUU,mBAR/F,OAOkBytB,EAPlB,OAUY7iB,IAAWtI,WAAX,UACImrB,EAAWzrB,iBADf,QAC4B0B,OAAOC,SAAS4K,OAASjP,IAAUM,SAC3D6tB,EAAWzgB,QAZ3B,0DAgBQkP,EAAS,EAAD,IAhBhB,2DAXE,sBAmCF,OAJAnE,qBAAU,YA/BR,mCAgCEoH,KACD,CAACrU,IAEAhL,EAEI,kBAAC0W,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACoW,EAAA,EAAD,KACI,kBAACA,EAAA,EAAK2W,MAAN,KACI,kBAAChP,EAAA,EAAD,CAAOpO,QAAQ,UAAU5M,EAAExD,EAAMyD,YAGzC,yBAAKuM,UAAU,gBACX,kBAACgB,EAAA,EAAD,CACIZ,QAAQ,UACRS,QAAS,WACLjN,OAAOC,SAASC,QAAQF,OAAOC,SAAS4K,OAASjP,IAAUM,SAAW,IAAMkL,KAE/ExH,EAAE,WASnB,kBAACkT,EAAA,EAAD,CAAWjW,GAAG,YACV,yBAAKuP,UAAU,iCACX,kBAAC8B,EAAA,EAAD,CAASC,UAAU,cC7DtB6b,GAAkE,SAAC,GAE1E,EADFzR,MACG,IACH,EAA0B7G,qBAA1B,mBAAOtV,EAAP,KAAcoc,EAAd,KACMpR,EAAmB8Q,eAAe8B,QAAQhC,IAExCpY,EAAM8L,cAAN9L,EAEFY,EAASR,OAAOC,SAASO,OACzBM,EAAS,IAAIwY,gBAAgB9Y,GAPjC,4CASF,4BAAAc,EAAA,mEAGyD,IAA7CtB,OAAOC,SAASO,OAAOmC,QAAQ,SAH3C,gBAIkBmnB,EAAWhpB,EAAO6G,IAAI,SAC5B6Q,EAAS,IAAItZ,MAAM4qB,GAAsB,KALrD,4BAMmB9pB,OAAOC,SAASO,OAAOmC,QAAQ,SAAW,GAN7D,iCAOkBuE,IAAWvI,sBAAsB6B,EAAQR,OAAOC,SAAS4K,OAASjP,IAAUW,sBAAuB6K,GAPrH,OASYpH,OAAOC,SAASkC,KAAhB,UAA0BnC,OAAOC,SAAS4K,OAA1C,iBAAyDzD,EAAzD,kBATZ,0DAYQoR,EAAS,EAAD,IAZhB,2DATE,sBA6BF,OAJAnE,qBAAU,YAzBR,mCA0BEoH,KACD,CAACrU,IAEAhL,EAEI,kBAAC0W,EAAA,EAAD,CAAWjW,GAAG,YACV,kBAACoW,EAAA,EAAD,KACI,kBAACA,EAAA,EAAK2W,MAAN,KACI,kBAAChP,EAAA,EAAD,CAAOpO,QAAQ,UAAU5M,EAAExD,EAAMyD,YAGzC,yBAAKuM,UAAU,gBACX,kBAACgB,EAAA,EAAD,CACIZ,QAAQ,UACRS,QAAS,WACLjN,OAAOC,SAASC,QAAhB,UAA2BF,OAAOC,SAAS4K,OAA3C,iBAA0DzD,EAA1D,qBAEHxH,EAAE,WAQnB,kBAACkT,EAAA,EAAD,CAAWjW,GAAG,YACV,yBAAKuP,UAAU,iCACX,kBAAC8B,EAAA,EAAD,CAASC,UAAU,cHzC7B7N,GAAc2pB,EAAQ,IACxB3pB,GAAYC,MAAMP,OAAOC,SAASO,OAAOkC,eAAeT,QACxDiW,eAAeC,QACX,QADJ,WAEI7X,GACKC,MAAMP,OAAOC,SAASO,OAAOkC,eAC7BT,aAJT,cAEI,GAEYoP,YAEhB,OAAO,YAAP,QAAO,GACU/Q,GACRC,MAAMP,OAAOC,SAASO,OAAOkC,eAC7BT,aAHT,cACiB,GAEDoP,WAHhB,SAIEkP,OAAM,SAACxgB,GAAD,OAAOC,OAAOZ,QAAQC,KAAKU,OAIb,OAAtBrD,IAAUyG,QACV8mB,EAAQ,KACqB,OAAtBvtB,IAAUyG,SACjB8mB,EAAQ,KAGZ,IAAMC,GAAiBzY,IAAM0Y,MACzB,kBAAM,iC,8CAIV,8BAAA7oB,EAAA,sEACsB4F,IAAW0C,oBAHrBwgB,aAEZ,OACUrrB,EADV,OAGU6a,EAAkC,CACpCzC,MAAOpY,EACPsX,eAAW5L,GAEfiM,EAAWQ,WAAW0C,GAP1B,4C,sBAUA,IA2FeyQ,GA3FO,WAKlB,OAJA5Y,IAAM4C,WAAU,Y,oCACZqF,KACD,IAGC,kBAAC,IAAD,KACI,yBAAK7c,GAAG,MAAMuP,UAAW,MAAQxJ,eAC7B,kBAAC,WAAD,CAAU0nB,SAAU,sCAChB,kBAAC,EAAD,MACA,kBAAC5K,GAAD,KACI,kBAAC,IAAD,KAC+B,eAA1BhjB,IAAU2J,aACP,kBAAC,IAAD,CACIkkB,KAAM,IACNpN,OAAQ,SAAC9c,GAAD,OACJ,kBAAC,IAAMmqB,SAAP,CAAgBF,SAAU,+BACtB,kBAACJ,GAAmB7pB,KAG5BoqB,OAAK,IAGb,kBAAC,IAAD,CACIF,KAAM3uB,IAAUG,mBAChB2uB,UAAWpS,GACXmS,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUS,OAChBquB,UAAWvP,GACXsP,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUQ,MAChBsuB,UAAWrP,GACXoP,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUO,SAChBuuB,UAAWlP,GACXiP,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUC,WAChB6uB,UAAWR,GACXO,OAAK,IAEkB,eAA1B/tB,IAAU2J,aACP,kBAAC,IAAD,CACIkkB,KAAM3uB,IAAUM,SAChBwuB,UAAW9O,GACX6O,OAAK,IAGc,eAA1B/tB,IAAU2J,aACP,kBAAC,IAAD,CACIkkB,KAAM3uB,IAAUM,SAChBwuB,UAAWnP,GACXkP,OAAK,IAGb,kBAAC,IAAD,CACIF,KAAM3uB,IAAUI,KAChB0uB,UAAWrB,GACXoB,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUK,QAChByuB,UAAWf,GACXc,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUU,kBAChBouB,UAAWb,GACXY,OAAK,IAET,kBAAC,IAAD,CACIF,KAAM3uB,IAAUW,sBAChBmuB,UAAWV,GACXS,OAAK,MAIjB,kBAAC,GAAD,UIrIA1Z,QACW,cAA7B/Q,OAAOC,SAAS0qB,UAEe,UAA7B3qB,OAAOC,SAAS0qB,UAEhB3qB,OAAOC,SAAS0qB,SAASpS,MACvB,2D,6CCZN5M,KAGK5E,IAAI+e,MAGJ/e,IAAI6jB,MAEJ7jB,IAAI8jB,KAGJC,KAAK,CACFC,aAAc,MACdC,UAAWne,OAAOrH,KAAK9I,IAAUiQ,WACjCse,YAAab,KACb/D,OAAO+D,EACP5H,cAAe,CACXC,aAAa,GAEjByI,UAAW,CACPC,MAAO,CAAC,eAAgB,UAAW,YAAa,OAAQ,YAAa,cAAe,aAKjFxf,GAAf,ECrBAyf,IAASjO,OAAO,kBAAC,GAAD,MAASpb,SAAS8a,eAAe,SF+H3C,kBAAmB5b,WACrBA,UAAUoqB,cAAcC,MAAMvhB,MAAK,SAAAwhB,GACjCA,EAAaC,iB,+BGvHnB,IAAM9uB,EAAwB,CAC1BmY,4BAA6BuV,gDAG7BjnB,QAASinB,KAET/jB,YAAa+jB,OAEbpsB,iBAAkBosB,mDAElBztB,WAAYytB,wCAEZxmB,mBAAoBwmB,uCAEpBzd,UAQU,CACI8e,GAAI,gBACJC,GAAI,YAQPhvB,Q","file":"static/js/main.b2756f6b.chunk.js","sourcesContent":["import appConfig from '../app.config'\r\n\r\nexport const appRoutes = {\r\n diagnostic: '/diagnostic',\r\n login: '/login',\r\n loginWithRequestId: '/login/:requestId?',\r\n sign: '/sign/:id/:status?',\r\n paysera: '/paysera/:id',\r\n signRoot: '/sign',\r\n callback: '/callback',\r\n error: '/errorpage',\r\n logout: '/logout',\r\n eParakstsCallback: '/eparaksts/callback',\r\n eParakstsSignCallback: '/eparaksts/signcallback',\r\n}\r\n\r\nexport const apiRoutes = {\r\n adminPing: `${appConfig.apiBaseUrl}/api/admin/ping`,\r\n request: (id: string) => `${appConfig.apiBaseUrl}/api/sign/req/${id}`,\r\n requestAuthInfo: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/sign/req/${id}/authinfo`,\r\n requestSignedMethod: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/sign/signmethod/${id}`,\r\n idCardInitiate: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/idcard/${id}/initiate`,\r\n idCardComplete: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/idcard/${id}/complete`,\r\n signingStatus: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/sign/status/${id}`,\r\n originalPdf: (id: string) => `${appConfig.apiBaseUrl}/api/sign/orig/${id}`,\r\n signedPdf: (id: string) => `${appConfig.apiBaseUrl}/api/sign/signed/${id}`,\r\n payseraInitiate: (id: string, payment: string, mode = '0') =>\r\n `${appConfig.apiBaseUrl}/api/paysera/${id}/initiate/${payment}?mode=${mode}`,\r\n payseraComplete: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/paysera/${id}/complete`,\r\n payseraCallback: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/paysera/${id}/callback`,\r\n payseraStatus: (id: string) =>\r\n `${appConfig.apiBaseUrl}/api/paysera/${id}/status`,\r\n mobileIdSignInitiate: `${appConfig.apiBaseUrl}/api/mobileid/sign/initiate`,\r\n mobileIdSignComplete: `${appConfig.apiBaseUrl}/api/mobileid/sign/complete`,\r\n smartIdSignInitiate: `${appConfig.apiBaseUrl}/api/smartid/sign/initiate`,\r\n smartIdSignInitComplete: `${appConfig.apiBaseUrl}/api/smartid/sign/complete`,\r\n idCardAuth: (id: string) =>\r\n `${appConfig.authorityBaseUrl}/apiauth/idcard/${id || ''}`,\r\n mobileIdAuthInitiate: `${appConfig.authorityBaseUrl}/apiauth/mobileid/initiate`,\r\n mobileIdAuthComplete: `${appConfig.authorityBaseUrl}/apiauth/mobileid/complete`,\r\n smartIdAuthInitiate: `${appConfig.authorityBaseUrl}/apiauth/smartid/initiate`,\r\n smartIdAuthComplete: `${appConfig.authorityBaseUrl}/apiauth/smartid/complete`,\r\n eParakstsGetAuthLink: (id: string, returnUrl:string, locale:string, callbackUrl:string) =>\r\n `${appConfig.authorityBaseUrl}/apiauth/eparaksts/link?signingRequestId=${id}&locale=${locale}&callbackUrl=${callbackUrl}&returnUrl=${returnUrl}`,\r\n eParakstsAuthResult: `${appConfig.authorityBaseUrl}/apiauth/eparaksts/result`,\r\n eParakstsSignInitiate: `${appConfig.apiBaseUrl}/api/eparaksts/sign/initiate`,\r\n eParakstsSignComplete: `${appConfig.apiBaseUrl}/api/eparaksts/sign/complete`,\r\n redirectTo: `${appConfig.authorityBaseUrl}/account/redirectto`,\r\n certificateFunctionCode: `${appConfig.authorityBaseUrl}/api/certificatefunction/code`,\r\n googleTagManager: (key: string | undefined) =>\r\n `${appConfig.authorityBaseUrl}/api/gtm/${key}`,\r\n}\r\n","import { IPdf } from '../interfaces/i-pdf'\r\nimport axios, { AxiosError } from 'axios'\r\nimport queryString from 'query-string'\r\nimport { PDFDocumentProxy } from 'pdfjs-dist'\r\nimport i18next from 'i18next'\r\n\r\nexport function isPdf(pdf: IPdf) {\r\n return pdf && !(pdf instanceof Error)\r\n}\r\n\r\nexport function getErrorWithFullMessage(error: Error | AxiosError) {\r\n console.warn(error)\r\n\r\n if (typeof error !== 'object') {\r\n return error\r\n }\r\n\r\n if (axios.isAxiosError(error) && error.response && error.response.data) {\r\n return new Error(\r\n error.response.status < 500\r\n ? error.response.data\r\n : i18next.t('Network Error')\r\n )\r\n }\r\n\r\n return new Error(error.message)\r\n}\r\n\r\nexport function checkErrorStatus401(e: Error | AxiosError) {\r\n if ('isAxiosError' in e && e.response && e.response.status === 401) {\r\n window.location.replace(\r\n window.location.pathname.replace('sign', 'login')\r\n )\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n\r\nexport function getReturnUrl() {\r\n const props = queryString.parse(window.location.search) as {\r\n ReturnUrl: string\r\n }\r\n\r\n return props ? props.ReturnUrl : ''\r\n}\r\n\r\nexport function getAccessTokenParam() {\r\n const props = queryString.parse(window.location.search) as {\r\n access_token: string\r\n }\r\n\r\n console.info('url_access_token', props && props.access_token)\r\n return props ? props.access_token : ''\r\n}\r\n\r\nexport function getQueryParams(): {\r\n ReturnUrl: string\r\n SigningRequestId?: string\r\n [key: string]: any\r\n} {\r\n const { ReturnUrl } = queryString.parse(window.location.search) as {\r\n ReturnUrl: string\r\n }\r\n\r\n if (ReturnUrl) {\r\n const url = new URL(decodeURIComponent(ReturnUrl))\r\n const params: any = queryString.parse(url.search)\r\n\r\n return { ...params, ReturnUrl }\r\n }\r\n\r\n return { ReturnUrl }\r\n}\r\n\r\nexport function redirectToUrl(url: string, seconds: number) {\r\n return new Promise(() =>\r\n setTimeout(() => {\r\n window.location.replace(url)\r\n }, seconds)\r\n )\r\n}\r\n\r\nexport function isMobile() {\r\n // eslint-disable-next-line\r\n return (\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n navigator.userAgent\r\n ) ||\r\n // eslint-disable-next-line\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n navigator.userAgent.substr(0, 4)\r\n )\r\n )\r\n}\r\n\r\nexport async function downloadPdf(\r\n pdf: PDFDocumentProxy | Error | undefined,\r\n name: string\r\n) {\r\n if (!isPdf(pdf)) return\r\n\r\n let pdfDocProxy = pdf as PDFDocumentProxy\r\n\r\n const blob = new Blob([await pdfDocProxy.getData()])\r\n\r\n downloadBlob(blob, name)\r\n}\r\n\r\nexport function downloadBlob(blob: Blob, name: string) {\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(blob, name)\r\n return\r\n }\r\n\r\n const data = window.URL.createObjectURL(blob)\r\n const link = document.createElement('a')\r\n link.style.display = 'none'\r\n link.href = data\r\n link.download = name\r\n document.body.appendChild(link)\r\n link.click()\r\n}\r\n\r\nexport function downloadBase64Data(data: string, name: string) {\r\n const link = document.createElement('a')\r\n link.style.display = 'none'\r\n link.href = data\r\n link.download = name\r\n document.body.appendChild(link)\r\n link.click()\r\n}\r\n\r\nexport function checkIfSignRelatedPage() {\r\n const pathName = window.location.pathname.toLowerCase()\r\n\r\n return pathName.indexOf('sign') > -1 || pathName.indexOf('callback') > -1\r\n}\r\n\r\nexport function possiblyReturnSigningClass() {\r\n return checkIfSignRelatedPage() ? ' signing' : ''\r\n}\r\n\r\nexport async function waitForLanguage(): Promise {\r\n if (i18next.language) return Promise.resolve(i18next.language)\r\n\r\n await new Promise((resolve) => setTimeout(resolve, 100))\r\n return waitForLanguage()\r\n}\r\n\r\nexport function getPhoneForCountry(country: string) {\r\n if (country === 'ee') return '+372'\r\n if (country === 'lt') return '+370'\r\n\r\n return ''\r\n}\r\n// A test phone number for EE: 37200000766\r\n","import {\r\n ApplicationInsights,\r\n DistributedTracingModes,\r\n SeverityLevel,\r\n} from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\nimport { createBrowserHistory } from 'history';\r\nimport appConfig from './app.config';\r\n\r\nconst browserHistory = createBrowserHistory({ basename: '' });\r\nconst reactPlugin: any = new ReactPlugin();\r\nconst appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: appConfig.instrumentationKey,\r\n enableUnhandledPromiseRejectionTracking: true,\r\n enableCorsCorrelation: true,\r\n enableRequestHeaderTracking: true,\r\n enableResponseHeaderTracking: true,\r\n distributedTracingMode: DistributedTracingModes.W3C,\r\n disableFetchTracking: false,\r\n extensions: [reactPlugin],\r\n extensionConfig: {\r\n [reactPlugin.identifier]: { history: browserHistory },\r\n },\r\n },\r\n});\r\n\r\nappInsights.loadAppInsights();\r\nappInsights.trackPageView();\r\nappInsights.addTelemetryInitializer((envelope) => {\r\n if (envelope.data) {\r\n envelope.data.country = appConfig.country;\r\n }\r\n});\r\n\r\nconst logEvent = (name: string, properties: { [key: string]: any }) => {\r\n appInsights.trackEvent({\r\n name: name,\r\n properties: { properties },\r\n });\r\n};\r\nconst logError = (error: Error) => {\r\n appInsights.trackException({\r\n error: error,\r\n exception: error,\r\n severityLevel: SeverityLevel.Error,\r\n });\r\n};\r\n\r\nconst logCritical = (error: Error) => {\r\n appInsights.trackException({\r\n error: error,\r\n exception: error,\r\n severityLevel: SeverityLevel.Critical,\r\n });\r\n};\r\nexport { reactPlugin, appInsights, logError, logCritical, logEvent };\r\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 158;","import {\r\n AxiosError,\r\n AxiosInstance,\r\n AxiosRequestConfig,\r\n AxiosResponse,\r\n} from 'axios';\r\nimport appConfig from '../../../app.config';\r\nimport { logError, logEvent } from '../../../appInsights';\r\n\r\nconst onRequest = async (\r\n config: AxiosRequestConfig\r\n): Promise => {\r\n consoleLog(`[request] [${JSON.stringify(config)}]`);\r\n logEvent('UI-Signing-Request', { config: `${JSON.stringify(config)}` });\r\n return config;\r\n};\r\n\r\nconst onRequestError = (error: AxiosError): Promise => {\r\n console.error(`[request error] [${error.toJSON}]`);\r\n logError(error);\r\n return Promise.reject(error);\r\n};\r\n\r\nconst onResponse = (response: AxiosResponse): AxiosResponse => {\r\n consoleLog(`[response] [${JSON.stringify(response)}]`);\r\n logEvent('UI-Signing-Response', {\r\n url: response.config.url,\r\n status: response.status,\r\n data: response.data,\r\n });\r\n return response;\r\n};\r\n\r\nconst onResponseError = (error: AxiosError): Promise => {\r\n consoleLog(`[response error] [${JSON.stringify(error)}]`);\r\n logError(error);\r\n\r\n return Promise.reject(error);\r\n};\r\n\r\nconst logInConsole = appConfig.environment !== 'production';\r\nconst consoleLog = (message: string) => {\r\n if (logInConsole) console.log(message);\r\n};\r\n\r\nexport function setupInterceptors(instance: AxiosInstance): AxiosInstance {\r\n instance.interceptors.request.use(onRequest, onRequestError);\r\n instance.interceptors.response.use(onResponse, onResponseError);\r\n return instance;\r\n}\r\n","import {\r\n AxiosError,\r\n AxiosInstance,\r\n AxiosRequestConfig,\r\n AxiosResponse,\r\n} from 'axios';\r\nimport appConfig from '../../../app.config';\r\nimport { logError, logEvent } from '../../../appInsights';\r\nimport { waitForLanguage } from '../../helpers';\r\n\r\nconst onRequest = async (\r\n config: AxiosRequestConfig\r\n): Promise => {\r\n config.headers['Accept-Language'] = await waitForLanguage();\r\n consoleLog(config.headers);\r\n consoleLog(`[request] [${JSON.stringify(config)}]`);\r\n logEvent('UI-Auth-Request', { config: `${JSON.stringify(config)}` });\r\n return config;\r\n};\r\n\r\nconst onRequestError = (error: AxiosError): Promise => {\r\n consoleLog(`[request error] [${error.toJSON}]`);\r\n logError(error);\r\n return Promise.reject(error);\r\n};\r\n\r\nconst onResponse = (response: AxiosResponse): AxiosResponse => {\r\n consoleLog(`[response] [${JSON.stringify(response)}]`);\r\n logEvent('UI-Auth-Response', {\r\n url: response.config.url,\r\n status: response.status,\r\n data: response.data,\r\n });\r\n return response;\r\n};\r\n\r\nconst onResponseError = (error: AxiosError): Promise => {\r\n consoleLog(`[response error] [${JSON.stringify(error)}]`);\r\n logError(error);\r\n\r\n return Promise.reject(error);\r\n};\r\n\r\nconst logInConsole = appConfig.environment !== 'production';\r\nconst consoleLog = (message: string) => {\r\n if (logInConsole) console.log(message);\r\n};\r\n\r\nexport function setupInterceptors(instance: AxiosInstance): AxiosInstance {\r\n instance.interceptors.request.use(onRequest, onRequestError);\r\n instance.interceptors.response.use(onResponse, onResponseError);\r\n return instance;\r\n}\r\n","import Axios from 'axios';\r\nimport { apiRoutes } from '../constants/routes';\r\nimport { IMobileIdAuthResponse } from '../interfaces/i-mobileid';\r\nimport { IUserData } from '../interfaces/i-user-data';\r\nimport { IParakstsIdAuthResponse } from '../interfaces/i-paraksts-auth-response';\r\nimport {\r\n ISigningRequest,\r\n ISigningStatus,\r\n ISigningAuthInfo,\r\n} from '../interfaces/i-signing-request';\r\nimport { IPayseraCompleted } from '../interfaces/i-paysera';\r\nimport { checkErrorStatus401 } from '../utils/helpers';\r\nimport { SmartIdInitiateAuthDto } from '../interfaces/i-smart-id';\r\nimport { SignInitiateDto } from '../interfaces/i-sign-initiate';\r\nimport AuthMethodType from '../constants/signingMethods';\r\nimport { getHeadersWithJwtToken } from '../utils/auth-util';\r\nimport { appInsights } from '../appInsights';\r\nimport { setupInterceptors as signingInterceptors } from '../utils/Axios/Interceptors/signingInterceptors';\r\nimport { setupInterceptors as authenticationInterceptors } from '../utils/Axios/Interceptors/authInterceptors';\r\n\r\nconst transportWithCredentials = authenticationInterceptors(\r\n Axios.create({\r\n withCredentials: true,\r\n timeout: 1.5 * 60 * 1000,\r\n })\r\n);\r\n\r\nconst trackSigningTelemetryFor = signingInterceptors(Axios.create({}));\r\n\r\nconst httpClient = {\r\n async mobileIdAuthInitiate(\r\n phoneNumber: string,\r\n signingRequestId: string,\r\n personalNumber: string,\r\n returnUrl: string,\r\n country: string\r\n ) {\r\n const { data } = await transportWithCredentials.post(\r\n apiRoutes.mobileIdAuthInitiate,\r\n {\r\n phoneNumber,\r\n signingRequestId,\r\n returnUrl,\r\n personalNumber,\r\n country,\r\n }\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async mobileIdAuthComplete(userData: IUserData | undefined) {\r\n const { data } = await transportWithCredentials.post<{\r\n redirectUrl: string;\r\n secret: string;\r\n }>(\r\n apiRoutes.mobileIdAuthComplete,\r\n userData,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n if (!data) {\r\n throw new Error('error trying to authenticated with Mobile-ID');\r\n }\r\n\r\n return data;\r\n },\r\n\r\n async mobileIdSignInitiate(payload: {\r\n signingRequestId: string;\r\n phoneNumber: string;\r\n }) {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.mobileIdSignInitiate,\r\n payload,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async mobileIdSignComplete(payload: {\r\n verificationCode: string;\r\n signatureValue: string;\r\n signingRequestId: string;\r\n containerId: string;\r\n }) {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.mobileIdSignComplete,\r\n payload,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async getLastSigningRequestId() {\r\n const { data } = await trackSigningTelemetryFor.get(apiRoutes.adminPing);\r\n\r\n return Array.isArray(data.requests) ? (data.requests[0] as string) : '';\r\n },\r\n\r\n async getSigningRequestById(id: string) {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.request(id),\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n // async getCancelUrl(id: string) {\r\n\r\n // const { data } = await Axios.get(\r\n // apiRoutes.cancelUrl(id),\r\n // await getHeadersWithJwtToken()\r\n // );\r\n // return data;\r\n // },\r\n\r\n async idCardSignInitiate(id: string, certificateContent: string) {\r\n try {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.idCardInitiate(id),\r\n { certificateContent },\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n console.warn(JSON.stringify(data));\r\n\r\n return data;\r\n } catch (exception) {\r\n appInsights.trackException({ exception: exception as Error });\r\n if (!checkErrorStatus401(exception as Error)) {\r\n throw exception;\r\n }\r\n }\r\n },\r\n\r\n async idCardSignComplete(\r\n signingRequestId: string,\r\n signatureValue: string,\r\n containerId: string\r\n ): Promise<{ ok: boolean; url: string } | undefined> {\r\n try {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.idCardComplete(signingRequestId),\r\n { signatureValue, containerId, signingRequestId },\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n console.warn(JSON.stringify(data), 'idCardSignComplete');\r\n\r\n return data;\r\n } catch (exception) {\r\n appInsights.trackException({ exception: exception as Error });\r\n if (!checkErrorStatus401(exception as Error)) {\r\n throw exception;\r\n }\r\n }\r\n },\r\n\r\n async payseraComplete(id: string) {\r\n try {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.payseraComplete(id),\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n } catch (exception) {\r\n appInsights.trackException({ exception: exception as Error });\r\n if (!checkErrorStatus401(exception as Error)) {\r\n throw exception;\r\n }\r\n }\r\n },\r\n\r\n async payseraInitiate(id: string, bank: string, mode?: string) {\r\n try {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.payseraInitiate(id, bank, mode),\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n } catch (exception) {\r\n appInsights.trackException({ exception: exception as Error });\r\n if (!checkErrorStatus401(exception as Error)) {\r\n throw exception;\r\n }\r\n }\r\n },\r\n\r\n async payseraStatus(id: string) {\r\n try {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.payseraStatus(id)\r\n );\r\n\r\n return data;\r\n } catch (exception) {\r\n appInsights.trackException({ exception: exception as Error });\r\n }\r\n },\r\n\r\n async checkSigningRequestStatus(id: string) {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.signingStatus(id),\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async eParakstsAuthInit(authRequest: {\r\n signingRequestId: string;\r\n selectedLanguage: string;\r\n returnUrl: string;\r\n callbackUrl: string;\r\n }) {\r\n const { data } =\r\n await transportWithCredentials.get(\r\n apiRoutes.eParakstsGetAuthLink(authRequest.signingRequestId, authRequest.returnUrl, authRequest.selectedLanguage, authRequest.callbackUrl)\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async eParakstsResultGet(queryParams: string, callbackUrl: string) {\r\n\t\tconst data =\r\n\t\t\tawait transportWithCredentials.get(\r\n\t\t\t\tapiRoutes.eParakstsAuthResult +\r\n\t\t\t\t`${queryParams}&callbackUrl=${callbackUrl}`\r\n\t\t\t)\r\n\r\n\t\tif (data.status === 200) {\r\n\t\t\treturn data.data\r\n\t\t}\r\n\t\tthrow new Error('AuthenticationError')\r\n\t},\r\n\r\n async smartIdAuthInit(authRequest: {\r\n signingRequestId: string;\r\n countryCode: string;\r\n nationalIdentityNumber: string;\r\n returnUrl: string;\r\n }) {\r\n const { data } =\r\n await transportWithCredentials.post(\r\n apiRoutes.smartIdAuthInitiate,\r\n authRequest\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async smartIdAuthComplete(authRequest: SmartIdInitiateAuthDto) {\r\n const { data } = await transportWithCredentials.post<{\r\n redirectUrl: string;\r\n secret: string;\r\n }>(apiRoutes.smartIdAuthComplete, authRequest);\r\n\r\n return data;\r\n },\r\n\r\n async smartIdSignInitiate(payload: {\r\n country: string;\r\n signingRequestId: string;\r\n }) {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.smartIdSignInitiate,\r\n payload,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async smartIdSignComplete(payload: {\r\n verificationCode: string;\r\n signatureValue: string;\r\n signingRequestId: string;\r\n containerId: string;\r\n }) {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.smartIdSignInitComplete,\r\n payload,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async eParakstsSignInitiate(payload: {\r\n signingRequestId: string;\r\n locale: string;\r\n callbackUrl: string;\r\n }) {\r\n const { data } = await trackSigningTelemetryFor.post(\r\n apiRoutes.eParakstsSignInitiate,\r\n payload,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async eParakstsSignComplete(queryParams: string, callbackUrl: string, signingRequestId: string) {\r\n const { data } = await trackSigningTelemetryFor.get(\r\n apiRoutes.eParakstsSignComplete +\r\n `${queryParams}&callbackUrl=${callbackUrl}&id=${signingRequestId}`,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async getSignedDocument(signingRequestId: string) {\r\n const url = apiRoutes.signedPdf(signingRequestId);\r\n\r\n const { data } = await trackSigningTelemetryFor.get(url, {\r\n ...(await getHeadersWithJwtToken()),\r\n responseType: 'blob',\r\n });\r\n\r\n return data;\r\n },\r\n\r\n async getAuthInfo(signingRequestId: string) {\r\n const url = apiRoutes.requestAuthInfo(signingRequestId);\r\n\r\n const { data } = await Axios.get(\r\n url,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n async getSignedMethod(signingRequestId: string) {\r\n const url = apiRoutes.requestSignedMethod(signingRequestId);\r\n\r\n const { data } = await Axios.get(\r\n url,\r\n await getHeadersWithJwtToken()\r\n );\r\n\r\n return data;\r\n },\r\n\r\n redirectTo(url: string, secretValue: string) {\r\n const form = document.createElement('form');\r\n form.style.display = 'none';\r\n form.action = apiRoutes.redirectTo;\r\n form.method = 'POST';\r\n\r\n var secret = document.createElement('input');\r\n secret.name = 'secret';\r\n secret.value = secretValue;\r\n\r\n var redirectUrl = document.createElement('input');\r\n redirectUrl.name = 'redirectUrl';\r\n redirectUrl.value = url;\r\n\r\n var createSigningContainer = document.createElement('input');\r\n createSigningContainer.name = 'createSigningContainer';\r\n createSigningContainer.value = 'false';\r\n\r\n form.appendChild(secret);\r\n form.appendChild(redirectUrl);\r\n form.appendChild(createSigningContainer);\r\n\r\n document.body.appendChild(form);\r\n form.submit();\r\n },\r\n\r\n redirectToUrl(url: string) {\r\n const form = document.createElement('form');\r\n form.style.display = 'none';\r\n form.action = url;\r\n form.method = 'GET';\r\n\r\n // var redirectUrl = document.createElement(\"input\");\r\n // redirectUrl.name = \"redirectUrl\";\r\n // redirectUrl.value = url;\r\n\r\n // form.appendChild(secret);\r\n // form.appendChild(redirectUrl);\r\n\r\n document.body.appendChild(form);\r\n form.submit();\r\n },\r\n\r\n async getGoogleTagManager(key: string | undefined) {\r\n try {\r\n const url = apiRoutes.googleTagManager(key);\r\n\r\n const { data } = await Axios.get(url);\r\n return data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n },\r\n\r\n async getCertificateFunctionCode() {\r\n try {\r\n const url = apiRoutes.certificateFunctionCode;\r\n\r\n const { data } = await Axios.get(url);\r\n return data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n },\r\n};\r\n\r\nexport default httpClient;\r\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 290;","import { userManager } from '../services/auth.service'\r\nimport { waitForLanguage } from './helpers'\r\nimport { appInsights } from '../appInsights'\r\nimport { User } from 'oidc-client'\r\n\r\nlet tokenInfo: Partial = {}\r\n\r\nexport async function getHeadersWithJwtToken() {\r\n const {\r\n access_token,\r\n expires_at,\r\n profile,\r\n } = (await userManager.getUser()) || { access_token: '' }\r\n\r\n if (access_token && tokenInfo.access_token !== access_token) {\r\n tokenInfo = { expires_at, profile, access_token }\r\n\r\n appInsights.trackEvent({\r\n name: 'user got a token',\r\n properties: { expires_at, profile },\r\n })\r\n }\r\n\r\n return {\r\n headers: {\r\n Authorization: access_token && `Bearer ${access_token}`,\r\n 'Accept-Language': await waitForLanguage(),\r\n },\r\n }\r\n}\r\n","import { UserManager, UserManagerSettings } from 'oidc-client';\r\nimport appConfig from '../app.config';\r\nimport { appInsights } from '../appInsights';\r\n\r\nexport function getClientSettings(response_mode: string | undefined = undefined): UserManagerSettings {\r\n\r\n return {\r\n authority: appConfig.authorityBaseUrl,\r\n client_id: 'tf_bank_signing_spa',\r\n redirect_uri: `${window.location.origin}/callback`,\r\n response_type: \"code\",\r\n loadUserInfo: true,\r\n post_logout_redirect_uri: `${window.location.origin}/logout`,\r\n scope: \"openid tf_bank_signing_api\", // Space after openid is correct.\r\n response_mode\r\n };\r\n}\r\n\r\nexport function getUserManager() {\r\n\r\n return new UserManager(getClientSettings());\r\n}\r\n\r\nexport const userManager = getUserManager();\r\n\r\nuserManager.events.addUserLoaded((user) => {\r\n appInsights.setAuthenticatedUserContext(user.profile.sub, undefined, true)\r\n})","import React from \"react\";\r\nimport { Dropdown, ButtonGroup, Button, Navbar } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport appConfig, { LanguageType } from \"../app.config\";\r\nimport { userManager } from \"../services/auth.service\";\r\nimport { checkIfSignRelatedPage } from \"../utils/helpers\";\r\n\r\nfunction Header() {\r\n\r\n // const [language, setlanguage] = React.useState(\"English\");\r\n const { t, i18n } = useTranslation();\r\n\r\n function onLanguageSelect(e: React.MouseEvent) {\r\n e.preventDefault();\r\n }\r\n\r\n function changeLanguage(lng: string) {\r\n i18n.changeLanguage(lng);\r\n }\r\n\r\n async function logout() {\r\n\r\n await userManager.clearStaleState();\r\n userManager.signoutRedirect()\r\n }\r\n\r\n function LanguagePicker() {\r\n return (\r\n
\r\n \r\n \r\n {/* {appConfig.languages[i18n.language as LanguageType]} */}\r\n \r\n {appConfig.languages[i18n.language\r\n \r\n \r\n \r\n {Object.keys(appConfig.languages).map((key) =>\r\n \r\n
{appConfig.languages[key as LanguageType]}
\r\n
{appConfig.languages[key
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n //console.warn(Object.keys(appConfig.languages), \"langs\")\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Header\r\n","import { isMobile } from '../utils/helpers'\r\n\r\nenum AuthMethodType {\r\n Paysera = 0,\r\n Veriff = 1,\r\n MobileId = 2,\r\n CardId = 3,\r\n SmartIdAdv = 4,\r\n SmartIdBasic = 5,\r\n eParaksts = 15,\r\n}\r\n\r\nexport default AuthMethodType\r\n\r\nexport const signingMethods: ISigningButton[] = [\r\n {\r\n title: 'Smart-ID',\r\n type: AuthMethodType.SmartIdAdv,\r\n showInMobile: true,\r\n className: 'EeSmartId',\r\n },\r\n {\r\n title: 'Smart-ID Basic',\r\n type: AuthMethodType.SmartIdBasic,\r\n showInMobile: true,\r\n className: 'EeSmartId',\r\n },\r\n {\r\n title: 'Mobile-ID',\r\n type: AuthMethodType.MobileId,\r\n showInMobile: true,\r\n className: 'EeMobileId',\r\n },\r\n { \r\n title: 'Paysera',\r\n type: AuthMethodType.Paysera,\r\n showInMobile: true,\r\n className: 'PayseraId',\r\n },\r\n {\r\n title: 'Veriff',\r\n type: AuthMethodType.Veriff,\r\n showInMobile: true,\r\n className: 'Veriff',\r\n },\r\n {\r\n title: 'ID-Card',\r\n type: AuthMethodType.CardId,\r\n showInMobile: !isMobile(),\r\n className: 'EeIdCard',\r\n },\r\n {\r\n title: '',\r\n type: AuthMethodType.eParaksts,\r\n showInMobile: true,\r\n className: 'eParaksts',\r\n }\r\n]\r\n\r\nexport const authMethods: ISigningButton[] = [ \r\n {\r\n title: 'Smart-ID',\r\n type: AuthMethodType.SmartIdAdv,\r\n showInMobile: true,\r\n className: 'EeSmartId',\r\n },\r\n {\r\n title: 'Mobile-ID',\r\n type: AuthMethodType.MobileId,\r\n showInMobile: true,\r\n className: 'EeMobileId',\r\n }, \r\n {\r\n title: 'Paysera',\r\n type: AuthMethodType.Paysera,\r\n showInMobile: true,\r\n className: 'PayseraId',\r\n },\r\n {\r\n title: 'ID-Card',\r\n type: AuthMethodType.CardId,\r\n showInMobile: !isMobile(),\r\n className: 'EeIdCard',\r\n },\r\n {\r\n title: '',\r\n type: AuthMethodType.eParaksts,\r\n showInMobile: true,\r\n className: 'eParaksts',\r\n },\r\n]\r\n\r\nexport interface ISigningButton {\r\n title: string\r\n type: AuthMethodType\r\n showInMobile: boolean\r\n\r\n className: string\r\n}\r\n","import React from \"react\";\r\nimport { Spinner } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport function DefaultSpinner() {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n {t(\"Loading\")}\r\n
\r\n );\r\n}\r\n","import { parsePhoneNumberFromString, PhoneNumber, CountryCode } from \"libphonenumber-js\";\r\n\r\nexport const validatePhoneNumber = (value: string, countryCode: CountryCode) => {\r\n\r\n let phone: PhoneNumber | undefined;\r\n let isValid = true;\r\n\r\n if (countryCode) {\r\n\r\n phone = parsePhoneNumberFromString(value, countryCode);\r\n isValid = phone\r\n ? phone.isPossible() && phone.country?.toLowerCase() === countryCode\r\n : false;\r\n\r\n if (isValid) return isValid;\r\n }\r\n\r\n phone = phone ?? parsePhoneNumberFromString(value);\r\n isValid = phone\r\n ? phone.isPossible() && phone.country?.toLowerCase() === countryCode\r\n : false;\r\n\r\n return isValid;\r\n}","/**\r\n* Get the birthday of a person.\r\n* @param {string} code\r\n* @returns {Date}\r\n*/\r\nconst getBirthday = function (code: string): Date {\r\n var year = parseInt(code.substring(1, 3)),\r\n month = parseInt(code.substring(3, 5).replace(/^0/, '')) - 1,\r\n day = Number(code.substring(5, 7).replace(/^0/, '')),\r\n firstNumber = code.charAt(0);\r\n\r\n if (firstNumber === '1' || firstNumber === '2') {\r\n year += 1800;\r\n } else if (firstNumber === '3' || firstNumber === '4') {\r\n year += 1900;\r\n } else if (firstNumber === '5' || firstNumber === '6') {\r\n year += 2000;\r\n } else {\r\n year += 2100;\r\n }\r\n\r\n return new Date(year, month, day);\r\n};\r\n\r\n/**\r\n * Gets the control number of personal ID.\r\n * @param {string} code\r\n * @returns {number}\r\n */\r\nconst getControlNumber = function (code: string) {\r\n var multiplier1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1],\r\n multiplier2 = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3],\r\n mod,\r\n total = 0;\r\n\r\n for (var i = 0; i < 10; i++) {\r\n total += Number(code.charAt(i)) * multiplier1[i];\r\n }\r\n mod = total % 11;\r\n\r\n total = 0;\r\n if (10 === mod) {\r\n for (i = 0; i < 10; i++) {\r\n total += Number(code.charAt(i)) * multiplier2[i];\r\n }\r\n mod = total % 11;\r\n if (10 === mod) {\r\n mod = 0;\r\n }\r\n }\r\n return mod;\r\n};\r\n\r\n/**\r\n * Validates the Estonian personal ID.\r\n * @param {string} code\r\n * @returns {boolean}\r\n */\r\nexport function validateEstoniaSsn (code: string) {\r\n if (code.length !== 11) {\r\n return false;\r\n }\r\n var control = getControlNumber(code);\r\n if (control !== parseInt(code.charAt(10))) {\r\n return false;\r\n }\r\n\r\n var year = Number(code.substr(1, 2));\r\n var month = Number(code.substr(3, 2));\r\n var day = Number(code.substr(5, 2));\r\n var birthDate = getBirthday(code);\r\n return year === birthDate.getFullYear() % 100 && birthDate.getMonth() + 1 === month && day === birthDate.getDate();\r\n};\r\n\r\n/**\r\n * Gets the gender of a person\r\n * @param {string} code\r\n * @returns {string}\r\n */\r\nexport const getGender = function (code: string) {\r\n var firstNumber = code.charAt(0),\r\n retval = '';\r\n switch (firstNumber) {\r\n case '1':\r\n case '3':\r\n case '5':\r\n retval = 'male';\r\n break;\r\n case '2':\r\n case '4':\r\n case '6':\r\n retval = 'female';\r\n break;\r\n default:\r\n retval = 'unknown';\r\n }\r\n return retval;\r\n};\r\n\r\n/**\r\n * Get the age of a person in years.\r\n * @param {string} params\r\n * @returns {number}\r\n */\r\nexport const getAge = function (code: string) {\r\n return Math.floor((new Date().getTime() - getBirthday(code).getTime()) / (86400 * 1000) / 365.25);\r\n};\r\n\r\n/**\r\n * Validates the Estonian personal ID.\r\n * In params argument months are beginning from 1. 1 - January, 2 - February etc.\r\n * @access public\r\n * @param {object} params\r\n * @returns {string}\r\n */\r\nexport const generate = function (params: any) {\r\n\r\n params = params || {};\r\n\r\n var y, m, d,\r\n gender = params.gender || ((Math.round(Math.random()) === 0) ? 'male' : 'female'),\r\n personalId = '',\r\n\r\n // Places of brith (Estonian Hospitals)\r\n hospitals = [\r\n '00', // Kuressaare Haigla (järjekorranumbrid 001 kuni 020)\r\n '01', // Tartu Ülikooli Naistekliinik, Tartumaa, Tartu (011...019)\r\n '02', // Ida-Tallinna Keskhaigla, Hiiumaa, Keila, Rapla haigla (021...220)\r\n '22', // Ida-Viru Keskhaigla (Kohtla-Järve, endine Jõhvi) (221...270)\r\n '27', // Maarjamõisa Kliinikum (Tartu), Jõgeva Haigla (271...370)\r\n '37', // Narva Haigla (371...420)\r\n '42', // Pärnu Haigla (421...470)\r\n '47', // Pelgulinna Sünnitusmaja (Tallinn), Haapsalu haigla (471...490)\r\n '49', // Järvamaa Haigla (Paide) (491...520)\r\n '52', // Rakvere, Tapa haigla (521...570)\r\n '57', // Valga Haigla (571...600)\r\n '60', // Viljandi Haigla (601...650)\r\n '65', // Lõuna-Eesti Haigla (Võru), Pälva Haigla (651...710?)\r\n '70', // All other hospitals\r\n '95' // Foreigners who are born in Estonia\r\n ];\r\n\r\n if (!(gender === 'female' || gender === 'male')) {\r\n throw IsikukoodException('gender param accepts only \"male\" or \"female\" values.');\r\n }\r\n\r\n if (params.birthYear) {\r\n y = params.birthYear;\r\n } else {\r\n y = Math.round(Math.random() * 100 + 1900 + (new Date().getFullYear() - 2000));\r\n }\r\n\r\n if (params.birthMonth) {\r\n m = params.birthMonth;\r\n } else {\r\n m = Math.floor(Math.random() * 12) + 1;\r\n }\r\n\r\n if (params.birthDay) {\r\n d = params.birthDay;\r\n } else {\r\n var daysInMonth = new Date(y, m, 0).getDate();\r\n d = Math.floor(Math.random() * daysInMonth) + 1;\r\n }\r\n\r\n // Set the gender\r\n if (gender === 'male' && y >= 1800 && y <= 1899) {\r\n personalId += '1';\r\n } else if (gender === 'female' && y >= 1800 && y <= 1899) {\r\n personalId += '2';\r\n } else if (gender === 'male' && y >= 1900 && y <= 1999) {\r\n personalId += '3';\r\n } else if (gender === 'female' && y >= 1900 && y <= 1999) {\r\n personalId += '4';\r\n } else if (gender === 'male' && y >= 2000) {\r\n personalId += '5';\r\n } else if (gender === 'female' && y >= 2000) {\r\n personalId += '6';\r\n }\r\n\r\n // Set the year\r\n personalId += parseInt(y, 0).toString().substring(2, 4);\r\n\r\n // Set the month\r\n personalId += m.toString().length === 1 ? '0' + m : m;\r\n\r\n // Set the day\r\n personalId += d.toString().length === 1 ? '0' + d : d;\r\n\r\n // Set the hospital\r\n personalId += hospitals[Math.floor(Math.random() * hospitals.length)];\r\n\r\n // Set the number of birth\r\n personalId += Math.floor(Math.random() * 10);\r\n\r\n // Set the control number\r\n personalId += getControlNumber(personalId);\r\n\r\n return personalId;\r\n};\r\n\r\n/**\r\n * Isikukood exception.\r\n */\r\nfunction IsikukoodException(err: string) {\r\n throw new Error(err);\r\n}\r\n","\r\nimport { validateEstoniaSsn } from \"./estonia/esonian-ssn\";\r\nimport { validateLithuaniaSsn } from \"./lithuania/lithuania-ssn\";\r\nimport { validateLatvianSsn } from \"./latvia/latvia-ssn\";\r\nimport appConfig from \"../../app.config\";\r\n\r\nexport function validateSsn(value: string) {\r\n\r\n let isValid = true;\r\n switch (appConfig.country) {\r\n case \"ee\":\r\n\r\n isValid = validateEstoniaSsn(value);\r\n return isValid;\r\n\r\n case \"lt\":\r\n\r\n const object = validateLithuaniaSsn(value);\r\n isValid = typeof object === \"object\"\r\n ? object.isValid\r\n : Boolean(object);\r\n return isValid;\r\n\r\n case \"lv\":\r\n\r\n isValid = validateLatvianSsn(value);\r\n return isValid;\r\n\r\n default:\r\n return isValid;\r\n }\r\n}","// 46411231034 example\r\n\r\nexport function validateLithuaniaSsn(idNumber: string) {\r\n\r\n if (!idNumber) {\r\n return false;\r\n }\r\n\r\n idNumber = idNumber.trim();\r\n if (idNumber.length !== 11) {\r\n return false;\r\n }\r\n\r\n let century;\r\n let gender = idNumber[0];\r\n\r\n switch (gender) {\r\n case \"1\":\r\n gender = \"Male\";\r\n century = 18;\r\n break;\r\n case \"2\":\r\n gender = \"Female\";\r\n century = 18;\r\n break;\r\n case \"3\":\r\n gender = \"Male\";\r\n century = 19;\r\n break;\r\n case \"4\":\r\n gender = \"Female\";\r\n century = 19;\r\n break;\r\n case \"5\":\r\n gender = \"Male\";\r\n century = 20;\r\n break;\r\n case \"6\":\r\n gender = \"Female\";\r\n century = 20;\r\n break;\r\n default:\r\n return false;\r\n }\r\n\r\n const dateOfBirth = new Date(Number(century + idNumber.substr(1, 2)), Number(idNumber.substr(3, 2)) - 1, Number(idNumber.substr(5, 2)));\r\n\r\n let b = 1;\r\n let c = 3;\r\n let d = 0;\r\n let e = 0;\r\n\r\n for (let i = 0; i < 10; i++) {\r\n let digit = parseInt(idNumber[i]);\r\n d += digit * b;\r\n e += digit * c;\r\n b++; if (b === 10) b = 1;\r\n c++; if (c === 10) c = 1;\r\n }\r\n\r\n d = d % 11;\r\n e = e % 11;\r\n\r\n let checksum;\r\n if (d < 10) {\r\n\r\n checksum = d;\r\n\r\n } else if (e < 10) {\r\n\r\n checksum = e;\r\n\r\n } else {\r\n\r\n checksum = 0;\r\n }\r\n\r\n const isValid = idNumber[10] === String(checksum);\r\n\r\n if (!isValid) {\r\n return false;\r\n }\r\n\r\n return {\r\n gender,\r\n dateOfBirth,\r\n isValid\r\n }\r\n}","export function validateLatvianSsn(idNumber: string) {\r\n if (!idNumber) {\r\n return false;\r\n }\r\n\r\n if (idNumber.length < 7) {\r\n return false;\r\n }\r\n\r\n if (idNumber[6] === '-') {\r\n idNumber = idNumber.substr(0, 6).concat(idNumber.substr(7));\r\n }\r\n\r\n if (idNumber.length !== 11) {\r\n return false;\r\n }\r\n\r\n const centuryDigit = parseInt(idNumber.substr(6, 1));\r\n\r\n if (isNaN(centuryDigit)) return false;\r\n \r\n var birthDateString = \"\";\r\n switch (centuryDigit) {\r\n case 0:\r\n birthDateString += \"18\";\r\n break;\r\n case 1:\r\n birthDateString += \"19\";\r\n break;\r\n case 2:\r\n birthDateString += \"20\";\r\n break;\r\n }\r\n \r\n birthDateString += idNumber.substr(4, 2);\r\n\r\n birthDateString += \"-\";\r\n\r\n birthDateString += idNumber.substr(2, 2);\r\n\r\n birthDateString += \"-\";\r\n\r\n birthDateString += idNumber.substr(0, 2);\r\n\r\n const dateOfBirth = Date.parse(birthDateString);\r\n\r\n if (isNaN(dateOfBirth)) return false;\r\n\r\n var weights = [ 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];\r\n var checksum = 1101;\r\n let digit;\r\n for (var i = 0; i < weights.length; i++) {\r\n \r\n digit = parseInt(idNumber[i].toString());\r\n\r\n if (isNaN(digit)) return false;\r\n checksum -= digit*weights[i];\r\n }\r\n digit = parseInt(idNumber[10].toString());\r\n\r\n if (isNaN(digit)) return false;\r\n\r\n const isValid = digit === checksum%11;\r\n\r\n return isValid;\r\n}","import React, { FormEvent } from 'react'\r\nimport {\r\n Container,\r\n Col,\r\n Button,\r\n FormControl,\r\n Row,\r\n Card,\r\n Form,\r\n} from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport { IMobileIdAuthResponse } from '../../interfaces/i-mobileid'\r\nimport { useTranslation } from 'react-i18next'\r\nimport httpClient from '../../services/httpClient'\r\nimport { getQueryParams, getPhoneForCountry } from '../../utils/helpers'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport appConfig from '../../app.config'\r\nimport { validatePhoneNumber, validateSsn } from '../../utils/validation.helper'\r\nimport { CountryCode } from 'libphonenumber-js'\r\nimport { appInsights } from '../../appInsights'\r\n\r\ninterface IMobileIdAuthProps {\r\n id: string\r\n onError(error: Error | undefined): void\r\n onSuccess(str: string): void\r\n}\r\n\r\nfunction MobileIdAuthBlock({ id, onError }: IMobileIdAuthProps) {\r\n const { t } = useTranslation()\r\n const [mobileNumber, setMobileNumber] = React.useState(\r\n getPhoneForCountry(appConfig.country)\r\n )\r\n const [mobileNumberIsValid, setMobileNumberIsValid] = React.useState(true)\r\n const [personalNumber, setPersonalNumber] = React.useState('')\r\n const [personalNumberIsValid, setPersonalNumberIsValid] =\r\n React.useState(true)\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const [mobileIdAuthData, setMobileIdAuthData] =\r\n React.useState()\r\n const urlParams = React.useMemo(() => {\r\n let { ReturnUrl, SigningRequestId } = getQueryParams()\r\n return { ReturnUrl, SigningRequestId }\r\n }, [])\r\n\r\n function onMobileNumberChange(e: React.FormEvent) {\r\n setMobileNumber(e.currentTarget.value as string)\r\n }\r\n\r\n function onPersonalNumberChange(e: FormEvent) {\r\n setPersonalNumber(e.currentTarget.value as string)\r\n }\r\n\r\n function validatePersonalNumber() {\r\n const isValid = validateSsn(personalNumber)\r\n setPersonalNumberIsValid(isValid)\r\n return isValid\r\n }\r\n\r\n function validateMobileNumber() {\r\n const isValid = validatePhoneNumber(\r\n mobileNumber,\r\n appConfig.country as CountryCode\r\n )\r\n setMobileNumberIsValid(isValid)\r\n\r\n return isValid\r\n }\r\n\r\n function validateAll() {\r\n const isValidSSN = validatePersonalNumber()\r\n const isValidMobileNumber = validateMobileNumber()\r\n return isValidSSN && isValidMobileNumber\r\n }\r\n\r\n async function mobileIdInitiate() {\r\n onError(undefined)\r\n\r\n try {\r\n const { ReturnUrl, SigningRequestId } = urlParams\r\n const isValid = SigningRequestId\r\n ? validateMobileNumber()\r\n : validateAll()\r\n\r\n if (!isValid) {\r\n return\r\n }\r\n\r\n setIsWaiting(true)\r\n\r\n const data = await httpClient.mobileIdAuthInitiate(\r\n mobileNumber,\r\n id || SigningRequestId || '',\r\n personalNumber,\r\n ReturnUrl,\r\n appConfig.country\r\n )\r\n setMobileIdAuthData(data)\r\n setIsWaiting(false)\r\n\r\n const { redirectUrl, secret } =\r\n await httpClient.mobileIdAuthComplete(data && data.userData)\r\n httpClient.redirectTo(\r\n redirectUrl || window.location.origin + appRoutes.signRoot,\r\n secret\r\n )\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n onError(exception)\r\n }\r\n\r\n setIsWaiting(false)\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (mobileIdAuthData && mobileIdAuthData.userData) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\r\n 'Make sure that the verification code sent to your mobile matches and enter PIN1'\r\n )}\r\n \r\n {/* {t(\"matches the code on the screen, and then enter Mobile-ID Pin1\")} */}\r\n

{mobileIdAuthData.challengeId}

\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {t(\r\n 'Please enter your phone number that is connected to Mobile-ID'\r\n )}{' '}\r\n \r\n {t('Then press proceed button to login')} \r\n {t('Make sure you have your cellphone nearby')}\r\n \r\n\r\n {!urlParams.SigningRequestId && (\r\n \r\n \r\n \r\n {t('please enter the correct personal number')}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n {t('please enter the correct phone number')}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default MobileIdAuthBlock\r\n","import React from 'react'\r\nimport { Col, Button, Container } from 'react-bootstrap'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { getQueryParams } from '../../utils/helpers'\r\nimport appConfig from '../../app.config'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport httpClient from '../../services/httpClient'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nconst checkLang = (language: string) => {\r\n if (language === 'ee') {\r\n return 'et'\r\n }\r\n if (language === 'ru') {\r\n return 'ru'\r\n }\r\n if (language !== 'ee' && language !== 'ru') {\r\n return 'en'\r\n }\r\n}\r\n\r\ninterface ICardIdAuthProps {\r\n id: string\r\n onError(error: Error | undefined): void\r\n onSuccess(str: string): void\r\n}\r\n\r\nfunction IdCardContentBlock({ id, onError }: ICardIdAuthProps) {\r\n const { t } = useTranslation()\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const urlParams = React.useMemo(() => {\r\n let { ReturnUrl, SigningRequestId } = getQueryParams()\r\n return { ReturnUrl, SigningRequestId }\r\n }, [])\r\n\r\n async function tryIdCardAuth() {\r\n onError(undefined)\r\n setIsWaiting(true)\r\n\r\n try {\r\n let { ReturnUrl, SigningRequestId } = getQueryParams()\r\n\r\n const action = encodeURIComponent(\r\n `${appConfig.authorityBaseUrl}/apiauth/idcard/${\r\n SigningRequestId || ''\r\n }`\r\n )\r\n\r\n const returnUrl = encodeURIComponent(\r\n ReturnUrl ||\r\n `${window.location.protocol}//${\r\n window.location.host\r\n }/sign/${id ? id : ''}`\r\n )\r\n const initialUrl = encodeURIComponent(window.location.href)\r\n\r\n const code = await httpClient.getCertificateFunctionCode()\r\n window.location.replace(\r\n `${appConfig.certificateRequesterBaseUrl}/api/CertificateFunction?code=${code}&returnUrl=${returnUrl}&action=${action}&initialUrl=${initialUrl}`\r\n )\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n onError(exception)\r\n }\r\n setIsWaiting(false)\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport function IdCardHelpText() {\r\n const { t, i18n } = useTranslation()\r\n const [lang, setLang] = React.useState()\r\n const line1 = t(\r\n 'Before using your ID-Card, please make sure that your ID-Card is inserted into your card reader'\r\n )\r\n const line2 = t('If the login fails please check the possible solutions')\r\n const line3 = t('at id_ee help centre')\r\n\r\n React.useEffect(() => {\r\n setLang(checkLang(i18n.language))\r\n }, [i18n.language])\r\n\r\n return (\r\n \r\n

{line1}

\r\n

\r\n {line2}{' '}\r\n \r\n {line3}\r\n \r\n

\r\n \r\n )\r\n}\r\n\r\nexport default IdCardContentBlock\r\n","import React from 'react'\r\nimport {\r\n Container,\r\n Row,\r\n Button,\r\n FormControl,\r\n Col,\r\n Card,\r\n Form,\r\n} from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport appConfig from '../../app.config'\r\nimport httpClient from '../../services/httpClient'\r\nimport { getReturnUrl } from '../../utils/helpers'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { getQueryParams } from '../../utils/helpers'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { SmartIdInitiateAuthDto } from '../../interfaces/i-smart-id'\r\nimport { validateSsn } from '../../utils/validation.helper'\r\nimport { appInsights } from '../../appInsights'\r\n\r\ninterface SmartIdLoginBlockProps {\r\n id: string\r\n onSuccess(str: string): void\r\n onError(error: Error | undefined): void\r\n}\r\n\r\nfunction SmartIdAdvLoginBlock({ id, onError }: SmartIdLoginBlockProps) {\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const [smartIdData, setSmartIdData] =\r\n React.useState()\r\n const [nationalIdentityNumber, setNationalIdentityNumber] =\r\n React.useState('')\r\n const [nationalIdentityNumberIsValid, setNationalIdentityNumberIsValid] =\r\n React.useState(true)\r\n const { t } = useTranslation()\r\n const getCancelUrl = () => window.location.reload;\r\n \r\n async function doSmartIdAuth() {\r\n onError(undefined)\r\n\r\n const isValid = validateNationalIdentityNumber()\r\n\r\n if (!isValid) {\r\n return\r\n }\r\n\r\n setIsWaiting(true)\r\n\r\n try {\r\n const { SigningRequestId } = getQueryParams()\r\n const signingRequestId = id || SigningRequestId || ''\r\n const countryCode = appConfig.country\r\n const data = await httpClient.smartIdAuthInit({\r\n signingRequestId,\r\n countryCode,\r\n nationalIdentityNumber,\r\n returnUrl: getReturnUrl(),\r\n })\r\n\r\n setSmartIdData(data)\r\n setIsWaiting(false)\r\n\r\n const { redirectUrl, secret } =\r\n await httpClient.smartIdAuthComplete(data)\r\n\r\n httpClient.redirectTo(\r\n redirectUrl || window.location.origin + appRoutes.signRoot,\r\n secret\r\n )\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n onError(exception)\r\n setIsWaiting(false)\r\n }\r\n }\r\n\r\n function onNationalIdentityNumberChange(e: React.FormEvent) { \r\n setNationalIdentityNumber(e.currentTarget.value || '')\r\n }\r\n\r\n function validateNationalIdentityNumber() {\r\n const isValid = validateSsn(nationalIdentityNumber)\r\n setNationalIdentityNumberIsValid(isValid)\r\n return isValid\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (smartIdData) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n

{t('Verification code')}

\r\n

{smartIdData.code}

\r\n \r\n\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {t(\r\n 'Notification sent to your smart device. Verify the code in the Smart-ID app and enter PIN1'\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n function CancelButton() {\r\n if (document.referrer) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n

{t('Please provide Smart-ID document number')}

\r\n \r\n\r\n \r\n \r\n \r\n \r\n {t('please enter the correct personal number')}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SmartIdAdvLoginBlock\r\n\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction SmartIdBasicContent() {\r\n\r\n const { t } = useTranslation();\r\n\r\n const line1 = t(\"Smart-ID Basic\");\r\n const line2 = t(\"Line 2\");\r\n\r\n return (\r\n
\r\n

{line1}

\r\n

{line2}

\r\n
\r\n )\r\n\r\n}\r\n\r\nexport default SmartIdBasicContent\r\n","import React from 'react'\r\nimport { Button } from 'react-bootstrap'\r\nimport AuthMethodType, { authMethods } from '../../constants/signingMethods'\r\nimport { useTranslation } from 'react-i18next'\r\n\r\ninterface IAuthButtonProps {\r\n methods: AuthMethodType[] | undefined\r\n onClick: any\r\n\r\n active: AuthMethodType | undefined\r\n}\r\n\r\nfunction AuthButtons({ methods, onClick, active }: IAuthButtonProps) {\r\n const { t } = useTranslation()\r\n\r\n const authButtons = !methods\r\n ? []\r\n : authMethods.filter((method) => methods.indexOf(method.type) > -1)\r\n\r\n function isChosen(methodId: number) {\r\n return String(active) === String(methodId) ? ' chosen' : ''\r\n }\r\n\r\n return (\r\n <>\r\n {authButtons.map(\r\n (b) =>\r\n b.showInMobile && (\r\n onClick(b.type)}\r\n >\r\n {t(b.title)}\r\n
\r\n )\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default AuthButtons\r\n","export enum GtmEvents {\r\n 'AuthenticationSuccess' = 'Authentication success',\r\n 'AuthenticationFailed' = 'Authentication failed',\r\n 'SigningSuccess' = 'Signing success',\r\n 'SigningFailed' = 'Signing failed',\r\n 'ConsentSuccess' = 'Consent success',\r\n 'ConsentFailed' = 'Consent failed'\r\n};","import { IDataLayer } from \"../interfaces/i-data-layer\"\r\n\r\ninterface ISnippets {\r\n id: string;\r\n dataLayer: IDataLayer | undefined;\r\n}\r\n\r\nconst Snippets = {\r\n tags: function ({ id, dataLayer }: ISnippets) {\r\n\r\n if (!id) console.warn('GTM Id is undefined')\r\n\r\n //body\r\n const iframe = `\r\n `\r\n\r\n //head\r\n const script = `\r\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\r\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\r\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\r\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\r\n})(window,document,'script','dataLayer','${id}');`\r\n\r\n const dataLayerVar = this.dataLayer(dataLayer)\r\n\r\n return {\r\n iframe,\r\n script,\r\n dataLayerVar\r\n }\r\n },\r\n dataLayer: function (dataLayer: IDataLayer | undefined) {\r\n return `\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(${JSON.stringify(dataLayer)})`\r\n }\r\n}\r\n\r\nexport default Snippets;","import Snippets from './Snippets';\r\nimport { ITagManagerArgs } from '../interfaces/i-tag-manager-args';\r\n\r\nconst TagManager = {\r\n dataScript: function (dataLayer: any) {\r\n const script = document.createElement('script');\r\n script.innerHTML = dataLayer;\r\n return script;\r\n },\r\n gtm: function (args: any) {\r\n const snippets = Snippets.tags(args);\r\n\r\n const noScript = () => {\r\n const noscript = document.createElement('noscript')\r\n noscript.innerHTML = snippets.iframe\r\n return noscript\r\n }\r\n\r\n const script = () => {\r\n const script = document.createElement('script')\r\n script.innerHTML = snippets.script\r\n return script\r\n }\r\n\r\n const dataScript = this.dataScript(snippets.dataLayerVar)\r\n\r\n return {\r\n noScript,\r\n script,\r\n dataScript\r\n }\r\n },\r\n\r\n initialize: function ({ gtmId, dataLayer }: ITagManagerArgs) {\r\n const gtm = this.gtm({\r\n id: gtmId,\r\n dataLayer: dataLayer || undefined\r\n })\r\n if (dataLayer) document.head.appendChild(gtm.dataScript);\r\n document.head.insertBefore(gtm.script(), document.head.childNodes[0]);\r\n document.body.insertBefore(gtm.noScript(), document.body.childNodes[0]);\r\n },\r\n\r\n dataLayer: function ({ dataLayer }: ITagManagerArgs) {\r\n if ((window as { [key: string]: any })['dataLayer']) return (window as { [key: string]: any })['dataLayer'].push(dataLayer);\r\n const snippets = Snippets.dataLayer(dataLayer);\r\n const dataScript = this.dataScript(snippets);\r\n document.head.insertBefore(dataScript, document.head.childNodes[0]);\r\n }\r\n}\r\n\r\nexport default TagManager;","import React, { FC } from 'react'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { Container, Row, Col } from 'react-bootstrap'\r\nimport httpClient from '../../services/httpClient'\r\nimport { getQueryParams } from '../../utils/helpers'\r\n\r\nconst payseraInitiate = async (id: string, bank: string) => {}\r\n\r\nconst buttons = [\r\n [\r\n {\r\n dataBank: 'sampo',\r\n imgSrc: '/img/DanskeBank.png',\r\n altText: 'Danske Bank',\r\n },\r\n {\r\n dataBank: 'nordealt',\r\n imgSrc: '/img/LuminorNordea.png',\r\n altText: 'Luminor',\r\n },\r\n {\r\n dataBank: 'sb',\r\n imgSrc: '/img/SiauliuBankas.png',\r\n altText: 'JSC bank "Šiaulių bankas"',\r\n },\r\n ],\r\n [\r\n {\r\n dataBank: 'nord',\r\n imgSrc: '/img/LuminorDNB.png',\r\n altText: 'Luminor | DNB',\r\n },\r\n {\r\n dataBank: 'vb2',\r\n imgSrc: '/img/SEB.png',\r\n altText: 'SEB',\r\n },\r\n {\r\n dataBank: 'mb',\r\n imgSrc: '/img/MedicinosBankas.png',\r\n altText: 'JSC bank "Medicinos Bankas"',\r\n },\r\n ],\r\n [\r\n {\r\n dataBank: 'parex',\r\n imgSrc: '/img/Citadele.png',\r\n altText: 'Citadele',\r\n },\r\n {\r\n dataBank: 'hanza',\r\n imgSrc: '/img/Swedbank.png',\r\n altText: 'Swedbank',\r\n },\r\n {\r\n dataBank: 'lku',\r\n imgSrc: '/img/LKU.png',\r\n altText: 'LKU',\r\n },\r\n ],\r\n]\r\n\r\ninterface PayseraContentBlockProps {\r\n id: string\r\n onError(error: Error | undefined): void\r\n onSuccess(str: string): void\r\n}\r\n\r\nexport const PayseraContentBlock: FC = ({ id }) => {\r\n const { t } = useTranslation()\r\n const urlParams = React.useMemo(() => {\r\n let { ReturnUrl, SigningRequestId } = getQueryParams()\r\n return { ReturnUrl, SigningRequestId }\r\n }, [])\r\n\r\n const initiatePaysera =\r\n (bank: string) => async (e: React.MouseEvent) => {\r\n e.preventDefault()\r\n const { ReturnUrl, SigningRequestId } = urlParams\r\n const data = await httpClient.payseraInitiate(\r\n SigningRequestId ?? '',\r\n bank,\r\n 'auth'\r\n )\r\n\r\n window.location.replace(data.url)\r\n }\r\n\r\n return (\r\n \r\n \r\n

\r\n {t(\r\n \"Please select the bank you'd like to conduct the 1 cent transfer with\"\r\n )}\r\n :\r\n

\r\n
\r\n \r\n \r\n {buttons.map((row, i) => (\r\n \r\n {row.map((bank) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n
\r\n )\r\n}\r\n","export const appConstants = {\r\n\r\n signingRequestsCheckTimeout: 3000,\r\n\r\n signingRequestId: \"signing_request_id\"\r\n}","import React from 'react'\r\nimport {\r\n Container,\r\n Button,\r\n Col,\r\n} from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport httpClient from '../../services/httpClient'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { getQueryParams } from '../../utils/helpers'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { appInsights } from '../../appInsights'\r\nimport { appConstants } from '../../constants/appConstants'\r\n\r\ninterface EParakstsLoginBlockProps {\r\n id: string\r\n onSuccess(str: string): void\r\n onError(error: Error | undefined): void\r\n}\r\n\r\nfunction EParakstsContentBlock({ id, onError }: EParakstsLoginBlockProps) {\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const { t, i18n } = useTranslation()\r\n \r\n async function doEParakstsAuth() {\r\n onError(undefined)\r\n\r\n setIsWaiting(true)\r\n\r\n try {\r\n const { SigningRequestId, ReturnUrl } = getQueryParams()\r\n const signingRequestId = id || SigningRequestId || ''\r\n const selectedLanguage = i18n.language\r\n sessionStorage.setItem(appConstants.signingRequestId, signingRequestId)\r\n\r\n const data = await httpClient.eParakstsAuthInit({\r\n signingRequestId,\r\n selectedLanguage,\r\n returnUrl: encodeURIComponent(ReturnUrl),\r\n callbackUrl: window.location.origin + appRoutes.eParakstsCallback,\r\n })\r\n\r\n window.location.href = data\r\n\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n onError(exception)\r\n setIsWaiting(false)\r\n }\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n

{t('Please click the proceed button to authenticate')}

\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default EParakstsContentBlock\r\n\r\n","import React from 'react'\r\nimport { Row, Col, Button, Container, Alert } from 'react-bootstrap'\r\nimport { RouteComponentProps } from 'react-router-dom'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport {\r\n getErrorWithFullMessage,\r\n getQueryParams,\r\n isMobile,\r\n} from '../../utils/helpers'\r\nimport AuthMethodType from '../../constants/signingMethods'\r\nimport MobileIdContentBlock from '../pageBlocks/MobileIdContentBlock' // 2\r\nimport IdCardContentBlock from '../pageBlocks/IdCardContentBlock' // 3\r\nimport SmartIdAdvContentBlock from '../pageBlocks/SmartIdAdvContentBlock' // 4\r\nimport SmartIdBasicContentBlock from '../pageBlocks/SmartIdBasicContentBlock' // 5\r\nimport { useTranslation } from 'react-i18next'\r\nimport httpClient from '../../services/httpClient'\r\nimport AuthButtons from '../pageBlocks/AuthButtons'\r\nimport TagManager from '../../components/TagManager'\r\nimport { ITagManagerArgs } from '../../interfaces/i-tag-manager-args'\r\nimport { IDataLayer } from '../../interfaces/i-data-layer'\r\nimport { GtmEvents } from '../../constants/gtmEvents'\r\nimport { appInsights } from '../../appInsights'\r\nimport appConfig from '../../app.config'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport { PayseraContentBlock } from '../pageBlocks/PayseraContentBlock'\r\nimport EParakstsContentBlock from '../pageBlocks/EParakstsContentBlock'\r\n\r\ninterface ILoginParams {\r\n requestId: string\r\n redirectUrl: string\r\n}\r\n\r\nfunction filterAuthMethods(methods: AuthMethodType[]) {\r\n if (!isMobile()) return methods\r\n\r\n return methods.filter((m) => m !== AuthMethodType.CardId)\r\n}\r\nfunction sortAuthMethods(methods: AuthMethodType[])\r\n{\r\n methods.sort((a,b) => {\r\n if(a === AuthMethodType.SmartIdAdv)\r\n return -1;\r\n if(b === AuthMethodType.SmartIdAdv)\r\n return 1;\r\n \r\n if(a === AuthMethodType.SmartIdBasic)\r\n return -1;\r\n if(b === AuthMethodType.SmartIdBasic)\r\n return 1;\r\n \r\n if(a === AuthMethodType.MobileId)\r\n return -1;\r\n if(b === AuthMethodType.MobileId)\r\n return 1;\r\n \r\n if(a === AuthMethodType.Paysera)\r\n return -1;\r\n if(b === AuthMethodType.Paysera)\r\n return 1;\r\n \r\n return 0;\r\n });\r\n}\r\nfunction LoginPage({ match, history }: RouteComponentProps) {\r\n const [error, setError] = React.useState()\r\n const [success, setSuccess] = React.useState()\r\n const [cancelUrl, setCancelUrl] = React.useState()\r\n const [failUrl, setFailUrl] = React.useState()\r\n const [applicationId, setAppId] = React.useState()\r\n const [authMethod, setAuthMethod] = React.useState<\r\n AuthMethodType | undefined\r\n >()\r\n const [authMethodList, setAuthMethodList] = React.useState<\r\n AuthMethodType[]\r\n >([])\r\n const { t } = useTranslation()\r\n\r\n const checkCardError = async () => {\r\n const urlParams = new URLSearchParams(window.location.search)\r\n const cardError = urlParams.get('cardError')\r\n const signId = urlParams.get('SigningRequestId')\r\n const authInfo = signId ? await httpClient.getAuthInfo(signId) : null\r\n setAppId(authInfo?.applicationId)\r\n if (cardError !== null) {\r\n return new Error(cardError)\r\n }\r\n }\r\n\r\n const trigger = React.useCallback(async () => {\r\n if (error !== undefined) {\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: applicationId,\r\n authenticationMethod: localStorage.getItem('authMethod'),\r\n event: GtmEvents.AuthenticationFailed,\r\n errorMessage: error.message,\r\n } as IDataLayer,\r\n } as ITagManagerArgs\r\n\r\n TagManager.dataLayer(tagManagerArgs)\r\n }\r\n }, [applicationId, error])\r\n\r\n React.useEffect(() => {\r\n trigger()\r\n }, [trigger])\r\n\r\n function setFullError(e: Error) {\r\n setError(getErrorWithFullMessage(e))\r\n }\r\n\r\n const getAuthMethods = React.useCallback(async () => {\r\n try {\r\n const error = await checkCardError()\r\n setError(error)\r\n\r\n const { SigningRequestId } = getQueryParams()\r\n\r\n const authInfo = SigningRequestId\r\n ? await httpClient.getAuthInfo(SigningRequestId)\r\n : null\r\n setAppId(authInfo?.applicationId) \r\n const authMethods: AuthMethodType[] = filterAuthMethods(\r\n authInfo?.authMethods ?? \r\n (appConfig.country === 'lv'\r\n ? [AuthMethodType.SmartIdAdv,\r\n AuthMethodType.eParaksts]\r\n : [\r\n AuthMethodType.CardId,\r\n AuthMethodType.MobileId,\r\n AuthMethodType.SmartIdAdv,\r\n ])\r\n )\r\n \r\n sortAuthMethods(authMethods)\r\n \r\n const cancelUrl = authInfo?.cancelUrl ?? ''\r\n const failUrl = authInfo?.failUrl ?? ''\r\n\r\n setCancelUrl(cancelUrl)\r\n setFailUrl(failUrl)\r\n setAuthMethodList(authMethods)\r\n setAuthMethod(authMethods[0])\r\n } catch (e) {\r\n appInsights.trackException({ exception: e as Error })\r\n setFullError(e as Error)\r\n }\r\n }, [])\r\n\r\n React.useEffect(() => {\r\n getAuthMethods()\r\n }, [getAuthMethods])\r\n\r\n function getContentBlock() {\r\n switch (authMethod) {\r\n case AuthMethodType.MobileId:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return (\r\n \r\n )\r\n\r\n case AuthMethodType.SmartIdAdv:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return (\r\n \r\n )\r\n\r\n case AuthMethodType.SmartIdBasic:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return \r\n\r\n case AuthMethodType.CardId:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return (\r\n \r\n )\r\n\r\n case AuthMethodType.Paysera:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return (\r\n \r\n )\r\n\r\n case AuthMethodType.eParaksts:\r\n localStorage.setItem('authMethod', AuthMethodType[authMethod])\r\n return (\r\n \r\n )\r\n\r\n default:\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n\r\n function onSuccess(str: string) {\r\n if (match.params.requestId) {\r\n history.push(`${appRoutes.signRoot}/${match.params.requestId}`)\r\n } else {\r\n setSuccess(str)\r\n }\r\n }\r\n\r\n const getCancelUrl = () => window.location.replace(cancelUrl as string)\r\n const getRedirectUrl = () => window.location.replace(failUrl as string)\r\n\r\n function CancelButton() {\r\n if (document.referrer && cancelUrl) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return null\r\n }\r\n\r\n function BackToMerchant() {\r\n if (document.referrer && failUrl && error) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return null\r\n }\r\n\r\n // @ts-ignore\r\n\r\n const authButtons = (\r\n \r\n )\r\n\r\n return (\r\n \r\n \r\n

{t('Please authenticate using a method below')}

\r\n
\r\n \r\n {error && (\r\n setError(undefined)}\r\n >\r\n {t(error.message)}\r\n \r\n )}\r\n\r\n {success && (\r\n setSuccess(undefined)}\r\n >\r\n {success}\r\n \r\n )}\r\n\r\n \r\n {authButtons}\r\n\r\n
\r\n
\r\n\r\n {getContentBlock()}\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default LoginPage\r\n","import React from \"react\";\r\nimport { Container, ListGroup, Button } from \"react-bootstrap\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { appRoutes } from \"../../constants/routes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction LogoutPage({ history }: RouteComponentProps) {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n

{t(\"You are logged out\")}

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default LogoutPage;","import React from \"react\";\r\nimport { Container, Alert } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport queryString from \"query-string\";\r\nimport httpClient from \"../../services/httpClient\";\r\nimport { ITagManagerArgs } from \"../../interfaces/i-tag-manager-args\";\r\nimport { IDataLayer } from \"../../interfaces/i-data-layer\";\r\nimport { GtmEvents } from \"../../constants/gtmEvents\";\r\nimport TagManager from \"../../components/TagManager\";\r\n\r\nfunction ErrorPage() {\r\n\r\n const { t } = useTranslation();\r\n const errorObject = queryString.parse(window.location.search);\r\n\r\n const trigger = React.useCallback(async () => {\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n authenticationMethod: localStorage.getItem('authMethod'),\r\n event: GtmEvents.AuthenticationFailed,\r\n errorMessage: errorObject.errorMessage\r\n } as IDataLayer\r\n } as ITagManagerArgs;\r\n\r\n TagManager.dataLayer(tagManagerArgs);\r\n }, [errorObject.errorMessage]);\r\n\r\n React.useEffect(\r\n () => {\r\n trigger();\r\n },\r\n [trigger]\r\n );\r\n\r\n return (\r\n \r\n \r\n {t(\"Authentication error\")}\r\n
\r\n {t(errorObject.errorMessage as string)}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ErrorPage;","import React from \"react\";\r\nimport { Container, Alert } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction FailedSign() {\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n {t(\"Failed to fetch document to sign\")}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default FailedSign;","import React from 'react'\r\nimport { getClientSettings } from '../../services/auth.service'\r\nimport { UserManager } from 'oidc-client'\r\nimport { RouteComponentProps } from 'react-router'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { Container, Alert } from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport { appConstants } from '../../constants/appConstants'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nfunction CallbackPage({ history }: RouteComponentProps) {\r\n const [error, setError] = React.useState()\r\n\r\n const signin = React.useCallback(async () => {\r\n const signingRequestId = localStorage.getItem(\r\n appConstants.signingRequestId\r\n )\r\n\r\n if (signingRequestId) {\r\n localStorage.removeItem(appConstants.signingRequestId)\r\n }\r\n\r\n const userManager = new UserManager(getClientSettings('query'))\r\n\r\n try {\r\n await userManager.signinCallback()\r\n\r\n history.push(`${appRoutes.signRoot}/${signingRequestId ? signingRequestId + '/authenticated' : ''}`)\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(exception)\r\n }\r\n }, [history])\r\n\r\n React.useEffect(() => {\r\n signin()\r\n }, [signin])\r\n\r\n return (\r\n \r\n {error ? (\r\n {\r\n setError(undefined)\r\n window.location.replace(\r\n `${window.location.origin + appRoutes.logout}`\r\n )\r\n }}\r\n >\r\n {error.message}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default CallbackPage\r\n","import React, { useState } from \"react\";\r\nimport { Container, Row, Col, ListGroup, Button, FormControl } from \"react-bootstrap\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { appRoutes } from \"../../constants/routes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction SignRootPage({ history }: RouteComponentProps) {\r\n\r\n const { t } = useTranslation();\r\n const [signingRequestId, setSigningRequestId] = useState(\"\");\r\n\r\n function onSigningRequestIdChange(e: React.FormEvent) {\r\n\r\n setSigningRequestId(e.currentTarget.value || \"\");\r\n }\r\n\r\n function goToSigningRequest() {\r\n\r\n history.push(`${appRoutes.signRoot}/${signingRequestId}`);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

{t(\"Please provide signing request ID\")}

\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SignRootPage;","enum SigningStage {\r\n\r\n default,\r\n signing,\r\n complete\r\n}\r\n\r\nexport default SigningStage;","enum SigningStatus {\r\n unsigned = 0,\r\n\r\n signed = 1,\r\n\r\n expired = 2,\r\n\r\n notFound = 3,\r\n\r\n authenticated = 4,\r\n\r\n failed = 5,\r\n}\r\n\r\nexport default SigningStatus\r\n","import React from 'react'\r\nimport { apiRoutes } from '../constants/routes'\r\nimport { Alert } from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../components/pageBlocks/Spinners'\r\nimport SigningStatus from '../constants/signingStatuses'\r\nimport { IPdf } from '../interfaces/i-pdf'\r\nimport { isPdf } from '../utils/helpers'\r\nimport { getHeadersWithJwtToken } from '../utils/auth-util'\r\nimport {\r\n PDFDocumentProxy,\r\n GlobalWorkerOptions,\r\n version,\r\n getDocument,\r\n} from 'pdfjs-dist'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { appInsights } from '../appInsights'\r\n\r\nGlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${version}/pdf.worker.js`\r\n\r\ninterface IPdfViewerProps {\r\n id: string\r\n status: SigningStatus | undefined\r\n pdf: Error | PDFDocumentProxy | undefined\r\n setPdf: React.Dispatch<\r\n React.SetStateAction\r\n >\r\n}\r\n\r\nconst zoomScale = 0.25\r\nconst initialScale = 1.25\r\n\r\nfunction PdfViewer({ id, status, pdf, setPdf }: IPdfViewerProps) {\r\n const { t } = useTranslation()\r\n const [scale, setScale] = React.useState(initialScale)\r\n const [error, setError] = React.useState()\r\n const [currentPage, setCurrentPage] = React.useState(1)\r\n const isMounted = React.useRef(true)\r\n\r\n const getPdfFile = React.useCallback(async () => {\r\n try {\r\n const url = apiRoutes.originalPdf(id)\r\n const headerObject = await getHeadersWithJwtToken()\r\n const pdfObject = await getDocument({\r\n url,\r\n httpHeaders: headerObject.headers,\r\n }).promise\r\n\r\n return pdfObject\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(new Error(exception))\r\n }\r\n }, [id])\r\n\r\n React.useEffect(() => {\r\n if (!status && status !== SigningStatus.unsigned) return\r\n\r\n getPdfFile().then((pdfFile) => {\r\n if (isMounted.current) {\r\n setPdf(pdfFile)\r\n setCurrentPage(1)\r\n setScale(initialScale)\r\n setPdfPage(pdfFile, 1, initialScale)\r\n }\r\n })\r\n\r\n return () => {\r\n isMounted.current = false\r\n }\r\n }, [status, getPdfFile, setPdf])\r\n\r\n function goBack() {\r\n if (!isPdf(pdf)) return\r\n\r\n const newCurrentPage = currentPage - 1\r\n\r\n if (newCurrentPage < 1) return\r\n\r\n setCurrentPage(newCurrentPage)\r\n setPdfPage(pdf, newCurrentPage, scale)\r\n }\r\n\r\n function goNext() {\r\n if (!isPdf(pdf)) return\r\n\r\n const newCurrentPage = currentPage + 1\r\n\r\n let pdfDocProxy = pdf as PDFDocumentProxy\r\n\r\n if (newCurrentPage > pdfDocProxy.numPages) return\r\n\r\n setCurrentPage(newCurrentPage)\r\n setPdfPage(pdf, newCurrentPage, scale)\r\n }\r\n\r\n function zoomin() {\r\n if (!isPdf(pdf)) return\r\n\r\n const newScale = scale + zoomScale\r\n\r\n setScale(newScale)\r\n setPdfPage(pdf, currentPage, newScale)\r\n }\r\n\r\n function zoomout() {\r\n if (!isPdf(pdf) || scale <= zoomScale) return\r\n\r\n const newScale = scale - zoomScale\r\n\r\n setScale(newScale)\r\n setPdfPage(pdf, currentPage, newScale)\r\n }\r\n\r\n function PdfControls() {\r\n return (\r\n
\r\n \r\n\r\n
\r\n {isPdf(pdf) && currentPage}/\r\n {isPdf(pdf) && (pdf as PDFDocumentProxy).numPages}\r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n {PdfControls()}\r\n\r\n {error ? (\r\n {t('MissingPDFException')}\r\n ) : pdf ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n {pdf && PdfControls()}\r\n
\r\n )\r\n}\r\n\r\nasync function setPdfPage(pdf: IPdf, pageNumber: number = 1, scale = 2.5) {\r\n if (!isPdf(pdf)) return\r\n\r\n console.warn(scale)\r\n const pdfProxy = pdf as PDFDocumentProxy\r\n const page = await pdfProxy.getPage(pageNumber)\r\n\r\n const viewport = page.getViewport({ scale })\r\n const canvas = document.getElementById('canvasPdf') as HTMLCanvasElement\r\n canvas.height = viewport.height\r\n canvas.width = viewport.width\r\n const canvasContext = canvas.getContext('2d') as CanvasRenderingContext2D\r\n\r\n const renderContext = { viewport, canvasContext }\r\n\r\n page.render(renderContext)\r\n}\r\n\r\nexport default PdfViewer\r\n","export enum documentTypes {\r\n consent = 0,\r\n consentSpouse = 1,\r\n promissoryNote = 2\r\n};","export default {\r\n\r\n complete: \"complete\",\r\n initiate: \"initiate\",\r\n callback: \"callback\"\r\n}","import React, {\r\n createContext,\r\n PropsWithChildren,\r\n Context,\r\n useState,\r\n useCallback,\r\n} from 'react'\r\nimport { ISigningRequest } from '../interfaces/i-signing-request'\r\nimport { appConstants } from '../constants/appConstants'\r\nimport { userManager } from '../services/auth.service'\r\nimport SigningStage from '../constants/signingStages'\r\nimport httpClient from '../services/httpClient'\r\nimport axios, { AxiosError } from 'axios'\r\nimport { getErrorWithFullMessage } from '../utils/helpers'\r\nimport SigningStatus from '../constants/signingStatuses'\r\nimport payseraStatuses from '../constants/payseraStatuses'\r\nimport { User } from 'oidc-client'\r\nimport queryString from 'query-string'\r\nimport TagManager from '../components/TagManager'\r\nimport { ITagManagerArgs } from '../interfaces/i-tag-manager-args'\r\nimport { IDataLayer } from '../interfaces/i-data-layer'\r\nimport { GtmEvents } from '../constants/gtmEvents'\r\nimport { documentTypes } from '../constants/documentTypes'\r\nimport AuthMethodType from '../constants/signingMethods'\r\nimport { appInsights } from '../appInsights'\r\n\r\ninterface SigningContext {\r\n signingRequest: ISigningRequest | undefined\r\n signingStage: SigningStage\r\n error: Error | undefined\r\n signingStatus: string\r\n user: User | null\r\n fetchSigningRequest(id: string, status: string): void\r\n setError(e: Error | undefined): void\r\n setSigned(justSigned?: boolean): void\r\n setSigningStage(stage: SigningStage): void\r\n setSigningStatus(status: string): void\r\n}\r\n\r\nconst SigningContext: Context = createContext({\r\n signingRequest: undefined,\r\n signingStage: SigningStage.default,\r\n error: undefined,\r\n signingStatus: '',\r\n user: null,\r\n fetchSigningRequest: () => {},\r\n setError: () => {},\r\n setSigned: () => {},\r\n setSigningStage: () => {},\r\n setSigningStatus: () => {},\r\n})\r\n\r\nconst redirectToLogin = async (id: string, style?: string) => {\r\n localStorage.setItem(appConstants.signingRequestId, id)\r\n await userManager.clearStaleState()\r\n\r\n userManager.signinRedirect({\r\n extraQueryParams: {\r\n SigningRequestId: id,\r\n style: style,\r\n },\r\n })\r\n}\r\n\r\nconst checkAuth = async (id: string, style?: string) => {\r\n const user = await userManager.getUser()\r\n\r\n if (!Boolean(user)) {\r\n await redirectToLogin(id, style)\r\n return null\r\n }\r\n\r\n return user\r\n}\r\n\r\nexport function SigningContextProvider({ children }: PropsWithChildren) {\r\n const [signingRequest, setSigningRequest] = useState<\r\n ISigningRequest | undefined\r\n >()\r\n const [user, setUser] = useState(null)\r\n const [error, setError] = React.useState()\r\n const [signingStage, setSigningStage] = React.useState(\r\n SigningStage.default\r\n )\r\n const [signingStatus, setSigningStatus] = React.useState('')\r\n const [style, setStyle] = useState(sessionStorage.getItem('style')! ?? '')\r\n const autoclose = signingRequest?.autoclose ?? false\r\n const redirectUrl = signingRequest?.redirectUrl ?? ''\r\n\r\n const getStyle = React.useCallback(async () => {\r\n const parsedRedirectUrl = queryString.parseUrl(\r\n window.location.search.toLowerCase()\r\n ).query.returnurl\r\n const queryRedirect = parsedRedirectUrl\r\n ? queryString.parse(parsedRedirectUrl.toString())\r\n : ''\r\n const queryParam = queryRedirect ? queryRedirect.style?.toString() : ''\r\n\r\n setStyle(queryParam ?? style)\r\n if (style) {\r\n import(`../styling/${style}.css`).catch((e) => {\r\n window.console.warn(e)\r\n })\r\n }\r\n }, [style])\r\n\r\n const trigger = React.useCallback(async () => {\r\n const appId = signingRequest?.applicationId\r\n\r\n if (error !== undefined) {\r\n const signMethod = localStorage.getItem('signMethod')\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: appId,\r\n signingMethod: signMethod,\r\n authenticationMethod: undefined,\r\n event: GtmEvents.SigningFailed,\r\n errorMessage: error.message,\r\n } as IDataLayer,\r\n } as ITagManagerArgs\r\n\r\n TagManager.dataLayer(tagManagerArgs)\r\n\r\n if (\r\n signingRequest?.documentType === documentTypes.consent &&\r\n signMethod === AuthMethodType[AuthMethodType.Paysera]\r\n ) {\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: appId,\r\n signingMethod: signMethod,\r\n authenticationMethod: undefined,\r\n event: GtmEvents.ConsentFailed,\r\n errorMessage: error.message,\r\n } as IDataLayer,\r\n } as ITagManagerArgs\r\n\r\n TagManager.dataLayer(tagManagerArgs)\r\n }\r\n }\r\n }, [error, signingRequest])\r\n\r\n React.useEffect(() => {\r\n getStyle()\r\n trigger()\r\n }, [getStyle, trigger])\r\n\r\n const setSignedFunction = useCallback(\r\n (autoclose: boolean, redirectUrl: string, justSigned = true) => {\r\n if (justSigned && autoclose) {\r\n window.location.replace(redirectUrl)\r\n return\r\n }\r\n\r\n setSigningStage(SigningStage.complete)\r\n },\r\n []\r\n )\r\n\r\n const setFullError = useCallback((e: Error) => {\r\n setError(getErrorWithFullMessage(e))\r\n }, [])\r\n\r\n const setSigned = useCallback(\r\n (justSigned = true) =>\r\n setSignedFunction(autoclose, redirectUrl, justSigned),\r\n [autoclose, redirectUrl, setSignedFunction]\r\n )\r\n\r\n const fetchSigningRequest = useCallback(\r\n async (id: string, status: string) => {\r\n const user = await checkAuth(id, style)\r\n\r\n if (!user) return\r\n\r\n setUser(user)\r\n\r\n try {\r\n const signingRequest = await httpClient.getSigningRequestById(\r\n id\r\n )\r\n setSigningRequest(signingRequest)\r\n setSigningStatus(status)\r\n\r\n if (status === payseraStatuses.complete) {\r\n setSigningStage(SigningStage.signing)\r\n }\r\n else if (signingRequest?.status === SigningStatus.signed) {\r\n setSignedFunction(\r\n signingRequest.autoclose,\r\n signingRequest.redirectUrl,\r\n status === \"authenticated\"\r\n )\r\n }\r\n } catch (e) {\r\n appInsights.trackException({ exception: e as Error })\r\n if (axios.isAxiosError(e)) {\r\n const axiosError = e as AxiosError\r\n const { status } = axiosError.response || { status: 0 }\r\n const gte400ls500 = status >= 400 && status < 500\r\n\r\n if (gte400ls500) {\r\n return void userManager.signoutRedirect({\r\n extraQueryParams: {\r\n SigningRequestId: id,\r\n },\r\n })\r\n }\r\n }\r\n\r\n setFullError(e as Error)\r\n }\r\n },\r\n [style, setSignedFunction, setFullError]\r\n )\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport default SigningContext\r\n","import React, { useContext } from \"react\";\r\nimport { Row, Col, Card, Button } from \"react-bootstrap\";\r\nimport PdfViewer from \"../PdfViewer\";\r\nimport { documentTypes } from \"../../constants/documentTypes\";\r\nimport SigningStatus from \"../../constants/signingStatuses\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport SigningStage from \"../../constants/signingStages\";\r\nimport { PDFDocumentProxy } from \"pdfjs-dist\";\r\nimport { isPdf, downloadPdf } from \"../../utils/helpers\";\r\nimport SigningContext from \"../../contexts/SigningContext\";\r\nimport { getZonedTime, findTimeZone } from \"timezone-support\";\r\nimport appConfig from \"../../app.config\";\r\nimport TagManager from \"../TagManager\";\r\nimport { ITagManagerArgs } from \"../../interfaces/i-tag-manager-args\";\r\nimport { IDataLayer } from \"../../interfaces/i-data-layer\";\r\nimport { GtmEvents } from \"../../constants/gtmEvents\";\r\n\r\nfunction getLithuaniaHours() {\r\n const vilnus = findTimeZone(\"Europe/Vilnius\");\r\n const date = getZonedTime(new Date(), vilnus);\r\n\r\n return date.hours;\r\n}\r\n\r\nfunction signingForbidden(country: string) {\r\n\r\n const timeLt = getLithuaniaHours();\r\n const disableSigning = country.startsWith(\"lt\") &&\r\n (timeLt >= 22 || timeLt < 7);\r\n\r\n return disableSigning;\r\n}\r\n\r\nfunction DefaultSigningBlock() {\r\n const { country } = appConfig;\r\n const { t } = useTranslation();\r\n const [pdf, setPdf] = React.useState();\r\n const {\r\n signingRequest,\r\n setSigningStage,\r\n } = useContext(SigningContext);\r\n\r\n\r\n const id = signingRequest?.id ?? \"\";\r\n\r\n const disableSigning = signingForbidden(country);\r\n\r\n const fileName = `${signingRequest && t(documentTypes[signingRequest.documentType])\r\n }_${id}`;\r\n\r\n\r\n const trigger = React.useCallback(async () => {\r\n const auth = localStorage.getItem('authMethod');\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: signingRequest?.applicationId,\r\n authenticationMethod: auth,\r\n event: GtmEvents.AuthenticationSuccess\r\n } as IDataLayer\r\n } as ITagManagerArgs;\r\n\r\n TagManager.dataLayer(tagManagerArgs);\r\n }, [signingRequest]);\r\n\r\n React.useEffect(() => {\r\n trigger();\r\n }, [signingRequest, trigger])\r\n\r\n return (\r\n \r\n \r\n

{signingRequest && t(documentTypes[signingRequest.documentType])}

\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n {isPdf(pdf) && downloadPdf(pdf, `TF Bank ${fileName}.pdf`)}>\r\n \r\n {t(\"Download PDF document\")}\r\n \r\n }\r\n\r\n {signingRequest?.status !== SigningStatus.signed &&\r\n setSigningStage(SigningStage.signing)}>\r\n {t(\"Sign electronically\")}\r\n \r\n }\r\n {disableSigning &&\r\n

{t(\r\n \"unfortunately, you cannot sign your contract from {{from}} to {{to}}\",\r\n { from: \"10.00 PM\", to: \"7.00 AM\" }\r\n )}

\r\n }\r\n \r\n \r\n\r\n {isPdf(pdf) &&\r\n \r\n {disableSigning &&\r\n

{t(\r\n \"unfortunately, you cannot sign your contract from {{from}} to {{to}}\",\r\n { from: \"10.00 PM\", to: \"7.00 AM\" }\r\n )}

\r\n }\r\n {signingRequest?.status !== SigningStatus.signed &&\r\n setSigningStage(SigningStage.signing)}>\r\n {t(\"Sign electronically\")}\r\n \r\n }\r\n\r\n \r\n }\r\n\r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default DefaultSigningBlock;\r\n","import React, { useContext } from \"react\";\r\nimport AuthMethodType, { signingMethods } from \"../../constants/signingMethods\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport SigningContext from \"../../contexts/SigningContext\";\r\n\r\ninterface ISigningButtonProps {\r\n methods: AuthMethodType[] | undefined;\r\n onClick: any;\r\n\r\n active: AuthMethodType | undefined;\r\n}\r\n\r\nfunction SigningButtons({\r\n methods,\r\n onClick,\r\n active\r\n}: ISigningButtonProps) {\r\n\r\n const { t } = useTranslation();\r\n\r\n const { user } =\r\n useContext(SigningContext)\r\n\r\n const signingButtons = !methods\r\n ? []\r\n : signingMethods\r\n .filter(method => methods.indexOf(method.type) > -1);\r\n\r\n function isChosen(methodId: number) {\r\n return String(active) === String(methodId) ? \" chosen\" : \"\";\r\n }\r\n\r\n return signingButtons.map(b => b.showInMobile && (b.type !== AuthMethodType.eParaksts || user?.profile?.AuthMethodType === 'EParaksts') && \r\n onClick(b.type)}>\r\n {t(b.title)}\r\n \r\n )\r\n}\r\n\r\nexport default SigningButtons;","// JavaScript library as described in\r\n// https://github.com/open-eid/hwcrypto.js\r\nexport const hwcrypto = (function hwcrypto() {\r\n var _debug = function(x) {\r\n // console.log(x);\r\n };\r\n _debug(\"hwcrypto.js activated\");\r\n // Fix up IE8\r\n window.addEventListener = window.addEventListener || window.attachEvent;\r\n // Returns \"true\" if a plugin is present for the MIME\r\n function hasPluginFor(mime) {\r\n return navigator.mimeTypes && mime in navigator.mimeTypes;\r\n }\r\n // Checks if a function is present (used for Chrome)\r\n function hasExtensionFor(cls) {\r\n return typeof window[cls] === 'function';\r\n }\r\n\r\n function _hex2array(str) {\r\n if(typeof str == 'string') {\r\n var len = Math.floor(str.length / 2);\r\n var ret = new Uint8Array(len);\r\n for (var i = 0; i < len; i++) {\r\n ret[i] = parseInt(str.substr(i * 2, 2), 16);\r\n }\r\n return ret;\r\n }\r\n }\r\n\r\n function _array2hex(args) {\r\n var ret = \"\";\r\n for(var i = 0; i < args.length; i++) ret += (args[i] < 16 ? \"0\" : \"\") + args[i].toString(16);\r\n return ret.toLowerCase();\r\n }\r\n\r\n function _mimeid(mime) {\r\n return \"hwc\" + mime.replace('/', '').replace('-', '');\r\n }\r\n\r\n function loadPluginFor(mime) {\r\n var element = _mimeid(mime);\r\n if(document.getElementById(element)) {\r\n _debug(\"Plugin element already loaded\");\r\n return document.getElementById(element);\r\n }\r\n _debug('Loading plugin for ' + mime + ' into ' + element);\r\n // Must insert tag as string (not as an Element object) so that IE9 can access plugin methods\r\n var objectTag = '';\r\n var div = document.createElement(\"div\");\r\n div.setAttribute(\"id\", 'pluginLocation' + element);\r\n document.body.appendChild(div);\r\n // Must not manipulate body's innerHTML directly, otherwise previous Element references get lost\r\n document.getElementById('pluginLocation' + element).innerHTML = objectTag;\r\n return document.getElementById(element);\r\n }\r\n // Important constants\r\n var digidoc_mime = 'application/x-digidoc';\r\n var digidoc_chrome = 'TokenSigning';\r\n // Some error strings\r\n var USER_CANCEL = \"user_cancel\";\r\n var NO_CERTIFICATES = \"no_certificates\";\r\n var INVALID_ARGUMENT = \"invalid_argument\";\r\n var DRIVER_ERROR = \"driver_error\";\r\n var TECHNICAL_ERROR = \"technical_error\";\r\n var NO_IMPLEMENTATION = \"no_implementation\";\r\n var NOT_ALLOWED = \"not_allowed\";\r\n // Probe all existing backends in a failsafe manner.\r\n function probe() {\r\n var msg = 'probe() detected ';\r\n // First try Chrome extensions\r\n if(hasExtensionFor(digidoc_chrome)) {\r\n _debug(msg + digidoc_chrome);\r\n }\r\n if(hasPluginFor(digidoc_mime)) {\r\n _debug(msg + digidoc_mime);\r\n }\r\n }\r\n // TODO: remove\r\n window.addEventListener('load', function(event) {\r\n // There's a timeout because chrome content script needs to be loaded\r\n probe();\r\n });\r\n // Backend for DigiDoc plugin\r\n function DigiDocPlugin() {\r\n this._name = \"NPAPI/BHO for application/x-digidoc\";\r\n var p = loadPluginFor(digidoc_mime);\r\n // keeps track of detected certificates and their ID-s\r\n var certificate_ids = {};\r\n\r\n function code2str(err) {\r\n _debug(\"Error: \" + err + \" with: \" + p.errorMessage);\r\n switch(parseInt(err)) {\r\n case 1:\r\n return USER_CANCEL;\r\n case 2:\r\n return NO_CERTIFICATES;\r\n case 15:\r\n return DRIVER_ERROR;\r\n case 17:\r\n // invalid hash length\r\n return INVALID_ARGUMENT;\r\n case 19:\r\n return NOT_ALLOWED;\r\n default:\r\n _debug(\"Unknown error: \" + err + \" with: \" + p.errorMessage);\r\n return TECHNICAL_ERROR;\r\n }\r\n }\r\n\r\n function code2err(err) {\r\n return new Error(code2str(err));\r\n }\r\n this.check = function() {\r\n return new Promise(function(resolve, reject) {\r\n // IE8 cannot access the newly inserted plugin object before the end of call queue\r\n setTimeout(function() {\r\n resolve(typeof p.version !== \"undefined\");\r\n }, 0);\r\n });\r\n };\r\n this.getVersion = function() {\r\n return new Promise(function(resolve, reject) {\r\n var v = p.version;\r\n resolve(v);\r\n });\r\n };\r\n this.getCertificate = function(options) {\r\n // Ignore everything except language\r\n if(options && options.lang) {\r\n p.pluginLanguage = options.lang;\r\n }\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n var ver = p.version.split(\".\");\r\n var v = (ver[0] >= 3 && ver[1] >= 13) ? p.getCertificate(options.filter) : p.getCertificate();\r\n if(parseInt(p.errorCode) !== 0) {\r\n reject(code2err(p.errorCode));\r\n } else {\r\n // Store plugin-internal ID\r\n certificate_ids[v.cert] = v.id;\r\n resolve({\r\n hex: v.cert\r\n });\r\n }\r\n } catch(ex) {\r\n _debug(ex);\r\n reject(code2err(p.errorCode));\r\n }\r\n });\r\n };\r\n this.sign = function(cert, hash, options) {\r\n return new Promise(function(resolve, reject) {\r\n // get the ID of the certificate\r\n var cid = certificate_ids[cert.hex];\r\n if(cid) {\r\n try {\r\n //var v = p.sign(cid, hash, 'en'); // FIXME: only BHO requires language but does not use it\r\n var language = options.lang || 'en';\r\n //p.pluginLanguage = language;\r\n var info = options.info || '';\r\n var ver = p.version.split(\".\");\r\n var v = (ver[0] >= 3 && ver[1] >= 13) ? p.sign(cid, hash.hex, language, info) : p.sign(cid, hash.hex, language);\r\n resolve({\r\n hex: v\r\n });\r\n } catch(ex) {\r\n _debug(JSON.stringify(ex));\r\n reject(code2err(p.errorCode));\r\n }\r\n } else {\r\n _debug(\"invalid certificate: \" + cert);\r\n reject(new Error(INVALID_ARGUMENT));\r\n }\r\n });\r\n };\r\n }\r\n // Backend for Digidoc Chrome Extension\r\n function DigiDocExtension() {\r\n this._name = \"Chrome native messaging extension\";\r\n var p = null;\r\n this.check = function() {\r\n return new Promise(function(resolve, reject) {\r\n if (!hasExtensionFor(digidoc_chrome)) {\r\n return resolve(false);\r\n }\r\n // FIXME: remove this from content script!\r\n p = new window[digidoc_chrome]();\r\n if (p) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n };\r\n this.getVersion = function() {\r\n return p.getVersion();\r\n };\r\n this.getCertificate = function(options) {\r\n return p.getCertificate(options);\r\n };\r\n this.sign = function(cert, hash, options) {\r\n return p.sign(cert, hash, options);\r\n };\r\n }\r\n\r\n // Dummy\r\n function NoBackend() {\r\n this._name = \"No implementation\";\r\n this.check = function() {\r\n return new Promise(function(resolve, reject) {\r\n resolve(true);\r\n });\r\n };\r\n this.getVersion = function() {\r\n return Promise.reject(new Error(NO_IMPLEMENTATION));\r\n };\r\n this.getCertificate = function() {\r\n return Promise.reject(new Error(NO_IMPLEMENTATION));\r\n };\r\n this.sign = function() {\r\n return Promise.reject(new Error(NO_IMPLEMENTATION));\r\n };\r\n }\r\n // Active backend\r\n var _backend = null;\r\n // To be exposed\r\n var fields = {};\r\n\r\n function _testAndUse(Backend) {\r\n return new Promise(function(resolve, reject) {\r\n var b = new Backend();\r\n b.check().then(function(isLoaded) {\r\n if (isLoaded) {\r\n _debug(\"Using backend: \" + b._name);\r\n _backend = b;\r\n resolve(true);\r\n } else {\r\n _debug(b._name + \" check() failed\");\r\n resolve(false);\r\n }\r\n });\r\n });\r\n }\r\n\r\n function _autodetect(force) {\r\n return new Promise(function(resolve, reject) {\r\n _debug(\"Autodetecting best backend\");\r\n if (typeof force === 'undefined') {\r\n force = false;\r\n }\r\n if (_backend !== null && !force) {\r\n return resolve(true);\r\n }\r\n\r\n function tryDigiDocPlugin() {\r\n _testAndUse(DigiDocPlugin).then(function(result) {\r\n if (result) {\r\n resolve(true);\r\n } else {\r\n resolve(_testAndUse(NoBackend));\r\n }\r\n });\r\n }\r\n\r\n // IE BHO\r\n if (navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.userAgent.indexOf(\"Trident\") !== -1) {\r\n _debug(\"Assuming IE BHO, testing\");\r\n return tryDigiDocPlugin();\r\n }\r\n\r\n // Chrome/Firefox/Edge extension or NPAPI\r\n if (/*navigator.userAgent.indexOf(\"Chrome\") != -1 &&*/ hasExtensionFor(digidoc_chrome)) {\r\n _testAndUse(DigiDocExtension).then(function(result) {\r\n if (result) {\r\n resolve(true);\r\n } else {\r\n tryDigiDocPlugin();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n // Other browsers with NPAPI support\r\n if (hasPluginFor(digidoc_mime)) {\r\n return tryDigiDocPlugin();\r\n }\r\n\r\n // No backend supported\r\n resolve(_testAndUse(NoBackend));\r\n });\r\n }\r\n // Use a specific backend or autodetect\r\n fields.use = function(backend) {\r\n return new Promise(function(resolve, reject) {\r\n if (typeof backend === \"undefined\" || backend === 'auto') {\r\n _autodetect().then(function(result) { resolve(result);});\r\n } else {\r\n if (backend === \"chrome\") {\r\n resolve(_testAndUse(DigiDocExtension));\r\n } else if (backend === \"npapi\") {\r\n resolve(_testAndUse(DigiDocPlugin));\r\n } else {\r\n resolve(false); // unknown backend\r\n }\r\n }\r\n });\r\n };\r\n // Give debugging information.\r\n fields.debug = function() {\r\n return new Promise(function(resolve, reject) {\r\n var hwversion = \"hwcrypto.js @@hwcryptoversion\";\r\n _autodetect().then(function(result) {\r\n _backend.getVersion().then(function(version) {\r\n resolve(hwversion + \" with \" + _backend._name + \" \" + version);\r\n }, function(error) {\r\n resolve(hwversion + \" with failing backend \" + _backend._name);\r\n });\r\n });\r\n });\r\n };\r\n // Get a certificate\r\n fields.getCertificate = function(options) {\r\n if(typeof options !== 'object') {\r\n _debug(\"getCertificate options parameter must be an object\");\r\n return Promise.reject(new Error(INVALID_ARGUMENT));\r\n }\r\n // If options does not specify a language, set to 'en'\r\n if(options && !options.lang) {\r\n options.lang = 'en';\r\n }\r\n return _autodetect().then(function(result) {\r\n // FIXME: dummy security check in website context\r\n if (window.location.protocol !== 'https:' && window.location.protocol !== 'file:') {\r\n return Promise.reject(new Error(NOT_ALLOWED));\r\n }\r\n return _backend.getCertificate(options).then(function(certificate) {\r\n // Add binary value as well\r\n if (certificate.hex && !certificate.encoded)\r\n certificate.encoded = _hex2array(certificate.hex);\r\n return certificate;\r\n });\r\n });\r\n };\r\n // Sign a hash\r\n fields.sign = function(cert, hash, options) {\r\n if (arguments.length < 2)\r\n return Promise.reject(new Error(INVALID_ARGUMENT));\r\n // If options does not specify a language, set to 'en'\r\n if(options && !options.lang) {\r\n options.lang = 'en';\r\n }\r\n // Hash type and value must be present\r\n if (!hash.type || (!hash.value && !hash.hex))\r\n return Promise.reject(new Error(INVALID_ARGUMENT));\r\n\r\n // Convert Hash to hex and vice versa.\r\n // TODO: All backends currently expect the presence of Hex.\r\n if (hash.hex && !hash.value) {\r\n _debug(\"DEPRECATED: hash.hex as argument to sign() is deprecated, use hash.value instead\");\r\n hash.value = _hex2array(hash.hex);\r\n }\r\n if (hash.value && !hash.hex)\r\n hash.hex = _array2hex(hash.value);\r\n\r\n return _autodetect().then(function(result) {\r\n // FIXME: dummy security check in website context\r\n if(window.location.protocol !== 'https:' && window.location.protocol !== 'file:') {\r\n return Promise.reject(new Error(NOT_ALLOWED));\r\n }\r\n return _backend.sign(cert, hash, options).then(function(signature) {\r\n // Add binary value as well\r\n // TODO: all backends return hex currently\r\n if (signature.hex && !signature.value)\r\n signature.value = _hex2array(signature.hex);\r\n return signature;\r\n });\r\n });\r\n };\r\n // Constants for errors\r\n fields.NO_IMPLEMENTATION = NO_IMPLEMENTATION;\r\n fields.USER_CANCEL = USER_CANCEL;\r\n fields.NOT_ALLOWED = NOT_ALLOWED;\r\n fields.NO_CERTIFICATES = NO_CERTIFICATES;\r\n fields.TECHNICAL_ERROR = TECHNICAL_ERROR;\r\n fields.INVALID_ARGUMENT = INVALID_ARGUMENT;\r\n return fields;\r\n}());","import React, { useContext } from 'react'\r\nimport { Row, Container, Button } from 'react-bootstrap'\r\nimport { DefaultSpinner } from './Spinners'\r\nimport { hwcrypto } from '../../utils/hwcrypto'\r\nimport { useTranslation } from 'react-i18next'\r\nimport httpClient from '../../services/httpClient'\r\nimport { IdCardHelpText } from './IdCardContentBlock'\r\nimport SigningContext from '../../contexts/SigningContext'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nfunction IdCardSignBLock() {\r\n const { t, i18n } = useTranslation()\r\n const [waiting, setWaiting] = React.useState(false)\r\n const { signingRequest, setError, setSigned } = useContext(SigningContext)\r\n\r\n const id = signingRequest?.id ?? ''\r\n\r\n async function initiateSign() {\r\n setError(undefined)\r\n\r\n setWaiting(true)\r\n\r\n try {\r\n const certificate = await hwcrypto.getCertificate({\r\n lang: i18n.language,\r\n })\r\n //const certificate = { hex: \"308205BE308203A6A00302010202106700196ACA527BF559F045770B451DDD300D06092A864886F70D01010B0500306B310B300906035504061302454531223020060355040A0C19415320536572746966697473656572696D69736B65736B75733117301506035504610C0E4E545245452D3130373437303133311F301D06035504030C1654455354206F66204553544549442D534B2032303135301E170D3137313032353038303430375A170D3232313032343230353935395A30819A310B3009060355040613024545310F300D060355040A0C06455354454944311A3018060355040B0C116469676974616C207369676E61747572653124302206035504030C1BC5BD41494B4F56534B492C49474F522C33373130313031303032313113301106035504040C0AC5BD41494B4F56534B49310D300B060355042A0C0449474F52311430120603550405130B33373130313031303032313076301006072A8648CE3D020106052B8104002203620004EDA2E58F28CFE8D30235B0847F69E1F09A05A4D996BDAFC79B8F244719C28AC94C8609DD4716D338F9E0D5BFA271C38662750E242610248656222B4614D7AE05C8DF0D95BFE74ED2A96F649E68E3E3249F0FC6C2A3C62D0B92F89BDCF16E9244A38201DA308201D630090603551D1304023000300E0603551D0F0101FF04040302064030818B0603551D20048183308180307306092B06010401CE1F03013066302F06082B06010505070201162368747470733A2F2F7777772E736B2E65652F7265706F7369746F6F7269756D2F435053303306082B0601050507020230270C2541696E756C742074657374696D6973656B732E204F6E6C7920666F722074657374696E672E3009060704008BEC400102301D0603551D0E04160414476CAD189AC836D2B808CBCA032958DF8B583355302206082B06010505070103041630143008060604008E4601013008060604008E460104301F0603551D2304183016801449C0F2443965D59B463B0D386083B1D62D2886A630818306082B0601050507010104773075302C06082B060105050730018620687474703A2F2F6169612E64656D6F2E736B2E65652F65737465696432303135304506082B06010505073002863968747470733A2F2F736B2E65652F75706C6F61642F66696C65732F544553545F6F665F4553544549442D534B5F323031352E6465722E63727430410603551D1F043A30383036A034A0328630687474703A2F2F7777772E736B2E65652F63726C732F6573746569642F746573745F657374656964323031352E63726C300D06092A864886F70D01010B050003820201005ECFFAB8662AB22E5D10C5F07168B5CD343AD1ACC1BD45CE83E0140A513DD973298FECC7A907F2D27AE0E1624017A39EF78CB96DE54A2C82FD43B92E8CC6952D53C2B0F0183FD224A83E0F3C072467D560B77D91F8FAA324222AAB90C401FB6334C3C418598E411D429FC066853D49526C7EE80C2079C19F730458383918CFF47E860354F9A6671300B62FFA3A7C03DD9471A1A1EDF0E0241E5610C2893C063BE8B317BD5FC7F798C5EA828BFA70085EE291A3B6E8D756945E53DAFAA2B0CAA7C1A25312C6BA89F46F911E967EE381B28802A4A3CD746376F00821B975B9CD4A3369EC9F834A0D435AF6AE021FEB9450A6B4799FE2E2A22F63BD6EDF4E36309BE534997AC1B28112DD78B56D12B2E0DB7E843A74134D35EF18EFDB92638E7F93EB02E08AFF1F3F97D2BDBDA4242B13705CA54DF2C9D6628FF9B96207BBBCC1614EE432A40A5085FA32E4368E070B68298262CAE6BA2E4C88E872FF001030F2B032F1BC308B808C41551696613EFB6AC4933DA28382AA74FB7CE01E360FD65857507B3BD2A2A7DEDCCE07DAD356CBD0C571CD4BFEF9B02929B13A10B54D1123E5A40AE55C0361C1D57463CECA37DBA14F2531661ABA07E053DACA03EE417C0C67FFD8095EA065428D3AE27FD5DE674623C1C27E9C78B540CE2E157CB925E903F4A128CF2414C8CC3B7445753069244E0F02A5C31F7FE6B2FBF2E0D17566EAB1BC\" };\r\n console.warn(certificate, 'certificate')\r\n\r\n const signInitiate = await httpClient.idCardSignInitiate(\r\n id,\r\n certificate.hex\r\n )\r\n\r\n //const signature = { \"hex\": \"BCF5BC96D99B5EBD9F12E55EA6AA9C3859718EF52F121841EE1AE6B2051243CDAAA6F3B2415D8A92F52B78280114C8A53C6363E6CCD2A00A13837B73BD399D659904A30E13A81D9CCEB5F5B3846EDC414241A2322D2EF40B55DE01B4AA0BD747\", \"value\": { \"0\": 188, \"1\": 245, \"2\": 188, \"3\": 150, \"4\": 217, \"5\": 155, \"6\": 94, \"7\": 189, \"8\": 159, \"9\": 18, \"10\": 229, \"11\": 94, \"12\": 166, \"13\": 170, \"14\": 156, \"15\": 56, \"16\": 89, \"17\": 113, \"18\": 142, \"19\": 245, \"20\": 47, \"21\": 18, \"22\": 24, \"23\": 65, \"24\": 238, \"25\": 26, \"26\": 230, \"27\": 178, \"28\": 5, \"29\": 18, \"30\": 67, \"31\": 205, \"32\": 170, \"33\": 166, \"34\": 243, \"35\": 178, \"36\": 65, \"37\": 93, \"38\": 138, \"39\": 146, \"40\": 245, \"41\": 43, \"42\": 120, \"43\": 40, \"44\": 1, \"45\": 20, \"46\": 200, \"47\": 165, \"48\": 60, \"49\": 99, \"50\": 99, \"51\": 230, \"52\": 204, \"53\": 210, \"54\": 160, \"55\": 10, \"56\": 19, \"57\": 131, \"58\": 123, \"59\": 115, \"60\": 189, \"61\": 57, \"62\": 157, \"63\": 101, \"64\": 153, \"65\": 4, \"66\": 163, \"67\": 14, \"68\": 19, \"69\": 168, \"70\": 29, \"71\": 156, \"72\": 206, \"73\": 181, \"74\": 245, \"75\": 179, \"76\": 132, \"77\": 110, \"78\": 220, \"79\": 65, \"80\": 66, \"81\": 65, \"82\": 162, \"83\": 50, \"84\": 45, \"85\": 46, \"86\": 244, \"87\": 11, \"88\": 85, \"89\": 222, \"90\": 1, \"91\": 180, \"92\": 170, \"93\": 11, \"94\": 215, \"95\": 71 } }\r\n const signature: any = await hwcrypto.sign(\r\n certificate,\r\n { type: 'SHA-256', hex: signInitiate?.digest },\r\n { lang: i18n.language }\r\n )\r\n console.warn(JSON.stringify(signature), 'signature')\r\n\r\n await completeSigning(\r\n signature.hex || '',\r\n id,\r\n signInitiate?.containerID || ''\r\n )\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(exception)\r\n setWaiting(false)\r\n }\r\n }\r\n\r\n async function completeSigning(\r\n signatureValue: string,\r\n signingRequestId: string,\r\n containerId: string\r\n ) {\r\n const data = await httpClient.idCardSignComplete(\r\n signingRequestId,\r\n signatureValue,\r\n containerId\r\n )\r\n\r\n setWaiting(false)\r\n\r\n if (data && data.url) {\r\n window.location.replace(data.url)\r\n } else {\r\n setSigned()\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {waiting ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default IdCardSignBLock\r\n","import React, { useContext } from 'react'\r\nimport {\r\n Col,\r\n Row,\r\n Button,\r\n FormControl,\r\n Container,\r\n Card,\r\n Form,\r\n} from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport { useTranslation } from 'react-i18next'\r\nimport httpClient from '../../services/httpClient'\r\nimport SigningContext from '../../contexts/SigningContext'\r\nimport { getPhoneForCountry } from '../../utils/helpers'\r\nimport appConfig from '../../app.config'\r\nimport { validatePhoneNumber } from '../../utils/validation.helper'\r\nimport { CountryCode } from 'libphonenumber-js'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nfunction MobileIdSignBlock() {\r\n const { t } = useTranslation()\r\n const [mobileNumber, setMobileNumber] = React.useState(\r\n getPhoneForCountry(appConfig.country)\r\n )\r\n const [mobileNumberIsValid, setMobileNumberIsValid] = React.useState(true)\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const [code, setVerificationCode] = React.useState('')\r\n\r\n const { signingRequest, user, setSigned, setError } =\r\n useContext(SigningContext)\r\n\r\n const id = signingRequest?.id ?? ''\r\n\r\n function onMobileNumberChange(e: React.FormEvent) {\r\n setMobileNumber(e.currentTarget.value as string)\r\n }\r\n\r\n async function mobileIdInitiate() {\r\n setError(undefined)\r\n\r\n if (user?.profile?.AuthMethodType !== 'MobileId') {\r\n const isValid = validateMobileNumber()\r\n if (!isValid) return\r\n }\r\n\r\n try {\r\n setIsWaiting(true)\r\n const data = await httpClient.mobileIdSignInitiate({\r\n signingRequestId: id,\r\n phoneNumber: mobileNumber || '',\r\n })\r\n\r\n const verification = data.verificationCode\r\n setVerificationCode(verification)\r\n setIsWaiting(false)\r\n\r\n await httpClient.mobileIdSignComplete({\r\n verificationCode: verification || '',\r\n signatureValue: data.signatureValue || '',\r\n signingRequestId: id,\r\n containerId: data.containerID || '',\r\n })\r\n\r\n setSigned()\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(exception)\r\n }\r\n\r\n setIsWaiting(false)\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n function validateMobileNumber() {\r\n const isValid = validatePhoneNumber(\r\n mobileNumber,\r\n appConfig.country as CountryCode\r\n )\r\n setMobileNumberIsValid(isValid)\r\n\r\n return isValid\r\n }\r\n\r\n if (code) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n

\r\n {t(\r\n 'Make sure that the verification code sent to your mobile matches and enter PIN2'\r\n )}\r\n

\r\n

{code}

\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n {user?.profile?.AuthMethodType === 'MobileId' ? (\r\n <>\r\n

{t('Press proceed button to sign')}

\r\n

{t('Make sure you have your cellphone nearby')}

\r\n \r\n ) : (\r\n <>\r\n

\r\n {t(\r\n 'Please enter your phone number that is connected to Mobile-ID'\r\n )}\r\n

\r\n

{t('Then press proceed button to sign')}

\r\n

{t('Make sure you have your cellphone nearby')}

\r\n \r\n \r\n {t('please enter the correct phone number')}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default MobileIdSignBlock\r\n","import React, { useContext } from 'react'\r\nimport { Button, Container, Col, Row, Card } from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport httpClient from '../../services/httpClient'\r\nimport appConfig from '../../app.config'\r\nimport { useTranslation } from 'react-i18next'\r\nimport SigningContext from '../../contexts/SigningContext'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nfunction SmartIdAdvSignBlock() {\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const [code, setVerificationCode] = React.useState('')\r\n const { t } = useTranslation()\r\n const { signingRequest, setSigned, setError } = useContext(SigningContext)\r\n\r\n const id = signingRequest?.id ?? ''\r\n\r\n async function doSmartIdSign() {\r\n setError(undefined)\r\n\r\n setIsWaiting(true)\r\n\r\n try {\r\n const userCountry = appConfig.country\r\n const signInitiate = await httpClient.smartIdSignInitiate({\r\n country: userCountry || '',\r\n signingRequestId: id,\r\n })\r\n const verification = signInitiate.verificationCode\r\n setVerificationCode(verification)\r\n setIsWaiting(false)\r\n\r\n await httpClient.smartIdSignComplete({\r\n verificationCode: verification || '',\r\n signatureValue: signInitiate.signatureValue || '',\r\n signingRequestId: id,\r\n containerId: signInitiate.containerID || '',\r\n })\r\n setSigned()\r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(exception)\r\n }\r\n\r\n setIsWaiting(false)\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n if (code) {\r\n return (\r\n \r\n \r\n \r\n \r\n

{t('Verification code')}

\r\n

{code}

\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {t(\r\n 'Notification sent to your smart device. Verify the code in the Smart-ID app and enter PIN2'\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n

\r\n {t(\r\n 'Please click the proceed button to sign the document'\r\n )}\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SmartIdAdvSignBlock\r\n","import React, { useContext } from 'react'\r\nimport { Container, Button, Row, Col } from 'react-bootstrap'\r\nimport payseraStatuses from '../../constants/payseraStatuses'\r\nimport { IPayseraCompleted } from '../../interfaces/i-paysera'\r\nimport SigningStatus from '../../constants/signingStatuses'\r\nimport { appConstants } from '../../constants/appConstants'\r\nimport { useTranslation } from 'react-i18next'\r\nimport httpClient from '../../services/httpClient'\r\nimport SigningContext from '../../contexts/SigningContext'\r\nimport { appInsights } from '../../appInsights'\r\n\r\nconst buttons = [\r\n [\r\n {\r\n dataBank: 'sampo',\r\n imgSrc: '/img/DanskeBank.png',\r\n altText: 'Danske Bank',\r\n },\r\n {\r\n dataBank: 'nordealt',\r\n imgSrc: '/img/LuminorNordea.png',\r\n altText: 'Luminor',\r\n },\r\n {\r\n dataBank: 'sb',\r\n imgSrc: '/img/SiauliuBankas.png',\r\n altText: 'JSC bank "Šiaulių bankas"',\r\n },\r\n ],\r\n [\r\n {\r\n dataBank: 'nord',\r\n imgSrc: '/img/LuminorDNB.png',\r\n altText: 'Luminor | DNB',\r\n },\r\n {\r\n dataBank: 'vb2',\r\n imgSrc: '/img/SEB.png',\r\n altText: 'SEB',\r\n },\r\n {\r\n dataBank: 'mb',\r\n imgSrc: '/img/MedicinosBankas.png',\r\n altText: 'JSC bank "Medicinos Bankas"',\r\n },\r\n ],\r\n [\r\n {\r\n dataBank: 'parex',\r\n imgSrc: '/img/Citadele.png',\r\n altText: 'Citadele',\r\n },\r\n {\r\n dataBank: 'hanza',\r\n imgSrc: '/img/Swedbank.png',\r\n altText: 'Swedbank',\r\n },\r\n {\r\n dataBank: 'lku',\r\n imgSrc: '/img/LKU.png',\r\n altText: 'LKU',\r\n },\r\n ],\r\n]\r\n\r\nfunction PayseraSignBlock() {\r\n const [payseraData, setPayseraData] = React.useState()\r\n const { t } = useTranslation()\r\n const { signingRequest, signingStatus, setSigned, setError } =\r\n useContext(SigningContext)\r\n const id = signingRequest?.id ?? ''\r\n\r\n const checkPayseraStatus = React.useCallback(async () => {\r\n if (signingStatus === payseraStatuses.complete) {\r\n const data = await httpClient.payseraComplete(id)\r\n\r\n setPayseraData(data)\r\n\r\n if (data && data.isSigned) {\r\n setSigned()\r\n } else {\r\n checkSigningStatus(id, setSigned, setError)\r\n }\r\n }\r\n }, [id, setError, setSigned, signingStatus])\r\n\r\n React.useEffect(() => {\r\n checkPayseraStatus()\r\n }, [checkPayseraStatus])\r\n\r\n const initiatePaysera =\r\n (bank: string) => async (e: React.MouseEvent) => {\r\n e.preventDefault()\r\n const data = await httpClient.payseraInitiate(id, bank)\r\n window.location.replace(data.url)\r\n }\r\n\r\n function goToSuccessUrl() {\r\n payseraData && window.location.replace(payseraData.successUrl)\r\n }\r\n\r\n if (payseraData) {\r\n return (\r\n \r\n \r\n
\r\n {t(\r\n 'Process is complete. Waiting for confirmation from Paysera, which can take anywhere between 10 seconds to 30 minutes. You may close this window and we will contact you with information regarding your final loan decision'\r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n

\r\n {t(\r\n \"Please select the bank you'd like to conduct the 1 cent transfer with\"\r\n )}\r\n :\r\n

\r\n
\r\n \r\n \r\n {buttons.map((row, i) => (\r\n \r\n {row.map((bank) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n ))}\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nasync function checkSigningStatus(\r\n id: string,\r\n signedCallback: () => void,\r\n onError: (error: Error | undefined) => void\r\n) {\r\n try {\r\n onError(undefined)\r\n\r\n const signing = await httpClient.getSigningRequestById(id)\r\n if (\r\n signing.consentError !== undefined &&\r\n signing.consentError !== '' &&\r\n signing.consentError !== null\r\n ) {\r\n onError(new Error(signing.consentError))\r\n }\r\n\r\n const response = await httpClient.checkSigningRequestStatus(id)\r\n\r\n if (response.status === SigningStatus.signed) {\r\n signedCallback()\r\n } else {\r\n setTimeout(\r\n checkSigningStatus,\r\n appConstants.signingRequestsCheckTimeout,\r\n id,\r\n signedCallback,\r\n onError\r\n )\r\n }\r\n } catch (e) {\r\n appInsights.trackException({ exception: e as Error })\r\n onError(e as Error)\r\n }\r\n}\r\n\r\nexport default PayseraSignBlock\r\n","import React, { useContext } from 'react'\r\nimport { Button, Container, Col, Row } from 'react-bootstrap'\r\nimport { DefaultSpinner } from '../pageBlocks/Spinners'\r\nimport httpClient from '../../services/httpClient'\r\nimport { useTranslation } from 'react-i18next'\r\nimport SigningContext from '../../contexts/SigningContext'\r\nimport { appInsights } from '../../appInsights'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { appConstants } from '../../constants/appConstants'\r\n\r\nfunction EParakstsSignBlock() {\r\n const [isWaiting, setIsWaiting] = React.useState(false)\r\n const { t, i18n } = useTranslation()\r\n const { signingRequest, setError } = useContext(SigningContext)\r\n\r\n const id = signingRequest?.id ?? ''\r\n\r\n async function doEParakstsSign() {\r\n setError(undefined)\r\n\r\n setIsWaiting(true)\r\n\r\n try {\r\n const selectedLanguage = i18n.language\r\n sessionStorage.setItem(appConstants.signingRequestId, id)\r\n\r\n const redirectUrl = await httpClient.eParakstsSignInitiate({\r\n locale: selectedLanguage || '',\r\n signingRequestId: id,\r\n callbackUrl: window.location.origin + appRoutes.eParakstsSignCallback\r\n })\r\n \r\n window.location.href = redirectUrl\r\n \r\n } catch (exception) {\r\n appInsights.trackException({ exception })\r\n setError(exception)\r\n }\r\n\r\n setIsWaiting(false)\r\n }\r\n\r\n if (isWaiting) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n

\r\n {t(\r\n 'Please click the proceed button to sign the document'\r\n )}\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default EParakstsSignBlock\r\n","import React, { useContext } from \"react\";\r\nimport { isMobile } from \"../../utils/helpers\";\r\nimport { Card, Row } from \"react-bootstrap\";\r\nimport SigningButtons from \"./SigningButtons\";\r\nimport AuthMethodType from \"../../constants/signingMethods\";\r\nimport IdCardSignBlock from \"./IdCardSignBlock\";\r\nimport MobileIdSignBlock from \"./MobileIdSignBlock\";\r\nimport SmartIdAdvSignBlock from \"./SmartIdAdvSignBlock\";\r\nimport PayseraSignBlock from \"./PayseraSignBlock\";\r\nimport payseraStatuses from \"../../constants/payseraStatuses\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport SigningContext from \"../../contexts/SigningContext\";\r\nimport EParakstsSignBlock from \"./EParakstsSignBlock\";\r\nimport { documentTypes } from \"../../constants/documentTypes\";\r\n\r\nfunction SigningBlock() {\r\n\r\n const { t } = useTranslation();\r\n const {\r\n signingRequest,\r\n signingStatus,\r\n user\r\n } = useContext(SigningContext);\r\n\r\n const [signingMethod, setSigningMethod] = React.useState(() => {\r\n\r\n if (signingStatus === payseraStatuses.complete) return AuthMethodType.Paysera;\r\n\r\n // for consent signing preselect SmartId by default\r\n if(signingRequest?.documentType !== documentTypes.promissoryNote && signingRequest?.signingMethods.includes(AuthMethodType.SmartIdAdv)){\r\n return AuthMethodType.SmartIdAdv\r\n }\r\n\r\n if (user && user.profile.AuthMethodType in AuthMethodType && signingRequest?.signingMethods.includes(AuthMethodType[user.profile.AuthMethodType] as unknown as AuthMethodType)) {\r\n\r\n return AuthMethodType[user.profile.AuthMethodType] as unknown as AuthMethodType;\r\n }\r\n\r\n return signingRequest?.signingMethods[0];\r\n });\r\n\r\n function getSigningView() {\r\n\r\n switch (signingMethod) {\r\n case AuthMethodType.CardId:\r\n localStorage.setItem('signMethod', AuthMethodType[signingMethod]);\r\n return !isMobile() && ;\r\n\r\n case AuthMethodType.MobileId:\r\n localStorage.setItem('signMethod', AuthMethodType[signingMethod]);\r\n return ;\r\n\r\n case AuthMethodType.Paysera:\r\n localStorage.setItem('signMethod', AuthMethodType[signingMethod]);\r\n return ;\r\n\r\n case AuthMethodType.SmartIdAdv:\r\n case AuthMethodType.SmartIdBasic:\r\n localStorage.setItem('signMethod', AuthMethodType[signingMethod]);\r\n return ;\r\n \r\n case AuthMethodType.eParaksts:\r\n localStorage.setItem('signMethod', AuthMethodType[signingMethod]);\r\n return ;\r\n\r\n default:\r\n return

{t(\"No signing method exist for this request\")}

;\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n const buttons = ;\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n {buttons}\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n {getSigningView()}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SigningBlock;\r\n","import React, { useContext } from \"react\";\r\nimport { Row, Card, Col, Button, Container } from \"react-bootstrap\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport httpClient from \"../../services/httpClient\";\r\nimport { downloadBlob } from \"../../utils/helpers\";\r\nimport SigningContext from \"../../contexts/SigningContext\";\r\nimport appConfig from \"../../app.config\";\r\nimport { documentTypes } from \"../../constants/documentTypes\";\r\nimport SigningStatus from \"../../constants/signingStatuses\";\r\nimport TagManager from \"../TagManager\";\r\nimport { ITagManagerArgs } from \"../../interfaces/i-tag-manager-args\";\r\nimport { IDataLayer } from \"../../interfaces/i-data-layer\";\r\nimport { GtmEvents } from \"../../constants/gtmEvents\";\r\nimport AuthMethodType from \"../../constants/signingMethods\";\r\n\r\nfunction SigningCompleteBlock() {\r\n\r\n const { t } = useTranslation();\r\n const {\r\n signingRequest,\r\n setError\r\n } = useContext(SigningContext);\r\n\r\n const { country } = appConfig;\r\n\r\n const isConsent = signingRequest?.documentType === documentTypes.consent;\r\n const isConsentSignLt = signingRequest?.status === SigningStatus.signed && isConsent && country === \"lt\";\r\n \r\n const trigger = React.useCallback(async () => {\r\n const signMethod = localStorage.getItem('signMethod');\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: signingRequest?.applicationId,\r\n signingMethod: signMethod,\r\n authenticationMethod: undefined,\r\n event: GtmEvents.SigningSuccess,\r\n } as IDataLayer\r\n } as ITagManagerArgs;\r\n\r\n TagManager.dataLayer(tagManagerArgs);\r\n\r\n if (signingRequest?.documentType === documentTypes.consent &&\r\n signMethod === AuthMethodType[AuthMethodType.Paysera]) {\r\n const tagManagerArgs = {\r\n dataLayer: {\r\n applicationID: signingRequest?.applicationId,\r\n signingMethod: signMethod,\r\n authenticationMethod: undefined,\r\n event: GtmEvents.ConsentSuccess,\r\n } as IDataLayer\r\n } as ITagManagerArgs;\r\n\r\n TagManager.dataLayer(tagManagerArgs);\r\n }\r\n }, [signingRequest]);\r\n\r\n React.useEffect(() => {\r\n trigger();\r\n }, [trigger])\r\n\r\n async function downloadSignedDocument() {\r\n\r\n if (!signingRequest) {\r\n setError(new Error(\"No data\"));\r\n return;\r\n }\r\n\r\n const signMethod = localStorage.getItem('signMethod');\r\n\r\n const blob = await httpClient.getSignedDocument(signingRequest.id);\r\n\r\n const extension = signMethod === AuthMethodType[AuthMethodType.Paysera] ? \"pdf\"\r\n : country === \"lt\"\r\n ? \"adoc\"\r\n : country === \"lv\"\r\n ? \"asice\"\r\n : \"bdoc\";\r\n\r\n const fileName = `TF Bank ${isConsent ? t(\"consent\") : t(\"promissoryNote\")\r\n }_${signingRequest.applicationId}.${extension}`;\r\n\r\n downloadBlob(blob, fileName);\r\n }\r\n\r\n return (\r\n \r\n \r\n {isConsentSignLt &&\r\n \r\n

{t(\"Your identity has been successfully verified!\")}

\r\n
\r\n }\r\n {(isConsent !== true || country !== \"lt\") &&\r\n < Card.Header >\r\n

{t(\"Esigning was successful\")}

\r\n }\r\n \r\n \r\n {signingRequest?.status === SigningStatus.signed && isConsent &&\r\n \r\n

{t(\"In the near future, TF Bank will contact you about the next steps to obtain a loan.\")}

\r\n \r\n }\r\n {(isConsent !== true || country !== \"lt\") &&\r\n \r\n

{t(\"Please download your esigned contract by pressing the button below\")}

\r\n \r\n }\r\n \r\n {isConsentSignLt &&\r\n \r\n \r\n {t(\"Download TF Bank Privacy Policy\")}\r\n \r\n }\r\n {(isConsent !== true || country !== \"lt\") &&\r\n \r\n \r\n {t(\"Download esigned document\")}\r\n }\r\n \r\n \r\n {(isConsent !== true || country !== \"lt\") &&\r\n {\r\n window.location.replace(signingRequest ? signingRequest.redirectUrl : \"\")\r\n }}>\r\n {t(\"Back to merchant\")}\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SigningCompleteBlock;\r\n","import React, { useContext } from \"react\";\r\nimport { Alert, Container, Col, Button } from \"react-bootstrap\";\r\nimport { DefaultSpinner } from \"../pageBlocks/Spinners\";\r\nimport { RouteComponentProps } from \"react-router\";\r\nimport { ISignRouteParam } from \"../../interfaces/i-signing-page\";\r\nimport SigningStage from \"../../constants/signingStages\";\r\nimport DefaultSigningBlock from \"../pageBlocks/DefaultSigningBlock\";\r\nimport SigningBlock from \"../pageBlocks/SigningBlock\";\r\nimport SigningCompleteBlock from \"../pageBlocks/SigningCompleteBlock\";\r\nimport SigningContext from \"../../contexts/SigningContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction SignPage({ match }: RouteComponentProps) {\r\n\r\n const {\r\n fetchSigningRequest,\r\n signingRequest,\r\n signingStage,\r\n error,\r\n setError\r\n } = useContext(SigningContext)\r\n const { t } = useTranslation();\r\n React.useEffect(\r\n () => {\r\n fetchSigningRequest(match.params.id, match.params.status);\r\n },\r\n [fetchSigningRequest, match, signingStage]\r\n )\r\n\r\n function getRenderBlock() {\r\n\r\n if (!signingRequest) return null;\r\n\r\n switch (signingStage) {\r\n case SigningStage.signing:\r\n\r\n return ;\r\n\r\n case SigningStage.complete:\r\n\r\n return ;\r\n\r\n default:\r\n return ;\r\n }\r\n }\r\n\r\n function BackToMerchant() {\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {!signingRequest && !error\r\n ? \r\n : <>\r\n {error &&\r\n signingRequest && setError(undefined)}>\r\n {error.message}\r\n \r\n }\r\n\r\n {getRenderBlock()}\r\n \r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport default SignPage\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nfunction Footer() {\r\n\r\n const { t } = useTranslation();\r\n\r\n return
\r\n
\r\n

\r\n © {t(\"__footer\")}\r\n

\r\n
\r\n
\r\n}\r\n\r\nexport default Footer;","import React, { Suspense } from 'react'\r\nimport { BrowserRouter, Switch, Route } from 'react-router-dom'\r\nimport { possiblyReturnSigningClass } from '../src/utils/helpers'\r\nimport Header from './components/Header'\r\nimport LoginPage from './components/pages/LoginPage'\r\nimport LogoutPage from './components/pages/LogoutPage'\r\nimport ErrorPage from './components/pages/ErrorPage'\r\nimport FailedSign from './components/pages/FailedSign'\r\nimport CallbackPage from './components/pages/CallbackPage'\r\nimport SignRootPage from './components/pages/SignRootPage'\r\nimport SignPage from './components/pages/SignPage'\r\nimport { appRoutes } from './constants/routes'\r\nimport Footer from './components/pageBlocks/Footer'\r\nimport './App.scss'\r\nimport appConfig from './app.config'\r\nimport { SigningContextProvider } from './contexts/SigningContext'\r\nimport TagManager from './components/TagManager'\r\nimport { ITagManagerArgs } from '././interfaces/i-tag-manager-args'\r\nimport httpClient from './services/httpClient'\r\nimport './appInsights'\r\nimport { PayseraAuthCallback } from './components/pageBlocks/PayseraAuthCallback'\r\nimport { EParakstsAuthCallback } from './components/pageBlocks/EParakstsAuthCallback'\r\nimport { EParakstsSignCallback } from './components/pageBlocks/EParakstsSignCallback'\r\n\r\nconst queryString = require('query-string')\r\nif (queryString.parse(window.location.search.toLowerCase()).style) {\r\n sessionStorage.setItem(\r\n 'style',\r\n queryString\r\n .parse(window.location.search.toLowerCase())\r\n .style?.toString()!\r\n )\r\n import(\r\n `./styling/${queryString\r\n .parse(window.location.search.toLowerCase())\r\n .style?.toString()}.css`\r\n ).catch((e) => window.console.warn(e))\r\n}\r\n\r\n// do not change it to switch!!! it is optimized by compiler\r\nif (appConfig.country === 'ee') {\r\n require('./App.ee.scss')\r\n} else if (appConfig.country === 'lt') {\r\n require('./App.lt.scss')\r\n}\r\n\r\nconst DiagnosticPage = React.lazy(\r\n () => import('./components/pages/DiagnosticPage')\r\n)\r\nconst gtm = process.env.REACT_APP_GTM_ID\r\n\r\nasync function trigger() {\r\n const key = await httpClient.getGoogleTagManager(gtm)\r\n\r\n const tagManagerArgs: ITagManagerArgs = {\r\n gtmId: key,\r\n dataLayer: undefined,\r\n }\r\n TagManager.initialize(tagManagerArgs)\r\n}\r\n\r\nconst App: React.FC = () => {\r\n React.useEffect(() => {\r\n trigger()\r\n }, [])\r\n\r\n return (\r\n \r\n
\r\n }>\r\n
\r\n \r\n \r\n {appConfig.environment !== 'production' && (\r\n (\r\n }>\r\n \r\n \r\n )}\r\n exact\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {appConfig.environment !== 'production' && (\r\n \r\n )}\r\n {appConfig.environment === 'production' && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default App\r\n","import React, { useEffect, useState, FC } from 'react'\r\nimport { Card, Alert, Spinner, Container } from 'react-bootstrap'\r\nimport { RouteComponentProps } from 'react-router'\r\nimport SigningStatus from '../../constants/signingStatuses'\r\nimport { ISignRouteParam } from '../../interfaces/i-signing-page'\r\nimport { userManager } from '../../services/auth.service'\r\nimport httpClient from '../../services/httpClient'\r\n\r\nconst checkSigningStatus = async (id: string) => {\r\n while (true) {\r\n const statusResponse = await httpClient.payseraStatus(id)\r\n if (\r\n statusResponse.status === SigningStatus.signed ||\r\n statusResponse.status === SigningStatus.authenticated\r\n ) {\r\n await userManager.clearStaleState()\r\n await userManager.signinRedirect({\r\n extraQueryParams: {\r\n SigningRequestId: id,\r\n redirect_to: `${window.location.origin}/sign/${id}`,\r\n },\r\n })\r\n return\r\n }\r\n if (statusResponse.status === SigningStatus.failed) {\r\n throw new Error('paysera failed')\r\n }\r\n await new Promise((resolve) => setTimeout(resolve, 3000))\r\n }\r\n}\r\n\r\nexport const PayseraAuthCallback: FC> = ({\r\n match,\r\n}) => {\r\n const [error, setError] = useState()\r\n const signingRequestId = match.params.id\r\n\r\n useEffect(() => {\r\n httpClient\r\n .payseraComplete(signingRequestId)\r\n .then(() => checkSigningStatus(signingRequestId))\r\n .catch(setError)\r\n }, [signingRequestId])\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n {error.message}\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import React, { useEffect, useState, FC } from 'react'\r\nimport { Card, Alert, Spinner, Container, Button } from 'react-bootstrap'\r\nimport { RouteComponentProps } from 'react-router'\r\nimport { ISignRouteParam } from '../../interfaces/i-signing-page'\r\nimport httpClient from '../../services/httpClient'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { appConstants } from '../../constants/appConstants'\r\n\r\nexport const EParakstsAuthCallback: FC> = ({\r\n match,\r\n}) => {\r\n const [error, setError] = useState()\r\n const search = window.location.search\r\n const params = new URLSearchParams(search)\r\n const signingRequestId = sessionStorage.getItem(appConstants.signingRequestId)\r\n\r\n \r\n\r\n const { t } = useTranslation();\r\n\r\n\r\n async function signin() {\r\n \r\n try {\r\n if (window.location.search.indexOf('error') !== -1) {\r\n const errorMsg = params.get('error')\r\n setError(new Error(errorMsg ? errorMsg : ''))\r\n } else if (window.location.search.indexOf('code') > -1) {\r\n const authResult =\r\n await httpClient.eParakstsResultGet(search, window.location.origin + appRoutes.eParakstsCallback)\r\n \r\n httpClient.redirectTo(\r\n authResult.returnUrl ?? window.location.origin + appRoutes.signRoot,\r\n authResult.secret\r\n )\r\n }\r\n } catch (error) {\r\n setError(error)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n signin()\r\n }, [signingRequestId])\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n {t(error.message)}\r\n \r\n \r\n
\r\n {\r\n window.location.replace(window.location.origin + appRoutes.signRoot + \"/\" + signingRequestId)\r\n }}>\r\n {t(\"Back\")}\r\n \r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n","import React, { useEffect, useState, FC } from 'react'\r\nimport { Card, Alert, Spinner, Container, Button } from 'react-bootstrap'\r\nimport { RouteComponentProps } from 'react-router'\r\nimport { ISignRouteParam } from '../../interfaces/i-signing-page'\r\nimport httpClient from '../../services/httpClient'\r\nimport { appRoutes } from '../../constants/routes'\r\nimport { useTranslation } from 'react-i18next'\r\nimport { appConstants } from '../../constants/appConstants'\r\n\r\n\r\nexport const EParakstsSignCallback: FC> = ({\r\n match,\r\n}) => {\r\n const [error, setError] = useState()\r\n const signingRequestId = sessionStorage.getItem(appConstants.signingRequestId)\r\n\r\n const { t } = useTranslation();\r\n\r\n const search = window.location.search\r\n const params = new URLSearchParams(search)\r\n\r\n async function signin() {\r\n \r\n try {\r\n if (window.location.search.indexOf('error') !== -1) {\r\n const errorMsg = params.get('error')\r\n setError(new Error(errorMsg ? errorMsg : ''))\r\n } else if (window.location.search.indexOf('code') > -1) {\r\n await httpClient.eParakstsSignComplete(search, window.location.origin + appRoutes.eParakstsSignCallback, signingRequestId!)\r\n \r\n window.location.href = `${window.location.origin}/sign/${signingRequestId}/authenticated`\r\n }\r\n } catch (error) {\r\n setError(error)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n signin()\r\n }, [signingRequestId])\r\n\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n {t(error.message)}\r\n \r\n \r\n
\r\n {\r\n window.location.replace(`${window.location.origin}/sign/${signingRequestId}/authenticated`)\r\n }}>\r\n {t(\"Back\")}\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport Backend from \"i18next-xhr-backend\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport appConfig from \"./app.config\";\r\n\r\ni18n\r\n // load translation using xhr -> see /public/locales\r\n // learn more: https://github.com/i18next/i18next-xhr-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n keySeparator: \":::\",\r\n whitelist: Object.keys(appConfig.languages),\r\n fallbackLng: process.env.REACT_APP_COUNTRY,\r\n debug: process.env.NODE_ENV === \"development\",\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n },\r\n detection: {\r\n order: ['localStorage', 'htmlTag', 'navigator', 'path', 'subdomain', 'querystring', 'cookie'],\r\n }\r\n });\r\n\r\n\r\nexport default i18n;","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport './i18n';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","export type LanguageType = 'en' | 'ee' | 'lt' | 'ru' | 'lv'\r\n\r\ninterface IAppConfig {\r\n certificateRequesterBaseUrl: string\r\n\r\n country: 'ee' | 'lt' | 'lv'\r\n\r\n environment: string\r\n\r\n authorityBaseUrl: string\r\n\r\n apiBaseUrl: string\r\n\r\n languages: {\r\n [key in LanguageType]?: string\r\n }\r\n\r\n instrumentationKey: string\r\n}\r\n\r\nconst appConfig: IAppConfig = {\r\n certificateRequesterBaseUrl: process.env\r\n .REACT_APP_CERTIFICATE_REQUESTER_URL as string,\r\n\r\n country: process.env.REACT_APP_COUNTRY as 'ee' | 'lt' | 'lv',\r\n\r\n environment: process.env.REACT_APP_ENVIRONMENT as string,\r\n\r\n authorityBaseUrl: process.env.REACT_APP_AUTHORITY_BASE_URL as string,\r\n\r\n apiBaseUrl: process.env.REACT_APP_BASE_API_URL as string,\r\n\r\n instrumentationKey: process.env.REACT_APP_INSTRUMENTATION_KEY as string,\r\n\r\n languages:\r\n process.env.REACT_APP_COUNTRY === 'ee'\r\n ? {\r\n ee: 'Estonian',\r\n ru: 'Russian',\r\n en: 'English',\r\n }\r\n : process.env.REACT_APP_COUNTRY === 'lt'\r\n ? {\r\n lt: 'Lietuvių',\r\n en: 'English',\r\n }\r\n : {\r\n lv: 'Latviski',\r\n en: 'English',\r\n },\r\n}\r\n\r\nexport default appConfig\r\n"],"sourceRoot":""}