h*      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0.0.1.2 Safe-Inferred"%&)1>i8FI:;<=D@LMN?GHB>50["OP#  /',YC+bcdefg9A& -$Q762! T\)](WRSEJK314%* stuv.UVXZ^_`akyhijlmnopqrwxz{|}~8FI:;<=D@LMN?GHB>50["OP#  /',YC+bcdefg9A& -$Q762! T\)](WRSEJK314%* stuv.UVXZ^_`akyhijlmnopqrwxz{|}~ Safe-Inferred"%&)1>  Safe-Inferred"%&)1> s   Safe-Inferred"%&)1>  Safe-Inferred"%&)1> o Safe-Inferred"%&)1>8github-app-tokenRun an action to (e.g.) generate a token and create a thread to refresh it< will create an initial token and a thread that checks its  on a loop. When it has expired, the action is used again to replace the token. ref <-  $ generateInstallationToken creds installationId Use ( to access the (possibly) updated token. #for_ repos $ repo -> do token <-  makeSomeRequest token repo If you can't rely on program exit to clean up this background thread, you can manually cancel it:  ref  Safe-Inferred"%&)1>               !" !# $ % & ' ( )* + , - . / 0 1 2 3 4 5 6 7 !8 9: ; < = > ? !@ AB C 9D E FG )H I JK LM NO P Q RS T RU RV RW RXYZ[ \] R^ _ R` Ra Rb cd Re \f \g Rh ci cj Rk Rl Rm n o !pqrstuv w x yz{|} ~ A  F   J    ! ! ! ! ! ! ! ! !                                          F F F F F F F                        9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9      A A A c  J J J J J J J J J J J J J J J J J J J J                      L L L L  qrq/github-app-token-0.0.1.2-1dWlA33v2gvBYY2xNvMDPjGitHub.App.Token.PreludeGitHub.App.Token.JWTGitHub.App.Token.AppCredentialsGitHub.App.Token.GenerateGitHub.App.Token.Refreshgithub-app-tokenGitHub.App.TokenPaths_github_app_tokenbaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint otherwisemap$GHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negate>>=>>fmapreturnControl.Monad.Failfail fromIntegral realToFrac toInteger toRational<>memptymappendmconcat<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShow MonadFail Applicative Data.FoldableFoldableData.Traversable Traversable GHC.GenericsGeneric SemigroupMonoid GHC.TypesBoolStringCharDoubleFloatInt ghc-bignumGHC.Num.IntegerInteger GHC.MaybeMaybeOrderingRational~IOWord Data.EitherEitherFalseNothingJustTrueLeftRightLTEQGTminBoundmaxBound/= text-2.0.2Data.Text.InternalText time-1.12.2 Data.Time.Clock.Internal.UTCTimeUTCTimeliftA2when Control.Monadunlessbytestring-0.11.5.2Data.ByteString.Internal.Type ByteStringidreadList Data.Functor<$>show<*<$mapM_ Text.Readread.constcompare<<=>maxmin&&||notGHC.ErrerrorerrorWithoutStackTrace undefined=<<flip$!untilasTypeOf+*abssignumsubtract Data.Maybemaybeheadtaillastinitscanlscanl1scanrscanr1iteraterepeat replicatecycle takeWhile dropWhiletakedropsplitAtspanbreakreverselookup!!zip3zipWithzipWith3unzipunzip3 showsPrecshowListShowSshowsshowChar showString showParensuccpredtoEnumfromEnumproperFractiontruncateroundceilingfloor/recipquotremdivmodquotRemdivModevenodd^^^gcdlcm floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2pilogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanh Data.TuplefstsndcurryuncurryText.ParserCombinators.ReadPReadS readsPrec readParenlexeitherreadsfoldMapfoldrfoldlfoldr1foldl1nulllengthelemmaximumminimumsumproduct sequence_concat concatMapandoranyallnotElemGHC.Exception.Type Exception Data.OldListlinesunlineswordsunwordsGHC.IO.ExceptionIOError userErrorGHC.IOFilePathioErrorputCharputStrputStrLngetChargetLine getContentsinteractreadFile writeFile appendFilereadLnreadIOtraverse sequenceAmapMsequenceControl.Monad.IO.ClassMonadIOliftIOpackData.Text.Showunpack!path-0.9.6-ETypENnPptHHNEqjbgZZ4APath.Internal.PosixPath toFilePath Path.PosixDirFileRelAbs(unliftio-0.2.25.0-K4RrPPw6J3eGWLP8mkelevUnliftIO.ExceptionthrowIO InvalidIssuer InvalidDate$sel:field:InvalidDate$sel:date:InvalidDateInvalidPrivateKey PrivateKey$sel:unwrap:PrivateKeyIssuer$sel:unwrap:IssuerExpirationTime$sel:unwrap:ExpirationTimesignJWT$fShowInvalidIssuer$fExceptionInvalidIssuer$fShowInvalidDate$fExceptionInvalidDate$fShowInvalidPrivateKey$fExceptionInvalidPrivateKey$fShowPrivateKey $fShowIssuerAppId$sel:unwrap:AppIdAppCredentials$sel:appId:AppCredentials$sel:privateKey:AppCredentialsAccessTokenJsonDecodeError$$sel:body:AccessTokenJsonDecodeError'$sel:message:AccessTokenJsonDecodeErrorAccessTokenHttpError $sel:status:AccessTokenHttpError$sel:body:AccessTokenHttpError AccessToken$sel:token:AccessToken$sel:expires_at:AccessTokenInstallationId$sel:unwrap:InstallationIdgenerateInstallationToken $fShowAccessTokenJsonDecodeError%$fExceptionAccessTokenJsonDecodeError$fShowAccessTokenHttpError$fExceptionAccessTokenHttpError$fShowAccessToken$fGenericAccessToken$fFromJSONAccessTokenRefresh HasExpiresAt expiresAt refreshing getRefresh cancelRefresh$fHasExpiresAtAccessTokenversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDirgetDataFileName getSysconfDir