Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/digitalassetlinks_v1.statements.html b/docs/dyn/digitalassetlinks_v1.statements.html
new file mode 100644
index 0000000..950b4e7
--- /dev/null
+++ b/docs/dyn/digitalassetlinks_v1.statements.html
@@ -0,0 +1,399 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="digitalassetlinks_v1.html">Digital Asset Links API</a> . <a href="digitalassetlinks_v1.statements.html">statements</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(source_androidApp_packageName=None, relation=None, source_androidApp_certificate_sha256Fingerprint=None, SHA256=None, x__xgafv=None, source_web_site=None)</a></code></p>
+<p class="firstline">Retrieves a list of all statements from a given source that match the</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(source_androidApp_packageName=None, relation=None, source_androidApp_certificate_sha256Fingerprint=None, SHA256=None, x__xgafv=None, source_web_site=None)</code>
+  <pre>Retrieves a list of all statements from a given source that match the
+specified target and statement string.
+
+The API guarantees that all statements with secure source assets, such as
+HTTPS websites or Android apps, have been made in a secure way by the owner
+of those assets, as described in the [Digital Asset Links technical design
+specification](https://github.com/google/digitalassetlinks/blob/master/well-known/details.md).
+Specifically, you should consider that for insecure websites (that is,
+where the URL starts with `http://` instead of `https://`), this guarantee
+cannot be made.
+
+The `List` command is most useful in cases where the API client wants to
+know all the ways in which two assets are related, or enumerate all the
+relationships from a particular source asset.  Example: a feature that
+helps users navigate to related items.  When a mobile app is running on a
+device, the feature would make it easy to navigate to the corresponding web
+site or Google+ profile.
+
+Args:
+  source_androidApp_packageName: string, Android App assets are naturally identified by their Java package name.
+For example, the Google Maps app uses the package name
+`com.google.android.apps.maps`.
+REQUIRED
+  relation: string, Use only associations that match the specified relation.
+
+See the [`Statement`](#Statement) message for a detailed definition of
+relation strings.
+
+For a query to match a statement, one of the following must be true:
+
+*    both the query's and the statement's relation strings match exactly,
+     or
+*    the query's relation string is empty or missing.
+
+Example: A query with relation `delegate_permission/common.handle_all_urls`
+matches an asset link with relation
+`delegate_permission/common.handle_all_urls`.
+  source_androidApp_certificate_sha256Fingerprint: string, The uppercase SHA-265 fingerprint of the certificate.  From the PEM
+ certificate, it can be acquired like this:
+
+    $ keytool -printcert -file $CERTFILE | grep SHA256:
+    SHA256: 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
+        42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+
+or like this:
+
+    $ openssl x509 -in $CERTFILE -noout -fingerprint -sha256
+    SHA256 Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
+        16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+
+In this example, the contents of this field would be `14:6D:E9:83:C5:73:
+06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
+44:E5`.
+
+If these tools are not available to you, you can convert the PEM
+certificate into the DER format, compute the SHA-256 hash of that string
+and represent the result as a hexstring (that is, uppercase hexadecimal
+representations of each octet, separated by colons).
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  source_web_site: string, Web assets are identified by a URL that contains only the scheme, hostname
+and port parts.  The format is
+
+    http[s]://<hostname>[:<port>]
+
+Hostnames must be fully qualified: they must end in a single period
+("`.`").
+
+Only the schemes "http" and "https" are currently allowed.
+
+Port numbers are given as a decimal number, and they must be omitted if the
+standard port numbers are used: 80 for http and 443 for https.
+
+We call this limited URL the "site".  All URLs that share the same scheme,
+hostname and port are considered to be a part of the site and thus belong
+to the web asset.
+
+Example: the asset with the site `https://www.google.com` contains all
+these URLs:
+
+  *   `https://www.google.com/`
+  *   `https://www.google.com:443/`
+  *   `https://www.google.com/foo`
+  *   `https://www.google.com/foo?bar`
+  *   `https://www.google.com/foo#bar`
+  *   `https://user@password:www.google.com/`
+
+But it does not contain these URLs:
+
+  *   `http://www.google.com/`       (wrong scheme)
+  *   `https://google.com/`          (hostname does not match)
+  *   `https://www.google.com:444/`  (port does not match)
+REQUIRED
+
+Returns:
+  An object of the form:
+
+    { # Response message for the List call.
+    "errorCode": [ # Error codes that describe the result of the List operation.
+      "A String",
+    ],
+    "statements": [ # A list of all the matching statements that have been found.
+      { # Describes a reliable statement that has been made about the relationship
+          # between a source asset and a target asset.
+          #
+          # Statements are always made by the source asset, either directly or by
+          # delegating to a statement list that is stored elsewhere.
+          #
+          # For more detailed definitions of statements and assets, please refer
+          # to our [API documentation landing
+          # page](/digital-asset-links/v1/getting-started).
+        "source": { # Uniquely identifies an asset. # Every statement has a source asset.
+            # REQUIRED
+            #
+            # A digital asset is an identifiable and addressable online entity that
+            # typically provides some service or content.  Examples of assets are websites,
+            # Android apps, Twitter feeds, and Plus Pages.
+          "web": { # Describes a web asset. # Set if this is a web asset.
+            "site": "A String", # Web assets are identified by a URL that contains only the scheme, hostname
+                # and port parts.  The format is
+                #
+                #     http[s]://<hostname>[:<port>]
+                #
+                # Hostnames must be fully qualified: they must end in a single period
+                # ("`.`").
+                #
+                # Only the schemes "http" and "https" are currently allowed.
+                #
+                # Port numbers are given as a decimal number, and they must be omitted if the
+                # standard port numbers are used: 80 for http and 443 for https.
+                #
+                # We call this limited URL the "site".  All URLs that share the same scheme,
+                # hostname and port are considered to be a part of the site and thus belong
+                # to the web asset.
+                #
+                # Example: the asset with the site `https://www.google.com` contains all
+                # these URLs:
+                #
+                #   *   `https://www.google.com/`
+                #   *   `https://www.google.com:443/`
+                #   *   `https://www.google.com/foo`
+                #   *   `https://www.google.com/foo?bar`
+                #   *   `https://www.google.com/foo#bar`
+                #   *   `https://user@password:www.google.com/`
+                #
+                # But it does not contain these URLs:
+                #
+                #   *   `http://www.google.com/`       (wrong scheme)
+                #   *   `https://google.com/`          (hostname does not match)
+                #   *   `https://www.google.com:444/`  (port does not match)
+                # REQUIRED
+          },
+          "androidApp": { # Describes an android app asset. # Set if this is an Android App asset.
+            "packageName": "A String", # Android App assets are naturally identified by their Java package name.
+                # For example, the Google Maps app uses the package name
+                # `com.google.android.apps.maps`.
+                # REQUIRED
+            "certificate": { # Describes an X509 certificate. # Because there is no global enforcement of package name uniqueness, we also
+                # require a signing certificate, which in combination with the package name
+                # uniquely identifies an app.
+                #
+                # Some apps' signing keys are rotated, so they may be signed by different
+                # keys over time.  We treat these as distinct assets, since we use (package
+                # name, cert) as the unique ID.  This should not normally pose any problems
+                # as both versions of the app will make the same or similar statements.
+                # Other assets making statements about the app will have to be updated when a
+                # key is rotated, however.
+                #
+                # (Note that the syntaxes for publishing and querying for statements contain
+                # syntactic sugar to easily let you specify apps that are known by multiple
+                # certificates.)
+                # REQUIRED
+              "sha256Fingerprint": "A String", # The uppercase SHA-265 fingerprint of the certificate.  From the PEM
+                  #  certificate, it can be acquired like this:
+                  #
+                  #     $ keytool -printcert -file $CERTFILE | grep SHA256:
+                  #     SHA256: 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
+                  #         42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+                  #
+                  # or like this:
+                  #
+                  #     $ openssl x509 -in $CERTFILE -noout -fingerprint -sha256
+                  #     SHA256 Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
+                  #         16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+                  #
+                  # In this example, the contents of this field would be `14:6D:E9:83:C5:73:
+                  # 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
+                  # 44:E5`.
+                  #
+                  # If these tools are not available to you, you can convert the PEM
+                  # certificate into the DER format, compute the SHA-256 hash of that string
+                  # and represent the result as a hexstring (that is, uppercase hexadecimal
+                  # representations of each octet, separated by colons).
+            },
+          },
+        },
+        "relation": "A String", # The relation identifies the use of the statement as intended by the source
+            # asset's owner (that is, the person or entity who issued the statement).
+            # Every complete statement has a relation.
+            #
+            # We identify relations with strings of the format `<kind>/<detail>`, where
+            # `<kind>` must be one of a set of pre-defined purpose categories, and
+            # `<detail>` is a free-form lowercase alphanumeric string that describes the
+            # specific use case of the statement.
+            #
+            # Refer to [our API documentation](/digital-asset-links/v1/relation-strings)
+            # for the current list of supported relations.
+            #
+            # Example: `delegate_permission/common.handle_all_urls`
+            # REQUIRED
+        "target": { # Uniquely identifies an asset. # Every statement has a target asset.
+            # REQUIRED
+            #
+            # A digital asset is an identifiable and addressable online entity that
+            # typically provides some service or content.  Examples of assets are websites,
+            # Android apps, Twitter feeds, and Plus Pages.
+          "web": { # Describes a web asset. # Set if this is a web asset.
+            "site": "A String", # Web assets are identified by a URL that contains only the scheme, hostname
+                # and port parts.  The format is
+                #
+                #     http[s]://<hostname>[:<port>]
+                #
+                # Hostnames must be fully qualified: they must end in a single period
+                # ("`.`").
+                #
+                # Only the schemes "http" and "https" are currently allowed.
+                #
+                # Port numbers are given as a decimal number, and they must be omitted if the
+                # standard port numbers are used: 80 for http and 443 for https.
+                #
+                # We call this limited URL the "site".  All URLs that share the same scheme,
+                # hostname and port are considered to be a part of the site and thus belong
+                # to the web asset.
+                #
+                # Example: the asset with the site `https://www.google.com` contains all
+                # these URLs:
+                #
+                #   *   `https://www.google.com/`
+                #   *   `https://www.google.com:443/`
+                #   *   `https://www.google.com/foo`
+                #   *   `https://www.google.com/foo?bar`
+                #   *   `https://www.google.com/foo#bar`
+                #   *   `https://user@password:www.google.com/`
+                #
+                # But it does not contain these URLs:
+                #
+                #   *   `http://www.google.com/`       (wrong scheme)
+                #   *   `https://google.com/`          (hostname does not match)
+                #   *   `https://www.google.com:444/`  (port does not match)
+                # REQUIRED
+          },
+          "androidApp": { # Describes an android app asset. # Set if this is an Android App asset.
+            "packageName": "A String", # Android App assets are naturally identified by their Java package name.
+                # For example, the Google Maps app uses the package name
+                # `com.google.android.apps.maps`.
+                # REQUIRED
+            "certificate": { # Describes an X509 certificate. # Because there is no global enforcement of package name uniqueness, we also
+                # require a signing certificate, which in combination with the package name
+                # uniquely identifies an app.
+                #
+                # Some apps' signing keys are rotated, so they may be signed by different
+                # keys over time.  We treat these as distinct assets, since we use (package
+                # name, cert) as the unique ID.  This should not normally pose any problems
+                # as both versions of the app will make the same or similar statements.
+                # Other assets making statements about the app will have to be updated when a
+                # key is rotated, however.
+                #
+                # (Note that the syntaxes for publishing and querying for statements contain
+                # syntactic sugar to easily let you specify apps that are known by multiple
+                # certificates.)
+                # REQUIRED
+              "sha256Fingerprint": "A String", # The uppercase SHA-265 fingerprint of the certificate.  From the PEM
+                  #  certificate, it can be acquired like this:
+                  #
+                  #     $ keytool -printcert -file $CERTFILE | grep SHA256:
+                  #     SHA256: 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
+                  #         42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+                  #
+                  # or like this:
+                  #
+                  #     $ openssl x509 -in $CERTFILE -noout -fingerprint -sha256
+                  #     SHA256 Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
+                  #         16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5
+                  #
+                  # In this example, the contents of this field would be `14:6D:E9:83:C5:73:
+                  # 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
+                  # 44:E5`.
+                  #
+                  # If these tools are not available to you, you can convert the PEM
+                  # certificate into the DER format, compute the SHA-256 hash of that string
+                  # and represent the result as a hexstring (that is, uppercase hexadecimal
+                  # representations of each octet, separated by colons).
+            },
+          },
+        },
+      },
+    ],
+    "maxAge": "A String", # From serving time, how much longer the response should be considered valid
+        # barring further updates.
+        # REQUIRED
+    "debugString": "A String", # Human-readable message containing information intended to help end users
+        # understand, reproduce and debug the result.
+        #
+        #
+        # The message will be in English and we are currently not planning to offer
+        # any translations.
+        #
+        # Please note that no guarantees are made about the contents or format of
+        # this string.  Any aspect of it may be subject to change without notice.
+        # You should not attempt to programmatically parse this data.  For
+        # programmatic access, use the error_code field below.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file