<!--
 Copyright 2021 Google LLC

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     https://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<!ELEMENT appengine-web-app (application?, version?, source-language?, server?,
                             instance-class?, automatic-scaling?,
                             manual-scaling?, basic-scaling?, static-files?,
                             resource-files?, system-properties?, vm-settings?,
                             env-variables?, ssl-enabled?, sessions-enabled?,
                             async-session-persistence?, user-permissions?,
                             public-root?, inbound-services?, env?,
                             precompilation-enabled?, admin-console?,
                             static-error-handlers?, warmup-requests-enabled?,
                             threadsafe?, servers?, code-lock?, vm?,
                             class-loader-config?, url-stream-handler?,
                             use-google-connector-j?, vm-health-check?)>
<!ATTLIST appengine-web-app
          xmlns CDATA #REQUIRED>
<!ELEMENT application (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!ELEMENT source-language (#PCDATA)>
<!ELEMENT module (#PCDATA)>
<!ELEMENT instance-class (#PCDATA)>
<!ELEMENT automatic-scaling (min-pending-latency?, max-pending-latency?,
                              min-idle-instances?, max-idle-instances?,
                              min-num-instances?, max-num-instances?,
                              cool-down-period-sec?, cpu-utilization?,
                              min-instances?, max-instances?,
                              target-cpu-utilization?,
                              target-throughput-utilization?)>
<!ELEMENT min-pending-latency (#PCDATA)>
<!ELEMENT max-pending-latency (#PCDATA)>
<!ELEMENT min-idle-instances (#PCDATA)>
<!ELEMENT max-idle-instances (#PCDATA)>
<!ELEMENT min-instances (#PCDATA)>
<!ELEMENT max-instances (#PCDATA)>
<!ELEMENT target-cpu-utilization (#PCDATA)>
<!ELEMENT target-throughput-utilization (#PCDATA)>
<!ELEMENT min-num-instances (#PCDATA)>
<!ELEMENT max-num-instances (#PCDATA)>
<!ELEMENT cool-down-period-sec (#PCDATA)>
<!ELEMENT cpu-utilization (target-utilization?, aggregation-window-length-sec?)>
<!ELEMENT target-utilization (#PCDATA)>
<!ELEMENT aggregation-window-length-sec (#PCDATA)>
<!ELEMENT vm-health-check (enable-health-check?, check-interval-sec?,
                           timeout-sec?, unhealthy-threshold?,
                           healthy-threshold?, restart-threshold?, host?)>
<!ELEMENT enable-health-check (#PCDATA)>
<!ELEMENT check-interval-sec (#PCDATA)>
<!ELEMENT timeout-sec (#PCDATA)>
<!ELEMENT unhealthy-threshold (#PCDATA)>
<!ELEMENT healthy-threshold (#PCDATA)>
<!ELEMENT restart-threshold (#PCDATA)>
<!ELEMENT host (#PCDATA)>
<!ELEMENT manual-scaling (instances)>
<!ELEMENT instances (#PCDATA)>
<!ELEMENT basic-scaling (max-instances, idle-timeout?)>
<!ELEMENT max-instances (#PCDATA)>
<!ELEMENT idle-timeout (#PCDATA)>
<!ELEMENT static-files (include|exclude)*>
<!ELEMENT include (http-header)*>
<!ATTLIST include
          path CDATA #REQUIRED
          expiration CDATA #OPTIONAL>
<!ELEMENT http-header (#PCDATA)>
<!ATTLIST http-header
          name CDATA #REQUIRED
          value CDATA #REQUIRED>
<!ELEMENT exclude EMPTY>
<!ATTLIST exclude
          path CDATA #REQUIRED>
<!ELEMENT resource-files (include|exclude)*>
<!ELEMENT system-properties (property)*>
<!ELEMENT property (#PCDATA)>
<!ATTLIST property
          name CDATA #REQUIRED
          value CDATA #REQUIRED>
<!ELEMENT vm-settings (setting)*>
<!ELEMENT setting (#PCDATA)>
<!ATTLIST setting
          name CDATA #REQUIRED
          value CDATA #REQUIRED>
<!ELEMENT env-variables (env-var)*>
<!ELEMENT env-var (#PCDATA)>
<!ATTLIST env-var
          name CDATA #REQUIRED
          value CDATA #REQUIRED>
<!ELEMENT ssl-enabled (#PCDATA)>
<!ELEMENT sessions-enabled (#PCDATA)>
<!ELEMENT async-session-persistence (#PCDATA)>
<!ATTLIST async-session-persistence
          enabled CDATA #REQUIRED
          queue-name CDATA #OPTIONAL>
<!ELEMENT precompilation-enabled (#PCDATA)>
<!ELEMENT user-permissions (permission)*>
<!ELEMENT permission (#PCDATA)>
<!ATTLIST permission
          class CDATA #REQUIRED
          name CDATA #REQUIRED
          actions CDATA #OPTIONAL>
<!ELEMENT public-root (#PCDATA)>
<!ELEMENT inbound-services (service)*>
<!ELEMENT service (#PCDATA)>
<!ELEMENT admin-console (page)*>
<!ELEMENT page (#PCDATA)>
<!ATTLIST page
          name CDATA #REQUIRED
          url CDATA #REQUIRED>
<!ELEMENT static-error-handlers (handler)*>
<!ELEMENT handler (#PCDATA)>
<!ATTLIST handler
          file CDATA #REQUIRED
          error-code CDATA #OPTIONAL>
<!ELEMENT warmup-requests-enabled (#PCDATA)>
<!ELEMENT threadsafe (#PCDATA)>
<!ELEMENT code-lock (#PCDATA)>
<!ELEMENT vm (#PCDATA)>
<!ELEMENT env (#PCDATA)>
<!ELEMENT servers (server|backend|frontend|job|worker)*>
<!ELEMENT server (instances|memory|resident|access|threads)*>
<!ATTLIST server
          name CDATA #REQUIRED>
<!ELEMENT backend (instances|memory|resident|access|threads)*>
<!ATTLIST backend
          name CDATA #REQUIRED>
<!ELEMENT frontend (instances|memory|resident|access|threads)*>
<!ATTLIST frontend
          name CDATA #REQUIRED>
<!ELEMENT job (instances|memory|resident|access|threads)*>
<!ATTLIST job
          name CDATA #REQUIRED>
<!ELEMENT worker (instances|memory|resident|access|threads)*>
<!ATTLIST worker
          name CDATA #REQUIRED>
<!ELEMENT memory (#PCDATA)>
<!ELEMENT resident (#PCDATA)>
<!ELEMENT access (#PCDATA)>
<!ELEMENT threads (#PCDATA)>
<!ELEMENT url-blacklist (#PCDATA)>
<!ELEMENT domain-to-rewrite (#PCDATA)>
<!ELEMENT enabled-rewriter (#PCDATA)>
<!ELEMENT disabled-rewriter (#PCDATA)>
<!ELEMENT class-loader-config (priority-specifier)*>
<!ELEMENT priority-specifier (EMPTY)*>
<!ATTLIST priority-specifier
          filename CDATA #REQUIRED
          priority CDATA #OPTIONAL>
<!ELEMENT url-stream-handler (#PCDATA)>
<!ELEMENT use-google-connector-j (#PCDATA)>

