=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvw x y z { | } ~                                   ! " # $ % & ' ( ) * + , - ./0123456789:;< Safe-InferredM=&Indicates whether a given label in thefA data structure for storing a hierarchical set of domain labels from TLD down, supporting wildcards.*Data structure is mutually recursive with =R, and each level of the tree supports a static assignment for a hostname such as:  example.com0Or a wildcard assignment for a hostname such as:  *.example.com=Or a wildcard assignment with a set of teptions, for example: ! *.example.com admin.example.comAnd lastly, empty labels are supported so that, of course, an assignment for example.com does not necessarily have any subdomains available. As an example suppose we have the following assigned domains: h example.com foo.example.com *.bar.example.com *.qux.example.com baz.qux.example.comNThis will resolve to the following value, with some loose pseudocode notation. . Static (map) 'com' -> Unassigned Static (map) 'example' -> Assigned a (map) 'foo' -> Assigned a EmptyLabelMap 'bar' -> Unassigned (Wildcard (Assigned a EmptyLabelMap) 'qux' -> Unassigned (WildcardExcept (Assigned a (map))) 'baz' -> Assigned a EmptyLabelMapRNote that the hostname "bar.example.com" is unassigned, only the wildcard was set.=>?@ABCDEFGHIJ K L M N  =?>CBA@DEFGHIJ K L M NNone +M JAbstract type containing information on a process which will be restarted.O Since 0.2.1PZRepresents a child process which is currently being tracked by the cleanup child process. Since 0.2.1;Represents the child process which handles process cleanup. Since 0.2.1Q1Kill a process by sending it the KILL (9) signal. Since 0.1.0#Fork off the child cleanup process.?This will ideally only be run once for your entire application. Since 0.2.1R)Begin tracking the given process. If the Sy refers to a closed process, no tracking will occur. If the process is closed, then it will be untracked automatically.Note that you must compile your program with  -threaded; see T. Since 0.2.1UZExplicitly remove the given process from the tracked process list in the cleanup process. Since 0.2.1VXFork and execute a subprocess, sending stdout and stderr to the specified rotating log. Since 0.2.16Run the given command, restarting if the process dies.:Terminate the process and prevent it from being restarted. WXYZ[O\]^_P`abcdeQfRUVcommandargs environmentworking directorystdin4both stdout and stderr will be sent to this locationlogsetuid executableworking directorycommand line parameter environmentshould we restart?g   WX[ZYO\]_^P`abcdeQfRUVgNone0Represents a folder used for totating log files. Since 0.2.1A  RotatingLog which performs no logging. Since 0.2.1 Create a new  RotatingLog. Since 0.2.1hijklmnofolder to contain logsmaximum log file size, in bytespfolder containing logsqfolder containing logs new handlersfolder containing logsmaximum total log size hjiklnmopqrsNonetOCreate a directory tree, setting the uid and gid of all newly created folders. uvwxprefix for folder namebundleprefix for folder nameytuvwxytNone0Status MessageRealm [(username,password)] !"#$%&'(  !"#$%&#"! ('$%&#"! $%&'(None24+A replacement for the standard FromJSON/ typeclass which can handle relative filepaths.-7The directory from which we're reading the config file..Parse a config file, using the + typeclass./A replacement for the .:O operator which will both parse a file path and apply the relative file logic.0A replacement for the .:?O operator which will both parse a file path and apply the relative file logic. )*+,-z./0{|}~)*+,-./0./0-+,)* )*+,-z./0{|}~None!123456789:;<=>?@ABC123456789:;<=>?@ABC6789:;<=>12345?@ABC123456789:;<=>?@ABCNone+=Kg-A virtual host we want to serve content from.h*A port for an individual app to listen on.iUsed for versioning data types.pNName of the application. Should just be the basename of the application file.3DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv6DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr:pmnolijkvhgfqPedcba`_^]\[ZYXWVUTSRQuGONMLKJIHtrDFEsDFEGONMLKJIHPedcba`_^]\[ZYXWVUTSRQfghijklmnopqrstuv NonewQControls execution of the nginx thread. Follows the settings type pattern. See:  +http://www.yesodweb.com/book/settings-types.yFWhich ports to assign to apps. Defaults to unassigned ranges from IANA4Maximum request time in milliseconds per connection..Default connection time bound in milliseconds./wxyz{|}~&wxyz{|}~/|}~z{wxywxyz{| }~ None 234=K primary host, used for approot)all hosts, not including the approot host3An action to be performed for a requested hostname.KThis datatype is very similar to Stanza, but is necessarily separate since: Webapps will be assigned ports.0Not all stanzas have an associated proxy action.1Whether we should force redirect to HTTPS routes.,External HTTP port when generating APPROOTs.-External HTTPS port when generating APPROOTs./Environment variables to be passed to all apps.4Maximum request time in milliseconds per connection.settings used for pluginsl     Rl     .       None123456789:;<=>DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrwxyz{ None MxReserve the given hosts so that no other application may use them. Does not yet enable any action. The semantics are: nIf a requested host is currently actively used or by an app of the same name, it is considered reserved. If a requested host is currently reserved by an app of the same name, it is considered an error in calling this API. Only one app reservation can happen at a time. |If any requested host is currently used or reserved by an app with a different name, then those values are returned as Left. 9Otherwise, the hosts which were reserved are returned as Right. This does not" include previously active hosts. %Forget previously made reservations. "Activate a new app. Note that you must. first reserve the hostnames you'll be using.     NoneMGets an unassigned port number.Return a port to the recycled collection of the pool. Note that recycling puts the new ports at the end of the queue (FIFO), so that if an application holds onto the port longer than expected, there should be no issues.  NoneM-VGet the modification time of the bundle file this app was launched from, if relevant.nFor the forward-env option. From a Set of desired variables, create a Map pulled from the system environment.0 !"#$%&'()*+,- !"#$%&'()*+,-) !"#$%&'(*+-,  !"#$%&'() *+,-NoneHMthe next one to try3Reset which apps are running.EAny app not listed here that is currently running will be terminated.?Any app listed here that is currently running will be reloaded.BAny app listed here that is not currently running will be started../0123456 ./0123456 1.0/43562 .0/123456NoneE7-Mapping from virtual hostname to port number.78 is secure?*use incoming request header for IP addresstime bound for connectionsz{7887z{78NoneHMLoad up Keter config. 9root directory or config file99 9None1Information on an individual PostgreSQL database.;9How to create the given user/database. Default: uses the psql command line tool and sudo -u postgres.<Load a set of existing connections from a config file. If the file does not exist, it will be created. Any newly created databases will automatically be saved to this file.:;<:;<:;;< :;< !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIJKLMMNOPQQRSTUVWXYYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                               ! " # $ % & '  ( ) *+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRPSTUV*WXYZ[\]^M+_`abcdeXf/ghijklmno5pqrsItuvwxyz{|}~                     '                        .g7 keter-1.4.3Keter.Types.CommonKeter.LabelMapData.Conduit.Process.UnixData.Conduit.LogFileCodec.Archive.TempTarballKeter.Types.MiddlewareData.Yaml.FilePath!Network.HTTP.ReverseProxy.RewriteKeter.Types.V04Keter.Types.V10Keter.HostManagerKeter.PortPool Keter.AppKeter.AppManager Keter.Proxy Keter.MainKeter.Plugin.Postgres Keter.Typesbytestring-0.10.4.0Data.ByteString.Internal ByteString text-1.2.1.2Data.Text.InternalTextcontainers-0.5.5.1 Data.Map.BaseMapbaseGHC.IOFilePath GHC.Exception Exception SomeException Data.Set.BaseSetLabelMapinsertdeletelookup labelAssignedemptyMonitoredProcessProcessTrackerinitProcessTrackermonitorProcessterminateMonitoredProcess RotatingLogdummyaddChunkcloseopenRotatingLogdefaultMaxTotal TempFoldersetup unpackTempTarMiddlewareConfigLocal BasicAuth AddHeadersMethodOverridePostMethodOverrideJsonpAutoheadAcceptOverrideprocessMiddleware toMiddlewarecomposeMiddleware$fToJSONMiddlewareConfig$fFromJSONMiddlewareConfigNonEmptyVector ParseYamlFile parseYamlFileBaseDirdecodeFileRelative lookupBaselookupBaseMaybe RewriteRule ruleHeader ruleRegexruleReplacementReverseProxyConfig reversedHost reversedPort reversingHost reverseUseSSLreverseTimeoutrewriteResponseRulesrewriteRequestRulesRPEntryconfig httpManagersimpleReverseProxyAppIdAINamed AIBuiltinKeterExceptionExecutableNotFoundFileNotExecutableCannotReserveHostsInvalidKeterConfigFileInvalidConfigFileNoPortsAvailableExitCodeFailureCannotParsePostgres LogMessage WatchedFileReactivatingAppDeactivatingApp ActivatingAppForgetingReservationsReservingHostsSanityChecksPassedErrorStartingBundle OtherMessageProcessWaitingReceivedInotifyEventRemovingOldFolderTerminatingOldProcessFinishedReloadingTerminatingAppUnpackingBundle RemovingPortExceptionThrownProcessDidNotStart InvalidBundleProcessCreatedHostBSHostPort ToCurrentPrevious toCurrentPluginsPlugin pluginGetEnvAppname getAppnamelogEx $fShowAppId$fExceptionKeterException$fShowLogMessage$fToCurrentMaybe PortSettings portRange TLSConfig KeterConfig kconfigDirkconfigPortMan kconfigHost kconfigPort kconfigSsl kconfigSetuidkconfigReverseProxykconfigIpFromHeaderkconfigConnectionTimeBoundRedirectredFromredTo StaticHostshHostshRoot BundleConfig bconfigAppbconfigStaticHostsbconfigRedirects AppConfig configExec configArgs configHost configSslconfigExtraHosts configRaw fiveMinutes$fFromJSONPortSettings$fDefaultPortSettings$fParseYamlFileTLSConfig$fParseYamlFileKeterConfig$fDefaultKeterConfig$fFromJSONRedirect$fParseYamlFileStaticHost$fParseYamlFileBundleConfig$fParseYamlFileAppConfig RestartCountLimitedRestartsUnlimitedRestartsBackgroundConfig bgconfigExec bgconfigArgsbgconfigEnvironmentbgconfigRestartCountbgconfigRestartDelaySecondsbgconfigForwardEnvAppInputAIDataAIBundle WebAppConfig waconfigExec waconfigArgswaconfigEnvironmentwaconfigApprootHost waconfigHosts waconfigSsl waconfigPortwaconfigForwardEnvwaconfigTimeoutIsSecure RedirectDestRDPrefixRDUrl SourcePath SPSpecificSPAnyRedirectActionRedirectConfigredirconfigHostsredirconfigStatusredirconfigActionsStaticFilesConfig sfconfigRoot sfconfigHostssfconfigListingssfconfigMiddlewaresfconfigTimeout ProxyActionProxyActionRawPAReverseProxy PARedirectPAStaticPAPort StanzaRawStanzaBackgroundStanzaReverseProxy StanzaWebAppStanzaRedirectStanzaStaticFilesStanzaRequiresSecurekconfigPortPoolkconfigListenerskconfigBuiltinStanzaskconfigExternalHttpPortkconfigExternalHttpsPortkconfigEnvironment ListeningPort LPInsecureLPSecurebconfigStanzasbconfigPluginsaddRequiresSecure addStanzaType$fToJSONBackgroundConfig$fParseYamlFileBackgroundConfig$fFromJSONRestartCount$fToJSONWebAppConfig$fParseYamlFileWebAppConfig$fToCurrentWebAppConfig$fToJSONRedirectDest$fFromJSONRedirectDest$fToJSONRedirectAction$fFromJSONRedirectAction$fToJSONRedirectConfig$fParseYamlFileRedirectConfig$fToCurrentRedirectConfig$fToJSONStaticFilesConfig $fParseYamlFileStaticFilesConfig$fToCurrentStaticFilesConfig$fToJSONStanzaRaw$fToJSONStanza$fParseYamlFileStanza$fToCurrentKeterConfig$fParseYamlFileListeningPort$fToJSONBundleConfig$fToCurrentBundleConfig Reservations HostManagerstart reserveHostsforgetReservations activateApp deactivateApp reactivateApp lookupActionPortPoolgetPort releasePortAppStartConfig ascTempFolder ascSetuidascProcessTrackerascHostManager ascPortPool ascPluginsascLogascKeterConfigAppreload terminate getTimestampAction TerminateReload AppManager initialize reloadAppListperformaddApp terminateApp HostLookup reverseProxyketerSettings setupDBInfoload LabelEntry UnassignedAssignedWildcardExceptWildcardStatic EmptyLabelMap LabelTree hostToLabelslemap labelEntryMap getPortEntry insertTreecleanup deleteTree lookupTree memberTree$fShowLabelEntryProcessTrackerExceptionTrackedProcess killProcess trackProcessprocess-1.2.0.0System.Process.Internals ProcessHandleSystem.ProcesswaitForProcessuntrackProcessforkExecuteLogStatusRunning NoRestart NeedsRestartCannotLaunchProcessTrackerMaybePidPidNoPidc_track_processc_launch_process_trackerprocessHandleMVarwithProcessHandle_ignoreExceptions"$fExceptionProcessTrackerExceptionStateClosedCommandCloseAddChunkqueuecurrent moveCurrentsuffixloop createTreeUIDtfRoot tfCounter getFolder unpackTar$fParseYamlFileNonEmptyVector$fParseYamlFileVector$fParseYamlFileSet$fParseYamlFile[]getGrouprewrite rewriteHeaderrewriteHeaders regexRewrite filterHeaders mkRuleMap mkRequest$fToJSONRewriteRule$fFromJSONRewriteRule$fDefaultReverseProxyConfig$fToJSONReverseProxyConfig$fFromJSONReverseProxyConfig $fShowRPEntry HostValue HVReservedHVActiveHMStateactivateHelperdeactivateHelperPPStateppAvail ppRecycledgetForwardedEnvRunningBackgroundApp rbaProcess RunningWebApp rwaProcessrwaPort appModTimeappRunningWebAppsappBackgroundAppsappIdappHostsappDirappAscappRlog unpackBundle withConfigwithReservations withActionswithRotatingLogwithSanityChecks bracketedMap withWebApps launchWebApp killWebApp ensureAlivewithBackgroundAppslaunchBackgroundAppkillBackgroundAppterminateHelper pluginsGetEnv ASStartingAppState ASTerminated ASRunningappsappStartConfigmutexlog performNoLock launchWorkergetInputForBundle withClient redirectAppmissingHostResponseunknownHostResponse withLogger withManagers launchInitial getIncomingisKeter startWatchinglistDirectoryTreestartListening runAndBlockDBInfo GetConfig DBServerInfodbServerdbPortdbiNamedbiUserdbiPass dbiServer randomDBI edbiToEnv$fDefaultDBServerInfo$fFromJSONDBServerInfo$fFromJSONDBInfo$fToJSONDBInfo$fDefaultSettings